通过日志排查问题#
日志文件记录了系统中发生的各种事件,包括 kernel 、服务和应用程序的日志。这些信息有助于排查系统中发生的问题或监控系统状态。
日志记录是通过内置于系统中的 syslog 协议来实现的,系统上的应用也可以使用它来记录和管理自己的日志,同时也方便了系统审计与排查应用问题。
syslog日志的后台服务程序#
syslog日志主要由以下两个服务程序来处理:
systemd-journald服务systemd-journald是一台后台程序,它从多个源(sources)中收集日志,然后将其转发给Rsyslog以便进行后续处理,systemd-journald从以下源中收集日志:kernel系统启动过程中的早期阶段
各种服务启动和运行时的标准输出与错误输出日志
syslog
Rsyslog服务Rsyslog服务会将syslog的日志按类别和优先级进行分类,然后将它们写入到/var/log目录中,/var/log目录就是用来存储日志的地方。
syslog日志分类后的日志文件#
syslog日志经过分类处理后,会被写入到以下文件中:
/var/log/messages:所有的syslog日志被会被写入到这个文件中
/var/log/secure:安全和身份验证相关的日志,此类日志不会写入到messages文件中
/var/log/maillog:邮件服务器相关日志,如postfix的日志就在这里,此类日志不会写入到messages文件中
/var/log/cron:定时执行任务的相关日志,此类日志不会写入到messages文件中
备注
以上仅列举了部分日志文件,实际上 /var/log 目录下还有很多其他的日志文件,这取决于系统中安装了哪些服务和应用。
通过命令行查看日志#
日志功能是 systemd 的一分部,它可以用来查看和管理日志文件,解决了传统日志记录的相关问题,并与系统紧密结合在一起,支持各种日志技术和对于日志分类的访问管理。
使用 journalctl 命令可以查看各类日志:
查看系统日志
journalctl:查看所有日志journalctl FILEPATH:查看与指定文件相关的日志,FILEPATH可以是可执行的二进制文件、可执行脚本或设备文件(硬件设备被视为文件,存放于/dev下),输入journalctl /连按tab键可以查看与日志记录相关的文件,如执行journalctl /usr/sbin/NetworkManager可以查看网络管理服务的日志journalctl -b:查看系统本次的启动(boot)日志journalctl -k -b:查看系统本次启动的内核(kernel)日志
查看服务日志
journalctl -u SERVICE:查看指定服务的日志, 如journalctl -u postfix.service可以查看postfix服务的日志journalctl _SYSTEMD_UNIT=SERVICE _PID=pid:查看指定进程的日志,pid可以通过systemctl status SERVICE命令中的Main PID查看,如journalctl _SYSTEMD_UNIT=postfix.service _PID=887:
journalctl -u SERVICE -u SERVICE:查看多个服务的日志,如journalctl -u postfix.service -u chronyd.service可以查看postfix和chronyd服务的日志journalctl -S TIME -U TIME:查看指定时间段的日志,S表示start,U表示until,TIME可以是一个时间,如journalctl -u NetworkManager.service -S "2025-05-07 10:08:00" -U "2025-05-07 11:49:00",也可以是时间单词:"yesterday", "today", "tomorrow",如journalctl -u NetworkManager.service -S yesterday -U now
查看日志的特殊方法
journalctl -p priority:查看指定级别的日志,priority可以是以下级别:emerg:系统不可用,发生了严重错误,编号为0alert:需要立即采取行动,发生了中断性错误,编号为1crit:严重错误,产生了一些问题,编号为2err:错误,通常不会影响系统的正常运行,编号为3warning:警告,不影响系统的正常运行,编号为4notice:通知,提示性消息,编号为5info:信息,通常用于记录系统状态,编号为6debug:调试,用于调试程序,编号为7
如查看系统错误类的消息:
journalctp -p 3journalctl -g KEYWORD:查看包含指定关键字的日志,KEYWORD可以是任意字符串,如journalctl -g error可以查看包含error关键字的日志journalctl -f:实时查看最新的日志,如需要观察某个服务的日志,可以使用此方法,如journalctl -f -u postfix.service可以实时查看postfix服务的日志journalctl -x:为日志添加解释说明文本,解释日志发生时服务的状态,如journalctl -x -u postfix.service
journalctl -e:直接跳转到日志的末尾
以上方法是 journalctl 命令的常用用法,各选项可以组合使用,以满足不同的需求,更多细节的用法可以通过 man journalctl 命令查看。