在过去的几年里推进公司容器云的落地,陆陆续续的和日志打了不少交道,在这里做一个总结:
- 为什么需要日志
- 日志如何接收与存储
- 日志如何收集
- 日志收集客户端分析
- 日志的标准化
- 日志报警
- 日志归档
- 其他问题
为什么需要日志
日志的作用我觉得有三点:
- 故障排错
- 数据分析
- 业务审计
1,关于故障排错,当线上发生异常,查看应用的错误日志、堆栈信息、代理层的访问日志是非常有帮助的,不同级别的日志能够很好的帮助我们定位到故障点,而访问日志则能让我们知道异常情况发生在哪个环节,是client到代理,还是代理到后端。这也是降低MTTD的一个很好的工具。
2,对日志数据的分析,一方面能协助分析问题、定位故障,另一方面还可以帮我们更好的了解系统运行状态甚至是了解我们的用户。比如基于HTTP状态码和响应时间可以分析出系统的稳定性和性能状况。而基于访问日志的来源IP可以分析出用户地域属性、而基于日志量级的时间分布可以了解到系统和用户的活跃时间范围。
3,上面两种多数是最近几个月的热数据,需要实时查看和分析,也有一部分需要保存的更久,以满足合规、审计等的需求。比如有些备案就要求不同级别的日志保存不同的时长以备随时调用查看。
日志的收集与存储
在分布式系统中,众多服务分散部署在成百上千台甚至成千上万台服务器上,要想快速方便的实现上述的查找、分析和归档功能,就需要有一个集中的日志系统,通过日志收集器将各类日志进行统一汇总,存储,这样不仅能方便查找所有的日志,还有可能在众多日志数据中挖掘到一些意想不到的关联关系。
有了这个定位接下来就可以开始详细的规划了,首先是日志服务器的选型,有经典的ELK,有商业的splunk,但我们并没有采取上述两种,splunk功能完全符合,但对大量级的日志而言成本偏高,ELK中的kibana也在高版本中开始商业化,这让我们开始寻找替代方案,graylog便是一种。它的绝大多数功能都是免费的,并且性能优越,上图:
graylog也采用Elasticsearch作为存储和索引以保障性能,Mongo