Log 实践

log

这里比较推荐“The Twelve-Factor APP”中的方法,把log 当作事件流集中处理:见XI. Logs

日志作为事件流

透过日志能看到应用运行的状态。在基于服务器的环境中,日志通常保存在硬盘上(比如logfile),但这仅仅是日志输出的一种格式。

日志是按时间顺序汇总的事件流,将应用运行的进程和后台服务的输出按时间输出。日志的原始文件通常是一个事件一行(异常的跟踪信息可能会占用很多行)。日志没有固定的开始和结束,而是随着应用的运行始终存在。

12-Factor 应用从来不考虑何处和怎么样存储自己的输出。同时也不应该试图去记录或者管理日志文件。相反地,每个运行的进程将其输出直接写入stdout。在本地开发时,开发人员可以在terminal中观察应用的stdout。

在预发布和生产环境中,每个进程的输出流应该由环境抓取,收集并且保存到一个或者多个目标文件中,方便查看和长久的保存。但是这些归档的不应该由应用来配置,它们对于应用不可见,是由当前环境配置的。一些开源工程(类似Logplex和Fluent)能实现这样的目的。

应用的实时输出应该导入到一个文件,或者在terminal中用tail命令查看。最重要的是,输出流应该通过一个能分析和索引的系统,例如Splunk,或者通用数据存储服务,例如Hadoop/Hive。这些系统都为应用状态的查看提供了非常强大灵活的功能:

查找以前发生的具体事件
各种尺度图形化的趋势(例如每分钟多少请求)
根据用户定义值启动告警(例如每分钟错误量超过阈值则告警)

分散在各处的文件难以管理
容易出现维护上的问题 (磁盘又满了?)
使用 Logplex, Logstash, Fluentd, Hadoop/Hive等工具
小型团队可以考虑先使用 Papertrail等云日志服务

##

http://logstash.net/

https://blog.logentries.com/2014/08/what-is-syslog/

https://papertrailapp.com/

REF::