在构建应用程序和服务的过程中,对正在运行的系统的相关信息的挖掘能力将变得越来越重要:无论是通过挖掘信息来诊断系统问题,还是发现系统中潜在的问题,甚至是挖掘与用户有关的信息:这些都需要用到日志。
在Linux和Unix的世界中,有两种常见的记录日志的方法。第一种是将日志记录到文件里面,然后随着时间流逝不断地将一个又一个日志添加到文件里面,并在一段时间之后创建新的日志文件。包括Redis在内的很多软件都使用这种方法来记录日志。但这种记录日志的方式有可能会遇上麻烦:因为每个不同的服务器会创建不同的日志,而这些服务轮换日志也各不相同,并且也缺少一种能够方便地聚合所有日志并对其进行处理的常用方法。
syslog服务是第二种常用的日志记录方法,这个服务运行在几乎所有Linux服务器和Unix服务器的514号TCP端口和UDP端口上面。syslog接受其他程序发来的日志信息,并将这些消息路由存储在硬盘上的各个日志文件里面,除此之外,syslog还复制旧日志的轮换和删除工作。通过配置,syslog甚至可以将日志消息转发给其他服务来做进一步的处理。因为指定日志的轮换和删除工作都交给syslog来完成,所以使用syslog服务比直接将日志写入文件要方便的多。
替换syslog
无论读者使用上面列举的两种日志方法中的哪一种,都最好考虑把系统目前的syslog守护进程(通常是Rsyslogd)替换成syslog-ng。因为我经过使用并配置Rsyslogd和syslog-ng之后,发现syslog-ng用于管理和组织日志消息的配置语言使用起来更简单一些。另外,尽管因为时间和篇幅限制,我没有办法在书中构建一个处理syslog消息并将消息存储到Redis里面的服务,但对于那些需要在处理请求时立即执行的操作,以及那些可以在请求处理完毕之后再执行的操作(如日志记录和更新计数器)来说,这种服务器非常适合用作介于这两种操作之间的间接层。
syslog的转发功能可以将不同的日志分别存储在同一台服务器的多个文件里面,这对于长时间地记录日志非常有帮助(记得备份)。在这一节中,我们将介绍如何使用Redis来存储于时间紧密相关的日志,从而在功能上替代那些需要在短期内被存储的syslog消息。
首先让我们来看看,如何记录连续更新的最新日志消息。