Linux服务运行状态排查_journalctl实战解析【教程】


journalctl命令可高效排查Linux服务状态:一、用-u查看指定服务日志,加–no-pager避免分页,-f实时跟踪;二、-b筛选本次启动日志,-b -1查上次,–since限定时间;三、-p按优先级过滤错误;四、–output=short-iso和–show-cursor增强时间与行号定位;五、–output=export导出二进制日志供跨主机分析。

Linux服务运行状态排查_journalctl实战解析【教程】

如果您在Linux系统中需要排查服务的运行状态,但无法通过常规命令获取详细日志信息,则可能是由于systemd日志未被正确检索或过滤。以下是使用journalctl命令进行服务状态排查的实战操作步骤:

一、查看指定服务的完整日志流

journalctl默认记录所有systemd管理的服务日志,通过-u选项可限定输出特定服务的全部历史日志,便于定位启动失败、崩溃或异常退出事件。

1、执行命令:journalctl -u sshd.service,其中sshd.service可替换为实际服务名(如nginx.service、docker.service)。

2、添加–no-pager参数避免分页阻断:journalctl -u nginx.service –no-pager

3、若需实时跟踪新日志,追加-f参数:journalctl -u docker.service -f

二、筛选最近一次启动的日志

服务重启后旧日志仍保留在缓冲区中,-b选项可精确提取本次系统启动以来该服务产生的日志,排除历史残留干扰。

1、运行:journalctl -u mariadb.service -b,仅显示当前boot周期内mariadb.service的日志。

2、若需上一次启动的日志,使用-b -1:journalctl -u postfix.service -b -1

3、结合–since限定时间范围,例如查看本小时内日志:journalctl -u httpd.service -b –since “1 hour ago

三、按优先级过滤关键错误信息

journalctl支持基于日志级别(priority)筛选,优先级0(emerg)至7(debug),其中0–3为错误类日志,可快速识别故障根源。

1、只显示错误及以上级别日志:journalctl -u cron.service -p err

2、同时包含警告与错误:journalctl -u rsyslog.service -p warning

3、导出严重错误到文件供离线分析:journalctl -u systemd-networkd.service -p emerg > /tmp/emerg.log

四、结合时间戳与行号精确定位

当服务日志量庞大时,启用UTC时间戳和行号有助于比对系统时间线与外部监控告警时间,提升问题复现效率。

1、以ISO 8601格式显示时间并启用行号:journalctl -u kubelet.service –output=short-iso –show-cursor

2、查找包含特定关键词的带序号日志行:journalctl -u NetworkManager.service | grep -n “DHCP”

3、从某行开始向下查看20行(配合grep -n结果使用):journalctl -u bluetooth.service | sed -n ‘45,65p’

五、导出二进制日志供跨主机分析

journalctl原始日志为二进制格式,直接复制文本可能丢失结构化字段;使用–output=export可生成可移植的二进制流,兼容其他journalctl实例解析。

1、导出指定服务的二进制日志:journalctl -u auditd.service –output=export > auditd.journal

2、在另一台机器上验证导出内容完整性:journalctl –file=auditd.journal –no-pager | head -20

3、仅导出某时间段内的二进制日志:journalctl -u firewalld.service –since “2024-05-01” –until “2024-05-02” –output=export > fw.journal