问题描述

  • 如何查日志?

    • 服务端/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做图表展示;
  • 基本数据流如下:

    • 基本数据流

paul53089
1 声望0 粉丝