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

相关推荐
小此方1 小时前
Re:Linux系统篇(四十二)通信篇·七:SystemV标准三部曲其之三:信号量与并发编程初步认识
linux·运维·驱动开发
JAVA面经实录9179 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
艾莉丝努力练剑15 小时前
OpenCode AI 编程:Ubuntu 24.04 环境安装与使用指南
linux·服务器·网络·人工智能·tcp/ip·ubuntu
崇山峻岭之间15 小时前
Keil5输出hex转换为bin的设置
linux·运维·服务器
谷雪_65816 小时前
Linux 网络命名空间:从内核原理到企业级容器网络架构全景实战
linux·网络·架构
qq_1631357517 小时前
Linux 【03- chgrp命令超详细教程】
linux
CodeStats17 小时前
【编程语言】深度梳理C/C++、Java、Python、Go、Rust的区别
java·linux·c语言·c++·python·rust·go
我会尽全力 乐观而坚强18 小时前
MySQL库与表的操作
linux·数据库·mysql
着迷不白18 小时前
Linux 磁盘管理完全指南:分区、文件系统、挂载与 LVM 实战
linux·运维·服务器
山川而川-R18 小时前
LangChain
linux·运维·服务器