疑难点拨 | AWS EC2 Linux 实例上找不到 /var/log/messages/ 日志目录


  故障描述

一名初级工程师在 AWS EC2 Linux 实例上执行日志查询操作,但是发现没有找到/var/log/messages/ 日志目录。工程师确认该实例是基于 Amazon Linux 2023 的操作系统。

[ec2-user@ip-172-31-26-105 ~]$ cat /proc/version 
Linux version 6.1.119-129.201.amzn2023.x86_64 (mockbuild@ip-10-0-49-203) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.39-6.amzn2023.0.10) #1 SMP PREEMPT_DYNAMIC Tue Dec  3 21:07:35 UTC 2024

  故障排除

默认情况下,在 Amazon Linux 2023 中并未安装 rsyslog 服务,因此,/var/log 目录中的相应文件(例如 /var/log/messages)中也不可用(Amazon Linux 2 保留此服务以实现向后兼容性)。Amazon Linux 2 和 Amazon Linux 2023 中的默认服务管理器是 systemd,它使用 systemd-journald 创建日志,systemd-journald 服务不会将信息记录到文件中(例如 messages、secure、maillog 和 spooler 中),相反 systemd-journald 将系统信息存储在 /var/log/journal 中。要查询日志,可以运行 journalctl 命令。
根据消息的日志级别检查日志,包括 emerg、alert、crit、err

[ec2-user@ip-172-31-26-105 ~]$ man journalctl
……
-p, --priority=
           Filter output by message priorities or priority ranges. Takes either a single numeric or textual log level (i.e. between 0/"emerg" and 7/"debug"), or
           a range of numeric/text log levels in the form FROM..TO. The log levels are the usual syslog log levels as documented in syslog(3), i.e.  "emerg" (0),
           "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7).
……
[ec2-user@ip-172-31-26-105 ~]$ journalctl -p err

  解决对策

如果需要使用传统的日志记录方式,可以安装 rsyslog 服务。

[ec2-user@ip-172-31-26-105 ~]$ sudo dnf list rsyslog
Last metadata expiration check: 7:46:29 ago on Wed Dec 11 00:50:07 2024.
Available Packages
rsyslog.x86_64	8.2204.0-3.amzn2023.0.4	amazonlinux
[ec2-user@ip-172-31-26-105 ~]$ sudo dnf install rsyslog -y
Last metadata expiration check: 7:48:08 ago on Wed Dec 11 00:50:07 2024.
……
Installed:
……
Complete!
[ec2-user@ip-172-31-26-105 ~]$ sudo dnf list rsyslog
Last metadata expiration check: 7:49:06 ago on Wed Dec 11 00:50:07 2024.
Installed Packages
rsyslog.x86_64
[ec2-user@ip-172-31-26-105 ~]$ ls /var/log/me*
/var/log/messages
[ec2-user@ip-172-31-26-105 ~]$