SaaS应用12原则:(十一)日志

把日志当作事件流

日志使得应用程序运行的动作变得透明。

在基于服务器的环境中,日志通常被写在硬盘的一个文件里,但这只是一种输出格式。

日志应该是事件流的汇总,将所有运行中进程和后端服务的输出流按照时间顺序收集起来。尽管在回溯问题时可能需要看很多行,日志最原始的格式确实是一个事件一行。日志没有确定开始和结束,但随着应用在运行会持续的增加。

12-factor应用本身从不考虑存储自己的输出流。

不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。

在预发布或线上部署中,每个进程的输出流由运行环境截获,并将其他输出流整理在一起,然后一并发送给一个或多个最终的处理程序,用于查看或是长期存档。这些存档路径对于应用来说不可见也不可配置,而是完全交给程序的运行环境管理。类似 Logplex 和 Fluentd 的开源工具可以达到这个目的。

这些事件流可以输出至文件,或者在终端实时观察。
最重要的,输出流可以发送到 Splunk 这样的日志索引及分析系统,或 Hadoop/Hive 这样的通用数据存储系统。
这些系统为查看应用的历史活动提供了强大而灵活的功能,包括:

  • 找出过去一段时间特殊的事件。
  • 图形化一个大规模的趋势,比如每分钟的请求量。
  • 根据用户定义的条件实时触发警报,比如每分钟的报错超过某个警戒线。

总结

  • 分散在各处的文件难以管理
  • 容易出现维护上的问题,比如磁盘满了
  • 当日志是由云平台而不是应用包含的库处理时,日志处理机制必须保持简单。
  • 许多服务都能提供日志集中管理,比如ELK、Splunk、Logentries,而且大多数都能方便的和Docker集成在一起

参考:

  • 12原则中文网
  • https://www.jianshu.com/p/bbdccd020a1d
  • https://segmentfault.com/a/1190000002428730

你可能感兴趣的:(软件理论及思想)