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 服务故障排查会从"猜问题"变成"按证据定位问题"。

相关推荐
凡人叶枫11 小时前
Effective C++ 条款38:通过复合塑模出 has-a 或 \“根据某物实现出\
linux·开发语言·c++·windows
charlie11451419111 小时前
嵌入式Linux驱动开发——从轮询到中断
linux·开发语言·驱动开发·嵌入式
无限进步_11 小时前
【Linux】系统级文件I/O与文件描述符深度剖析
linux·运维·服务器
ShineWinsu11 小时前
对于Linux:线程局部存储(TLS)和线程封装的解析
linux·c++·面试·线程·tls·线程封装·线程局部存储
2023自学中11 小时前
imx6ull开发板,sd卡启动运行linux,手动给开发板的 emmc 做分区、烧系统
linux·嵌入式·开发板
暮云星影11 小时前
瑞芯微rk3566开发FIT Secure Boot
linux·arm开发·驱动开发·安全
biter down12 小时前
2:Ubuntu 22.04 LTS 的完整下载教程
linux·运维·ubuntu
零陵上将军_xdr12 小时前
为什么DCL单例要加volatile?——CPU乱序执行与内存屏障
java·linux
杨云龙UP12 小时前
Oracle/ODA RAC /u01 空间告警处理指南:grid 用户监听日志清理_2026-06-15
linux·数据库·oracle·oracle linux·oda·监听日志·在线清理
赋缘汇(fableshare)-黄从庆12 小时前
Ubuntu重启后进入initramfs导致无法开机
linux·运维·ubuntu