随着我们构建应用程序和服务,能够发现有关运行系统的信息变得越来越重要。 能够深入研究这些信息以诊断问题、在问题变得严重之前发现问题,甚至只是发现有关用户的信息——这些都需要日志记录。
在 Linux 和 Unix 的世界中,有两种常见的日志记录方法。 第一种是记录到文件,随着时间的推移,我们将单独的日志行写入文件,并且每隔一段时间,我们写入一个新文件。 已经编写了成千上万的软件来执行此操作(包括 Redis 本身)。 但是这种方法可能会遇到问题,因为我们有许多不同的服务写入各种日志文件,每个日志文件都有不同的滚动方式,并且没有一种通用的方式可以轻松地获取所有日志文件并进行一些有用的操作。
几乎每个可用的 Unix 和 Linux 服务器上的 TCP 和 UDP 端口 514 上运行着一个名为syslog的服务,这是第二种常见的日志记录方法。 Syslog 接受来自任何向其发送消息的程序的日志消息,并将这些消息路由到各种磁盘上的日志文件,处理旧日志的轮换和删除。 通过配置,它甚至可以将消息转发到其他服务器以进行进一步处理。 作为一项服务,它比直接记录到文件方便得多,因为所有特殊的日志文件轮换和删除都已经为我们处理好了。
替换 SYSLOG无论您最终使用此处描述的日志记录方法,您都应该考虑用syslog-ng替换您当前的 syslog 守护进程(可能是Rsyslogd)。 在使用和配置过这两个系统之后,我发现syslog-ng提供的用于指导日志消息的配置语言更容易使用。 尽管我没有空间或时间在本书中构建它,但构建一个使用 syslog 消息并将它们放入 Redis 的服务是提供请求处理所需的操作与稍后可以发生的操作(如日志记录或更新计数器)之间的一层间接的好方法。
由于 syslog 转发,日志在单个服务器上的文件中可用,这是一个很棒的长期日志记录计划(记住备份它们)。 在本节中,我们将讨论使用 Redis 作为保存更具时间敏感性的日志的一种方式,以充当短期存储在 syslog 消息中的替代品。 我们对更改日志的第一个看法是不断更新的最近日志消息流。