Linux 日志系统入门:/var/log 和 journalctl 怎么排查问题?

Linux 日志系统入门:/var/log 和 journalctl 怎么排查问题?

1. 前言

Linux 出问题时,日志是最重要的线索。

常见问题:

  • 服务启动失败;
  • SSH 登录失败;
  • Nginx 返回 502/500;
  • 程序突然退出;
  • 磁盘满了;
  • 系统被异常登录;
  • 服务器重启原因不明。

Linux 常见日志入口有两个:

bash 复制代码
/var/log
journalctl

本文重点讲解如何用它们排查问题。


2. /var/log 是什么

传统 Linux 日志通常存放在:

bash 复制代码
/var/log

查看:

bash 复制代码
ls /var/log

常见日志:

路径 作用
/var/log/syslog 系统综合日志,Ubuntu 常见
/var/log/messages 系统综合日志,CentOS/RHEL 常见
/var/log/auth.log 登录认证日志,Ubuntu 常见
/var/log/secure 安全认证日志,CentOS/RHEL 常见
/var/log/dmesg 内核启动日志
/var/log/nginx/ Nginx 日志
/var/log/mysql/ MySQL 日志
/var/log/apt/ apt 安装日志

不同发行版日志文件名可能不同。


3. 查看日志的基础命令

3.1 less 分页查看

bash 复制代码
less /var/log/syslog

常用按键:

按键 作用
空格 下一页
b 上一页
/keyword 搜索
n 下一个匹配
q 退出

3.2 tail 查看最后几行

bash 复制代码
tail -n 100 /var/log/syslog

实时跟踪:

bash 复制代码
tail -f /var/log/syslog

3.3 grep 搜索关键词

bash 复制代码
grep -i "error" /var/log/syslog
grep -n "failed" /var/log/syslog
grep -C 3 "timeout" /var/log/syslog

参数含义:

参数 作用
-i 忽略大小写
-n 显示行号
-C 3 显示上下文 3 行

4. 登录认证日志

Ubuntu/Debian:

bash 复制代码
/var/log/auth.log

CentOS/RHEL:

bash 复制代码
/var/log/secure

查看 SSH 登录失败:

bash 复制代码
grep "Failed password" /var/log/auth.log

查看登录成功:

bash 复制代码
grep "Accepted" /var/log/auth.log

CentOS/RHEL:

bash 复制代码
grep "Failed password" /var/log/secure
grep "Accepted" /var/log/secure

这类日志适合排查:

  • SSH 暴力破解;
  • 登录失败;
  • sudo 使用记录;
  • 认证异常。

5. Nginx 日志

常见路径:

bash 复制代码
/var/log/nginx/access.log
/var/log/nginx/error.log

实时查看访问:

bash 复制代码
tail -f /var/log/nginx/access.log

实时查看错误:

bash 复制代码
tail -f /var/log/nginx/error.log

查找 500:

bash 复制代码
grep " 500 " /var/log/nginx/access.log

查找错误:

bash 复制代码
grep -i "error" /var/log/nginx/error.log

排查 502 时,优先看:

bash 复制代码
tail -n 100 /var/log/nginx/error.log

常见原因:

  • 后端服务没启动;
  • upstream 地址错误;
  • 端口不通;
  • 后端超时;
  • 权限不足。

6. dmesg:查看内核日志

查看内核日志:

bash 复制代码
dmesg

查看最近日志:

bash 复制代码
dmesg | tail

实时跟踪:

bash 复制代码
dmesg -w

查找 OOM:

bash 复制代码
dmesg | grep -i "killed process"

查找磁盘错误:

bash 复制代码
dmesg | grep -i "error"

dmesg 常用于排查:

  • 硬件识别;
  • USB 插拔;
  • 磁盘错误;
  • 网卡异常;
  • OOM Killer;
  • 内核报错。

7. journalctl 是什么

现代 Linux 常用 systemd 管理服务。

systemd 的日志可以通过 journalctl 查看。

查看全部日志:

bash 复制代码
journalctl

查看最近 100 行:

bash 复制代码
journalctl -n 100

实时跟踪:

bash 复制代码
journalctl -f

8. journalctl 查看服务日志

查看某个服务:

bash 复制代码
journalctl -u nginx

实时查看:

bash 复制代码
journalctl -u nginx -f

最近 100 行:

bash 复制代码
journalctl -u nginx -n 100

查看 myapp 服务日志:

bash 复制代码
journalctl -u myapp -n 100
journalctl -u myapp -f

这比单纯看 nohup.out 更适合正式服务排查。


9. 按时间筛选日志

查看今天:

bash 复制代码
journalctl --since today

查看最近 1 小时:

bash 复制代码
journalctl --since "1 hour ago"

指定时间段:

bash 复制代码
journalctl --since "2026-05-18 10:00:00" --until "2026-05-18 11:00:00"

查看某服务某时间段:

bash 复制代码
journalctl -u myapp --since "2026-05-18 10:00:00" --until "2026-05-18 11:00:00"

10. 按级别筛选日志

日志级别:

级别 名称
0 emerg
1 alert
2 crit
3 err
4 warning
5 notice
6 info
7 debug

查看错误:

bash 复制代码
journalctl -p err

查看 warning 及以上:

bash 复制代码
journalctl -p warning

查看某服务错误:

bash 复制代码
journalctl -u myapp -p err

11. 查看本次启动日志

当前启动周期:

bash 复制代码
journalctl -b

上一次启动:

bash 复制代码
journalctl -b -1

查看启动列表:

bash 复制代码
journalctl --list-boots

这对排查"服务器为什么重启"很有用。


12. logrotate:日志轮转

日志不能无限增长。

Linux 通常使用 logrotate 做日志轮转。

配置位置:

bash 复制代码
/etc/logrotate.conf
/etc/logrotate.d/

查看:

bash 复制代码
ls /etc/logrotate.d/

轮转后可能出现:

text 复制代码
access.log
access.log.1
access.log.2.gz

查看压缩日志:

bash 复制代码
zcat access.log.2.gz

搜索压缩日志:

bash 复制代码
zgrep "error" access.log.2.gz

13. 常见排查流程

13.1 服务启动失败

bash 复制代码
systemctl status myapp
journalctl -u myapp -n 100
journalctl -u myapp -f

重点搜索:

text 复制代码
error
failed
permission
not found
address already in use

13.2 SSH 登录失败

bash 复制代码
grep "Failed password" /var/log/auth.log
journalctl -u ssh -n 100

或:

bash 复制代码
journalctl -u sshd -n 100

13.3 程序突然被杀

bash 复制代码
dmesg | grep -i "killed process"
journalctl -k | grep -i "killed process"

如果出现 OOM,说明内存不足。

13.4 磁盘满了

bash 复制代码
df -h
du -sh /var/log/*
du -ah /var/log | sort -rh | head

不要随便 rm 正在写的日志文件。

可以清空:

bash 复制代码
sudo truncate -s 0 /var/log/large.log

14. 日志分析常用命令

统计访问 IP:

bash 复制代码
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

查找 500 错误:

bash 复制代码
grep " 500 " access.log

统计接口访问次数:

bash 复制代码
grep "/api/user" access.log | wc -l

实时查看错误:

bash 复制代码
tail -f app.log | grep --line-buffered -i "error"

15. 小结

Linux 日志排查抓住两个入口:

text 复制代码
/var/log:传统日志文件
journalctl:systemd 日志

常用命令:

bash 复制代码
tail -f /var/log/syslog
tail -f /var/log/nginx/error.log
grep -i "error" app.log
journalctl -u nginx -f
journalctl -u myapp -n 100
journalctl --since "1 hour ago"
journalctl -p err
dmesg | tail

排查问题时,建议按这个顺序:

text 复制代码
确认问题时间
找到相关服务
看 systemctl status
看 journalctl -u 服务名
看 /var/log 对应日志
搜索 error、failed、timeout、denied
结合端口、进程、磁盘、权限继续判断

掌握日志系统后,Linux 服务故障排查会从"猜问题"变成"按证据定位问题"。

相关推荐
夹芯饼干17 小时前
Linux第十三周配置网络
linux·运维·服务器
小猫咪0117 小时前
Linux 后台任务详解:&、nohup、jobs、systemd 的区别
linux
用户23678298016818 小时前
Linux scp 命令详解:安全文件传输的底层原理与实战技巧
linux
Harm灬小海18 小时前
【云计算学习之路】企业常用服务搭建:MySQL 8.0
linux·运维·学习·mysql·云计算
杨云龙UP18 小时前
Oracle Flashback Query 实战练习:误更新、误删除数据如何快速找回?
linux·运维·数据库·sql·oracle·flashback
skyutuzz18 小时前
容器tini
linux·笔记
Nick.Q18 小时前
Ubuntu 24.04 从零跑通 OpenTitan:IC 验证工程师实录(Verilator + VCS + Verdi)
linux·ubuntu·systemverilog
dadaobusi18 小时前
现代服务器是否还有pcie io访问的设备?
linux
刘某的Cloud18 小时前
ceph-s & ceph_osd_tree_ceph缩容恢复_集群状态.md
linux·运维·服务器·ceph
say_fall18 小时前
操作系统与进程核心全解:从冯诺依曼到fork系统调用
android·linux·运维·服务器·学习·ubuntu