日志处理
日志处理是一个很重要的概念,我们将尝试其中一些工具,比如ELK( Elasticsearch、Logstash和Kibana)。
传统意义上的日志只是在代码中使用简单的打印语句来追踪代码中的事件。有时候这被叫作打印式调试(print-style debugging),因为跟踪代码行为而不是使用常规的调试器。
下面是一个C语言风格的简单例子。目的是为了知道当我们输入函数fn (x)时,传入的参数x值是什么:
void fn ( char *x) {
printf ("DEBUG entering fn, x is ooSIl", X) ;}
从控制台的调试追踪可以知道程序表现的行为和我们开发时期望的一样。
当然,你也希望看到程序中是否发生了什么严重的事情,并且以较高的优先级去汇报:
printf ("ERROR x cant be an empty string
");这种风格的调试有几个问题。在你想知道程序行为时它是有用的,但是在你完成代码后想要部署时就没有那么有用了。
目前,有大量基于上述实践考验的框架,支持不同的日志方式。
日志框架比打印风格的日志有更多的价值,尤其是在定义标准和提供改进的功能上,如以下这些:
国 不同的日志优先级,比如Debug、Warning、Trace和Error。
。 过滤不同优先级的日志信息。你不可能对所有的调试信息有兴趣,但是一定会对错误感兴趣。
。 将日志记录在固定的目的地,比如文件、数据库或者网络进程。这包括我们稍后会了解的ELK。
。 日志文件的轮替和归档。老的日志文件可以被归档。
时不时地就会有新的日志框架出现,所以即使在如今,曰志问题领域看上去也还远远没有到令人满意的地步。这种趋势是可以理解的,因为处理得当的日志可以帮助你准确判断一个不再运行的网络服务的失败原因,或者你不经常管理的复杂服务。日志也很难做好,因为过度的日志会降低服务的性能,日志太少又不能帮你诊断失败的原因。因此,曰志系统尽力去在日志的不同特性间达到一个平衡。