Linux 系统日志排查:journalctl 与 /var/log 从入门到实战

举报
yd_23412927 发表于 2026/11/09 10:22:38 2026/11/09
【摘要】 Linux 系统日志排查:journalctl 与 /var/log 从入门到实战服务挂了、接口报错、系统半夜告警,日志往往是第一现场。Linux 上的日志分两大块:systemd 管的 journal 日志,和传统的 /var/log 文本日志。会查这两处,大多数故障都能快速定位。 一、先看 journalctl:systemd 的日志入口用 systemd 的系统,服务日志都在 jou...

Linux 系统日志排查:journalctl 与 /var/log 从入门到实战

服务挂了、接口报错、系统半夜告警,日志往往是第一现场。Linux 上的日志分两大块:systemd 管的 journal 日志,和传统的 /var/log 文本日志。会查这两处,大多数故障都能快速定位。

一、先看 journalctl:systemd 的日志入口

用 systemd 的系统,服务日志都在 journal 里,先学会这几个命令:

journalctl -u nginx.service       # 只看 nginx 服务的日志
journalctl -u nginx.service -f    # 实时跟踪,相当于 tail -f
journalctl -u nginx.service --since "2026-11-09 08:00"   # 看某个时间点之后的
journalctl -p err -b              # 只看本次开机以来的错误级别日志

-p 是日志级别,从高到低是 emerg、alert、crit、err、warning、notice、info、debug。查故障先看 err 和 warning,别一上来就翻 info。

服务起不来的时候,这条最管用:

systemctl status nginx.service
journalctl -u nginx.service -n 50   # 看最后 50 行,报错原因一般在尾巴上

二、/var/log 里的文本日志

没走 systemd 的服务、或者历史日志,都在 /var/log 里:

ls -lh /var/log/           # 看都有哪些日志文件
tail -f /var/log/messages  # 实时看系统日志
tail -n 100 /var/log/nginx/error.log   # 看 nginx 错误日志最后 100 行

常见的几个文件要认得:

文件 内容
/var/log/messages 或 syslog 系统通用日志
/var/log/secure 或 auth.log 登录、认证、sudo 记录
/var/log/nginx/access.log、error.log Nginx 访问与错误日志
/var/log/mysql/error.log MySQL 错误日志
/var/log/cron 定时任务执行记录

三、定位问题:grep 是主力

日志量大的时候别逐行翻,用 grep 过滤:

grep -i "error" /var/log/nginx/error.log | tail -20    # 只看带 error 的行
grep "2026-11-09 09:" /var/log/messages | grep -i "fail"  # 按时间加关键词过滤
journalctl -u myapp.service --since today | grep -i "exception"  # 今天的异常

查“什么时候开始出问题”,可以按时间二分:先看最近一小时有没有,再扩大到今天、昨天,报错第一次出现的时间点,往往就是故障起点。

四、登录异常:secure 日志

服务器被暴力破解、账号被盗,secure 日志里都有痕迹:

grep "Failed password" /var/log/secure | tail -20   # 看失败登录
grep "Accepted" /var/log/secure | tail -20          # 看成功登录,核对是不是你本人
last   # 看最近登录记录,包括登录 IP 和时间

短时间内大量 Failed password,基本就是有人在扫 SSH 端口,这时要考虑改端口、禁密码登录改密钥、或者上 fail2ban。

五、日志太多怎么办:轮转与瘦身

日志不清理,迟早把磁盘撑爆。先看 journal 占了多少:

journalctl --disk-usage              # 看 journal 日志总量
journalctl --vacuum-size=500M       # 只保留最近 500M
journalctl --vacuum-time=7d         # 只保留最近 7 天

文本日志靠 logrotate 自动轮转,检查规则是否生效:

cat /etc/logrotate.d/nginx
logrotate -d /etc/logrotate.d/nginx   # 调试模式,看轮转规则是否生效

六、排查流程

现象 先查 工具
服务起不来 服务日志最后几十行 journalctl -u 服务名 -n 50
接口报错 应用与 Nginx 错误日志 grep error、tail
登录异常 认证日志 grep Failed password、last
磁盘被日志占满 日志大小与轮转 du、journalctl --disk-usage
不知道何时开始坏 按时间过滤 journalctl --since、grep 时间

小结

日志排查的关键是先定位再细看:先用 journalctl 和 status 确认是哪个服务、什么级别的错,再用 grep 按时间和关键词缩小范围,最后才逐行读关键段落。把日志级别、时间过滤和轮转这三件事用熟,半夜被告警叫醒的时候,就不用再从头翻几万行日志了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。