现代linux默认使用systemd,大家第一反应就是用journalctl查看系统日志。但是journalctl也有短板:
实际生产环境,不能只依赖journalctl。本文梳理journalctl 之外的全套日志排查手段,覆盖传统文本日志、内核日志、应用日志、远程日志、工具分析,运维排错多一套备选方案。如果学习journalctl可以参考以前学习的文章。Linux日志查询神器 journalctl:从入门到精通,排查问题不再慌
rsyslog服务,会把journald收到的日志同步输出为文本格式日志文件,存放在/var/log目录下,直接cat/tail/grep就可以读取,不需要journalctl。注意:部分最小化安装系统,没有安装 rsyslog,需要手动安装。
/var/log/messages | |
/var/log/secure | |
/var/log/cron | |
/var/log/maillog | |
/var/log/boot.log | |
/var/log/syslog | |
/var/log/auth.log |
#实时监控系统日志tail -f /var/log/messages#查看最近100行认证日志,排查ssh登录异常tail -n 100 /var/log/secure#过滤错误关键词grep -E "error|fail" /var/log/messages#按时间段过滤文本日志(配合grep)grep "Aug 7 20:27:08" /var/log/messages#检索crontab定时任务报错grep -i error /var/log/cron



小提示:rsyslog配置文件/etc/rsyslog.conf,控制哪些日志输出到哪个文件。
dmesg读取内核环形缓冲区,完全独立于 rsyslog、journald。硬件故障、内核 panic、磁盘io异常、驱动报错、网卡异常,优先看dmesg。即使 journald、rsyslog全部挂掉,dmesg依然可用。#输出全部内核缓冲区日志dmesg#实时监控内核日志dmesg -w#只看错误、警告级别dmesg -l err,warn#过滤磁盘相关报错dmesg | grep -i sd#带人类可读时间戳输出dmesg -T


补充:dmesg 的日志会保存到文件 /var/log/dmesg(部分系统),重启之后环形缓冲区会重置,历史内容丢失。
部分生产服务器、定制化系统,不会使用默认的 rsyslog,而是采用 syslog-ng作为替代日志服务。它的核心功能与rsyslog一致,同样负责将系统日志落地为纯文本文件,无需 journalctl 即可直接分析,唯一区别在于日志输出路径、配置规则略有差异。
syslog-ng 核心关键信息:
主配置文件目录:/etc/syslog-ng/
日志依旧落地在 /var/log 目录,可通过 tail/grep/less 原生命令直接检索
兼容性更强、日志过滤规则更灵活,多用于高要求生产环境
资深运维都知道:本机日志永远有丢失、损坏、异常的风险,远程日志才是生产最终保障。正规生产环境,都会统一配置日志远端转发:通过rsyslog/syslog-ng将本机所有系统日志、服务日志,实时同步到专属远程 syslog 服务器。
当本机 journalctl 失效、本机日志文件损坏、服务器故障无法读取本地日志时,直接登录远程日志服务器,即可检索到对应主机的完整、未丢失、未篡改的全量日志,是故障回溯、事故复盘的终极方案。
场景:journalctl 报错,无法读取systemd日志,排查服务启动失败
#查看rsyslog文本系统日志:tail -f /var/log/messages#查看系统安全日志:tail -f /var/log/secure

很多运维同学习惯journalctl一条命令走天下,但是生产环境要做好预案。当journalctl异常、日志丢失,rsyslog文本日志、dmesg、服务本地日志,就是我们排错的救命手段。排查故障不要只盯着一个工具,多维度交叉验证,才能快速定位根因。