一、The Basics
Linux,Ubuntu,Centos和Red Hat Enterprise Linux(RHEL),它们共同的Linux核心意味着这些操作系统都安装了日志框架来监视系统及其服务。
Linux日志框架包括一组管理员可以使用的目录、文件、服务和命令。
1.1 Common Linux Logs and Their Locations
使用Linux的日志模式,日志位于 /var/log 目录下,其中包含系统上每个服务或日志消息流(stream of log messages)的文件和目录。
/var/log/syslog (Debian) or /var/log/messages (RHEL)::这是一般系统消息和指标的整合流。在此日志文件中,您可以找到来自邮件、内核、身份验证和 cron 等服务的消息。
/var/log/auth.log (Debian) or /var/log/secure (RHEL):此文件包含系统上成功和失败的尝试登录的身份验证日志。
/var/log/wtmp:此文件包含所有用户登录和注销活动的历史记录,用于审计用户在系统上的活动。
/var/log/lastlog:类似于 wtmp audit文件,该日志文件跟踪用户上次登录的情况。这是一个二进制文件,您可以通过以下方式读取 lastlog 命令。
/var/log/kern.log:此文件包含内核在传递到系统日志服务(如rsyslog) 进行进一步处理之前生成的日志消息。
/var/log/cron:cron服务作为协调器(orchestrator) 运行,以按计划的时间间隔启动任务。来自该服务的消息 (例如cron作业何时启动以及执行期间是否发生任何错误) 可以在此日志文件中找到。
在PostgreSQL 或Apache 等系统上运行服务时,您的应用程序的特定日志将在以下子目录下提供:/var/log。例如,如果您在基于Debian 的Linux 系统上运行Apache Web 服务器,您将在以下位置找到日志文件:/var/log/apache2。您会在此目录中找到每个日志流的单独文件,例如acess.log 或者error.log。
1.2 Introduction to Syslog
Syslog 是一种基于网络的日志记录协议,用于监视您的系统和应用程序。该协议为服务和应用程序报告其日志提供了一种标准方法。这样,就可以根据需要对它们进行处理和重定向。
1.2.1 标准化消息格式
syslog 协议提供由RFC 5424标准定义的消息格式。在这种格式中,定义了常见的事件信息,例如时间戳、主机名和生成消息的应用程序的名称。为了进一步支持此消息的构造,系统日志工具可用于指示日志来自系统的哪个部分。这是通过在消息中附加一个数字来完成的。以下是所有可用 facilities 的列表,编号从 0 到 23:
同样,可以使用 0 到 7 之间的数字将优先级附加到消息。
通过使用系统日志消息中的 facilities 和 priorities,访问系统日志数据的工具现在可以根据原始设施和消息的严重性来过滤消息。
1.2.2 系统日志协议(syslog protocol)实现
syslog 进程作为系统上的守护进程运行,以接收、存储和解释来自其他服务或应用程序的 syslog 消息。该服务通常监听用于 TCP 连接的514端口和用于 UDP 连接的601端口。许多应用程序允许您配置其事件日志,以将消息推送到正在运行的系统日志服务。
syslog 协议由不同的服务实现,例如 rsyslog 和 syslog-ng,允许您根据所需的功能集选择服务。由于这些服务与syslog 协议保持一致,因此它们可以互换用于系统和应用程序的日志记录,从而使其具有很强的可扩展性。
1.3 The Rsyslog Daemon
Rsyslog 是 syslog 守护进程的现代 open-source 实现,为任何环境提供高性能、注重安全的模块化设计。rsyslog 守护进程作为主机上的服务运行,监听发送给它的日志消息,并根据定义的操作路由这些消息。
在rsyslog的典型安装中,守护进程是通过位于以下位置的文件配置的:/var/rsyslog.conf 。在此配置文件中,使用日志消息的 facilities 和 priority 选择器允许您定义应对消息执行的操作。在下面的示例中,任何具有 mail facility 且priority 为 notice 或更高的消息都将被写入位于 /var/log/mail_errors 的日志文件中。
# <facility>.<severity> <action>
mail.notice /var/log/mail_errors
这些选择器由facility(消息的来源)和priority(消息的严重性serverity)构成,并用点分隔。下面的示例显示了使用此简单配置对传入日志执行操作的一些可能性。
# Log a message to file
mail.notice /var/log/mail_errors
# Log a message to a user
Kern.debug bob
# Emergency messages from any facility should go to all users
*.emerg *
# Log a message to another host over UDP
*.* @remote-host
# Log a message to another host over TCP
*.* @@remote-host:514
1.4 Basic Commands for Linux Logging
我们经常会连接到Linux 服务器来读取日志消息,以对系统或在其上运行的服务进行故障排除。Linux 系统上提供了多个实用程序命令,简化了您浏览存储日志消息的方式。
cat、more、less、tail、head、grep
使用这些基本命令,您可以轻松访问和导航系统上的日志消息。通过在命令中使用管道(|),您可以将多个命令链接在一起,进一步过滤它们的输出。例如,以下命令链将读取 /var/log/cron 文件并检查是否有任何消息包含字符串 “foo”。
cat /var/log/cron | grep "foo"
高级日志记录操作也可以使用 awk,cut以及高级的grep 过滤器,使你可以更深入地了解系统上发生的情况。
二、Advanced Concepts
在 Linux 日志记录指南概述的第一部分中,我们讨论了 Linux 日志记录框架的基础知识:常见的 Linux 日志文件及其位置、syslog 协议以及用于获取消息流的 rsyslog 守护进程。我们还介绍了访问和操作这些日志流的常用 Linux 命令。
在第二部分中,我们将深入探讨:
配置rsyslog 守护进程
使用systemd 和 journald 实用程序检查系统上的服务日志
使用 logrotate 在不填满磁盘的情况下维护系统上相关性最高的日志
2.1 The rsyslog Daemon Configuration
正如我们在第一部分中介绍的,Linux 使用名为 rsyslogd 的守护进程来使用 syslog 协议处理消息。该服务从常规的 syslog 守护进程演变为当前的企业级日志系统。让我们检查一下默认 rsyslog 文件的内容。例如,在 Centos 8 上,您可以在以下位置找到此文件:/etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the syst