几十年来,Linux 日志记录一直由 syslogd 守护进程管理。
Syslogd 将收集系统进程和应用程序发送到 /dev/log 伪设备的日志消息。 然后它将消息定向到 /var/log/ 目录中适当的纯文本日志文件。
Syslogd 会知道将消息发送到哪里,因为每个消息都包含包含元数据字段(包括时间戳、消息来源和优先级)的标头。
在 systemd 无情、征服世界的主宰之后,Linux 日志记录现在也由 journald 处理。 我说也是因为 syslogd 还没有去任何地方,你仍然可以在 /var/log/ 中找到它的大部分传统日志文件。 但是你需要知道镇上有一个新的治安官,他的(命令行)名字是 journalctl。
但这篇文章不是关于日记的。 这里的重点是 systemd,所以让我们再深入一点。
使用 syslogd 进行日志记录
syslogd 系统上的事件生成的所有日志都添加到 /var/log/syslog 文件中。 但是,根据它们的识别特征,它们也可能被发送到同一目录中的一个或多个其他文件。
使用 syslogd,消息的分发方式由 50-default.conf
存在于 /etc/rsyslog.d/
目录。
这 example 从 50-default.conf
显示标记为与 cron 相关的日志消息将如何写入 cron.log 文件。 在这种情况下,星号
cron.* /var/log/cron.log
告诉 syslogd 发送具有任何优先级的条目(而不是像 emerg 或 err 这样的单一级别):
使用 syslogd 日志文件不需要任何特殊工具,例如 journalctl。 但是如果你想在这方面做得很好,你需要知道每个标准日志文件中保存了什么样的信息。
下表列出了最常见的 syslogd 日志文件和
他们的目的。 | 文件名 |
---|---|
目的 | 授权日志 |
系统认证和安全事件 | 引导日志 |
启动相关事件的记录 | dmesg |
与设备驱动程序相关的内核环缓冲区事件 | dpkg.log |
软件包管理事件 | 内核日志 |
Linux 内核事件 | 系统日志 |
所有日志的集合 | 重量级 |
跟踪用户会话(通过 who 和 last 命令访问)
此外,个别应用程序有时会写入自己的日志文件。 您还经常会看到为接收应用程序数据而创建的整个目录,例如 /var/log/apache2/ 或 /var/log/mysql/。
除了您之前看到的 * 符号(适用于所有优先级)之外,还可以通过八个优先级中的任何一个来控制日志重定向。 | 等级 |
---|---|
描述 | 调试 |
有助于调试 | 信息 |
信息性 | 注意 |
正常情况 | 警告 |
需要警告的情况 | 呃 |
错误条件 | 暴击 |
关键条件 | 警报 |
需要立即采取行动 | 出现 |
系统无法使用
使用 sysglogd 管理日志文件
默认情况下,syslogd 在后台处理日志轮换、压缩和删除,无需您提供任何帮助。 但是你应该知道它是如何完成的,以防你有需要特殊处理的日志。
简单的日志可能需要什么样的特殊处理? 好吧,假设您的公司必须遵守与 Sarbanes-Oxley 或 PCI-DSS 等监管或行业标准相关的交易报告规则。 如果您的 IT 基础设施记录必须在较长时间内保持可访问性,那么您肯定会想要
知道如何通过关键文件找到自己的方式。
- 要查看运行中的 logrotate 系统,请列出 /var/log/ 目录的一些内容。 例如,auth.log 文件以三种不同的格式出现: auth.log –
- 当前处于活动状态的版本,其中写入了新的身份验证消息。 auth.log.1 –
- 已轮换停止服务的最新文件。 它以未压缩格式维护,以便在必要时更容易快速调用它。 auth.log.2.gz –
Linux 中 /var/log 目录的内容
7天后,下一次轮换日期到来时,auth.log.2.gz会更名为auth.log.3.gz,auth.log.1会被压缩并更名为auth.log.2.gz,auth.log将变为 auth.log.1,并且将创建一个新文件并命名为 auth.log。
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# packages drop log rotation information into this directory
include /etc/logrotate.
默认日志轮换周期在 /etc/logrotate.conf 文件中控制。 此列表中所示的值会在一周后轮换文件,并在四周后删除旧文件。
$ ls /etc/logrotate.d/
apache2 apt dpkg mysql-server
rsyslog
samba
unattended-upgrade
/etc/logrotate.d/ 目录还包含自定义配置文件,用于管理单个服务或应用程序的日志轮换。 列出该目录的内容,您会看到以下配置文件:
您可以查看他们的内容以了解他们对日志轮换的配置。
?许多管理员选择将日志条目重定向到专门构建的远程日志服务器,在那里数据可以获得应有的所有专业关注。 这可以腾出应用程序服务器来执行他们的即时任务,并将日志数据整合到一个易于访问的中央位置。
如何读取系统日志文件
您知道您有比阅读数百万行日志条目更好的时间来处理。
在这里应该完全避免使用 cat 。 它只会在您的屏幕上转储数千行。
我建议使用 grep 通过文件过滤文本。
使用 tail -f 命令可以实时读取当前日志文件。 您可以将其与 grep 结合使用以过滤所需的文本。
在某些情况下,您可能需要访问旧的压缩日志。 您可能总是先提取文件,然后使用 grep、less 和其他命令来读取其内容,但是,有更好的选择。 有 zcat、zless 等 z 命令可让您处理压缩文件而无需显式提取它们。 example 一个实用的
日志分析 example 这里有一个明显的
这将在 auth.log 文件中搜索登录尝试失败的证据。 搜索单词 failure 将
返回包含短语身份验证失败的任何行。
$ cat /var/log/auth.log | grep 'Authentication failure'
Sep 6 09:22:21 workstation su[21153]: pam_authenticate: Authentication failure
偶尔检查一下可以帮助您发现通过猜测正确密码来破坏帐户的企图。 任何人都可以将密码弄乱一两次,但太多失败的尝试会让你怀疑: admin 如果你是那种
logger "Authentication failure"
谁从不犯错,那么这个搜索可能会是空的。 您可以通过使用名为 logger 的程序手动生成日志条目来保证自己至少有一个结果。 尝试做这样的事情:
您还可以通过登录用户帐户并输入错误密码来预先植入真正的错误。
如您所知,grep 为您完成了这项工作,但您从结果中只能看到身份验证失败。 知道涉及谁的帐户不是很有用吗? 您可以通过告诉它包含匹配之前和之后的行来扩展 grep 返回的结果。 example 这
$ cat /var/log/auth.log | grep -C1 failure
Sep 6 09:22:19 workstation su[21153]: pam_unix(su:auth): authentication
failure; logname= uid=1000 euid=0 tty=/dev/pts/4 ruser=david rhost=
user=studio
Sep 6 09:22:21 workstation su[21153]: pam_authenticate:
Authentication failure
Sep 6 09:22:21 workstation su[21153]: FAILED su for studio by david
打印匹配及其周围的线条。 它告诉你有人使用帐户 david 尝试使用 su(切换用户)登录工作室帐户失败:
接下来是什么?
了解基础是一回事,应用知识是另一回事。 但是,基础知识在各种情况下都有帮助。
既然您已经了解了 Linux 中 syslog 的基本要素,那么您在处理日志时可能会有更好的时间。 本文摘自本书大卫·克林顿 (David Clinton) 的 Linux in Action . 它由 Manning Publication 出版,您可以 获得 30% 的折扣 在任何曼宁书籍上 使用代码 nlitsfoss22
Linux 实战书
享受学习 Linux。