Linux系统日志主要查看/var/log/messages和systemd journal:前者是rsyslog聚合的文本日志,适合快速扫描告警;后者由journalctl读取二进制日志,更全更实时,排查服务启动等问题优先使用。

Linux系统日志主要看两个地方:一个是传统的 /var/log/messages(或类似路径的文本日志),另一个是 systemd 的二进制日志 journal。两者定位不同,messages 更偏向服务级、内核级的汇总信息,而 journal 记录更全、更实时,包含所有 unit、进程、启动过程等细节。
messages 日志怎么看
/var/log/messages 是 SysV 或传统 init 系统遗留下来的日志聚合文件,现代多数发行版(如 RHEL/CentOS 7+、Ubuntu 16.04+)默认仍保留它,但内容可能受限于 rsyslog 配置——它只记录被明确转发到 local7.* 或 *.info 等规则的日志。
- 用
tail -f /var/log/messages实时跟踪最新日志 - 用
grep "sshd" /var/log/messages查某服务(如 ssh 登录失败、密钥拒绝等) - 注意时间戳格式为
月 日 时:分:秒,没有年份,查跨年日志需结合ls -lt /var/log/messages*找归档文件 - 若发现该文件为空或不存在,可能是系统启用了 journal-only 模式,或 rsyslog 未启用,可检查
systemctl status rsyslog
journal 日志怎么看
journalctl 是查看 systemd journal 的唯一标准工具,它读取的是二进制日志(/run/log/journal/ 或 /var/log/journal/),无需解析文本格式,支持过滤、翻页、反向时间排序等。
- 查看全部日志:
journalctl(默认从最早开始,可按空格翻页,q 退出) - 查看最近 100 行:
journalctl -n 100 - 实时跟踪:
journalctl -f(类似 tail -f) - 按服务查:
journalctl -u sshd.service或journalctl -u nginx - 查某次启动的日志:
journalctl -b;查上一次启动:journalctl -b -1 - 查指定时间段:
journalctl --since "2024-05-20 14:00:00" --until "2024-05-20 15:00:00"
messages 和 journal 的关系与取舍
二者不是互斥,而是共存协作关系。journal 是源头,messages 是 rsyslog 从中筛选后写入的“精简副本”。是否启用 messages,取决于 rsyslog 是否运行及配置中是否有 imjournal 模块和对应规则。
- journal 更全:包括内核、boot、unit 启动失败、stdout/stderr 输出等
- messages 更“干净”:适合快速扫描常见告警(如 disk full、network down),但可能漏掉关键细节
- 排查服务启动失败?优先用
journalctl -u xxx --no-pager,比 messages 更直接 - 做长期审计或对接 SIEM?建议配置 rsyslog 把 journal 转发到远程服务器,同时保留本地 journal 归档
实用技巧与排障提示
很多问题卡在“看不到日志”,其实是权限或配置导致的:
- 普通用户运行
journalctl只能看到自己的用户会话日志;加sudo才能看系统级日志 - journal 默认只保存内存或临时目录,重启后丢失;启用持久化:
sudo mkdir -p /var/log/journal && sudo systemd-journald --flush,再重启 journald - 查不到 ssh 登录记录?确认
LogLevel INFO在/etc/ssh/sshd_config中已设置,且 PAM 日志未被禁用 - 日志太多刷屏?加
--no-pager配合grep,例如:journalctl -u docker --no-pager | grep -i "failed"










