问题描述
-
如何查日志?
- 服务端/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做图表展示;
-
基本数据流如下:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。