Linux系统日志怎么看_messages与journal解析【教学】

9次阅读

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

Linux 系统日志怎么看_messages 与 journal 解析【教学】

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.servicejournalctl -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"
text=ZqhQzanResources