乐趣区

大数据-客户端服务端日志采集和处理

问题描述

  • 如何查日志?

    • 服务端 /Nginx 日志存储在各台服务器本地日志文件中,只能逐台机器登陆查看;
    • 客户端日志通常由客户端记录并上报到服务端,随着用户规模的增长,客户端日志会占用相当大的空间,查询起来也是不便;
    • 某些场景需要 join 多份数日志,比如服务端 + 服务端(websocket 服务),客户端 + 服务端(广告点击效果),如何实现?
  • 如何监控和报警?

    • 线上业务出问题了,会输出错误日志,如何把这些错误日志快速发送给相关人员?
    • 有时候业务出问题,自己的报警有不够完善,只能通过一些全局的指标来发现异常(比如 Nginx 的错误率),这种情况如何及时发现
  • 如何统计业务数据?

    • 我的应用有多少安装,多少 DAU,次日留存是多少?通常可以用第三方 SDK(如 umeng)等来解决,但是更详细 / 更个性化的指标如何(比如 AB 测试)统计?
    • 客户反馈应用某些功能打不开,是网络问题?还是对应的 API 可用率偏低?还是其他情况?

方案

  • 日志收集

    • 服务端日志通过各台机器上安装的 flume 收集,并写入到 Kafka 集群指定 topic;
    • 客户端日志通过指定 API 上报到服务端,服务端将这些日志写入到 Kafka 集群指定 topic;
  • 日志处理(准实时)

    • 使用 Spark Streaming 消费 Kafka 的消息,并将处理好的数据写入到指定的存储地点;

      • 日志中的错误信息,按照指定格式汇总后,发送邮件 / 短信 / 钉钉信息;
      • 日志中的指标性数据(比如 Nginx 的错误率),统计之后发送邮件;
      • 日志中的用户行为,解析后按照指定格式写入 Kafka 集群指定 topic,供后续服务消费;
      • 日志实时 join,(todo)
  • 日志处理(离线)

    • 使用 flume 消费 Kafka 的消息,并将数据写入到 HDFS;
    • 使用 Spark 任务将 HDFS 中的原始数据解析出来,并写入到事先定义的 Hive 表;
  • 日志展示

    • 使用 Hue + Impala,可以实现 Hive 数据的查询(秒级);
    • 编写 Spark 统计任务,读取 Hive 数据,统计结果写入到 MySQL,并使用 superset 做图表展示;
  • 基本数据流如下:

退出移动版