共计 833 个字符,预计需要花费 3 分钟才能阅读完成。
问题描述
如何查日志?
- 服务端 /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 做图表展示;
基本数据流如下:
正文完