一、/var/log 系统常用日志
| 日志文件 | 核心作用 | 排查场景 |
|---|---|---|
/var/log/messages(CentOS/RHEL) /var/log/syslog(Debian/Ubuntu) |
系统全局日志,记录系统启动、服务运行、内核、硬件等绝大多数通用信息 | 系统崩溃、服务异常、硬件故障排查 |
/var/log/secure |
安全相关日志,记录登录验证、sudo 操作、SSH 连接、权限变更等 | 排查暴力破解、异常登录、权限问题 |
/var/log/auth.log(Debian/Ubuntu) |
同secure,认证 / 授权日志 |
同上 |
/var/log/cron |
crontab 定时任务的执行日志 | 排查定时任务不执行、执行报错 |
/var/log/maillog |
邮件服务日志 | 排查邮件发送 / 接收失败 |
/var/log/dmesg |
内核启动日志,记录硬件检测、驱动加载信息 | 排查硬件故障、系统启动问题 |
/var/log/boot.log |
系统启动过程日志 | 排查开机启动失败、服务自启异常 |
/var/log/yum.log(CentOS) /var/log/apt/(Debian) |
软件包安装 / 更新日志 | 排查 yum/apt 安装失败、依赖问题 |
/var/log/httpd/ / /var/log/nginx/ |
Web 服务(Apache/Nginx)的访问日志、错误日志 | 排查网站访问异常、5xx 错误 |
/var/log/mysqld.log /var/lib/docker/containers |
MySQL Docker |
二、日志排查的基本思路
2.1 问题定位的三步走
-
确定问题发生的时间范围
-
选择合适的日志文件
-
使用工具快速筛选关键信息
2.2 常见问题类型与对应日志
- 系统性能问题 →
/var/log/messages、dmesg - 登录认证问题 →
/var/log/secure - 网络连接问题 →
/var/log/messages、应用日志 - 磁盘空间问题 →
/var/log/messages - 服务启动问题 →
systemctl status、journalctl
三、实用的日志查看命令
3.1 基础查看命令
1. tail 命令(实时查看日志,运维必备)
核心作用:查看文件末尾内容,最常用的是实时追踪日志更新
基础用法:
bashtail /var/log/messages # 查看文件最后10行 tail -n 20 /var/log/messages # 查看最后20行 tail -f /var/log/messages # 实时追踪日志更新(最常用,排查问题必用) tail -F /var/log/messages # 日志轮转后自动追踪新文件(比-f更稳定)要理解:
-f和-F的区别,日志轮转的影响
2. less 命令(大文件分页查看,比 cat 更安全)
核心作用:分页查看大日志文件,支持搜索、跳转,不会一次性加载整个文件
基础用法:
less /var/log/messages # 打开文件常用交互操作(必须记住):
空格:向下翻一页;b:向上翻一页G:跳转到文件末尾;gg:跳转到文件开头/关键词:向下搜索关键词;?关键词:向上搜索关键词n:跳转到下一个匹配项;N:跳转到上一个匹配项q:退出 less优势:大文件(GB 级)用 less 不会卡死,cat 会直接加载整个文件导致系统卡顿
3. journalctl 命令(systemd 系统的日志管理,CentOS7+/Ubuntu16.04+)
核心作用:查看 systemd 管理的服务日志、系统日志,替代传统的
/var/log/messages
基础用法:
journalctl # 查看所有系统日志(从开机到现在) journalctl -f # 实时追踪日志(类似tail -f) journalctl -u nginx.service # 查看指定服务(如nginx)的日志(最常用) journalctl -u crond.service # 查看定时任务服务日志 journalctl --since "2026-04-08 10:00:00" --until "2026-04-08 12:00:00" # 按时间范围查看 journalctl -k # 只查看内核日志 journalctl -p err # 只查看错误级别日志(快速定位问题)必须掌握的知识点:
- journalctl 是 systemd 的日志工具,非 systemd 系统(如 CentOS6)不支持
- 日志持久化配置:默认日志存在内存,重启丢失,需配置
/etc/systemd/journald.conf实现持久化- 日志大小限制:避免 journalctl 日志占满磁盘
4. 其他命令
bash
# 实时监控多个日志文件
multitail /var/log/messages /var/log/secure
# 查看日志文件头部
head -n 50 /var/log/boot.log
3.2 筛选定位与统计分析
1. 时间筛选
bash
# 查看指定日期的日志
grep "Dec 15" /var/log/messages
# 查看指定时间段的日志
sed -n '/Dec 15 10:00/,/Dec 15 11:00/p' /var/log/messages
# 使用awk按时间筛选
awk '/Dec 15 10:/ && /Dec 15 11:/' /var/log/messages
2. 关键字搜索
bash
# 基本关键字搜索
grep "error" /var/log/messages
# 忽略大小写搜索
grep -i "failed" /var/log/secure
# 搜索多个关键字
grep -E "error|failed|timeout" /var/log/messages
# 显示匹配行的前后几行
grep -A 5 -B 5 "Out of memory" /var/log/messages
3. 日志统计分析
bash
# 统计错误出现次数
grep -c "error" /var/log/messages
# 统计不同类型错误的数量
grep "error" /var/log/messages | awk '{print $5}' | sort | uniq -c
# 分析访问日志中的IP访问频率
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
4. 日志切割和轮转
bash
# 查看logrotate配置
cat /etc/logrotate.conf
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
# 查看日志轮转状态
cat /var/lib/logrotate/logrotate.status

- 全局默认规则
配置项 作用 详细说明 weekly轮转周期 每周执行一次日志切割 (通常是周日凌晨,由 cron定时任务触发)rotate 4保留份数 只保留 最近 4 份 轮转后的历史日志,第 5 次轮转时,最老的日志会被自动删除 create新建日志文件 日志被重命名归档后,自动创建一个同名的空日志文件,保证服务可以继续写入日志,不会报错 dateext日期后缀 轮转后的日志文件用 日期作为后缀 ,例如 messages-20260408;不加这个参数则默认用数字后缀(messages.1、messages.2)#compress日志压缩 当前是注释状态,不压缩日志 ;去掉 #后,会自动用gzip压缩轮转后的日志,节省磁盘空间include /etc/logrotate.d包含子配置 加载 /etc/logrotate.d/目录下的所有配置文件,比如syslog、nginx、httpd等服务的专属日志轮转规则都在这里配置二、专属日志配置(wtmp /btmp 登录日志)
这两个是系统登录相关的日志,单独配置了轮转规则,不继承上面的全局默认。
/var/log/wtmp配置(成功登录记录)/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
作用 :记录所有用户的成功登录历史,用
last命令查看逐行解析:
monthly:每月 轮转一次,覆盖全局的weekly
create 0664 root utmp:新建日志文件的权限为0664,属主root,属组utmp
minsize 1M:日志文件大小至少 1M 才会触发轮转,小于 1M 不切割
rotate 1:只保留 1 份 历史日志
/var/log/btmp配置(失败登录记录)/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
作用 :记录所有失败的登录尝试(比如密码输错、暴力破解),用
lastb命令查看逐行解析:
missingok:如果日志文件不存在,也不会报错,继续执行轮转
monthly:每月轮转一次
create 0600 root utmp:权限0600(仅 root 可读,保障安全),属主root,属组utmp
rotate 1:只保留 1 份 历史日志
5. 使用dmesg分析
dmesg命令用于显示内核环形缓冲区的消息,这些消息包含了系统启动时的硬件检测信息和运行时的内核消息。
bash
# 查看所有内核消息
dmesg
# 实时查看内核消息
dmesg -w
# 按时间戳显示
dmesg -T
# 只显示错误和警告
dmesg -l err,warn
# 清空dmesg缓冲区(需要root权限)
dmesg -c
# 按级别过滤
dmesg -l emerg # 紧急情况
dmesg -l alert # 需要立即处理
dmesg -l crit # 严重错误
dmesg -l err # 一般错误
dmesg -l warn # 警告信息
dmesg -l notice # 注意信息
dmesg -l info # 一般信息
dmesg -l debug # 调试信息
###################dmesg实用技巧##########
# 查看最近的内核消息
dmesg | tail -20
# 搜索特定硬件信息
dmesg | grep -i "usb\|disk\|network"
# 查看内存相关信息
dmesg | grep -i "memory\|oom"
# 查看CPU相关信息
dmesg | grep -i "cpu"
# 将dmesg输出保存到文件【注意 date +(这里不能有空格)%Y...】
dmesg > /tmp/dmesg_$(date +%Y%m%d_%H%M%S).log
四、crontab 定时语法、配置自动任务
1. crontab 时间语法
crontab 的格式为:分 时 日 月 周 要执行的命令
| 字段 | 范围 | 特殊符号 | 含义 |
|---|---|---|---|
| 分 | 0-59 | * 代表每分;, 代表多个;- 代表范围;/ 代表步长 |
|
| 时 | 0-23 | 同上 | |
| 日 | 1-31 | 同上 | |
| 月 | 1-12 或 jan-dec | 同上 | |
| 周 | 0-7(0 和 7 都代表周日) 或 sun-sat | 同上 |
-
示例:
# 每天凌晨2点执行备份脚本 0 2 * * * /root/backup.sh # 每5分钟执行一次脚本 */5 * * * * /root/monitor.sh # 每周一凌晨1点执行清理任务 0 1 * * 1 /root/clean.sh # 每月1号凌晨3点执行日志轮转 0 3 1 * * /usr/sbin/logrotate /etc/logrotate.conf
2. crontab 核心操作命令
crontab -e # 编辑当前用户的定时任务(最常用)
crontab -l # 查看当前用户的定时任务列表
crontab -r # 删除当前用户的所有定时任务(谨慎使用!)
crontab -u root -l # 查看root用户的定时任务(需root权限)
3. 必须掌握的知识点 & 避坑指南
- 环境变量问题 :crontab 执行时的环境变量和用户登录时不同,命令必须写绝对路径 (如
/usr/bin/df,不能只写df) - 日志排查 :定时任务不执行,优先看
/var/log/cron日志,排查语法错误、权限问题 - 权限控制 :
/etc/cron.allow和/etc/cron.deny控制哪些用户可以使用 crontab - 系统级定时任务 :
/etc/crontab文件是系统级定时任务,格式多了一个用户名字段(如0 2 * * * root /root/backup.sh) - 任务执行失败告警:定时任务执行失败会发邮件给 root,可配置邮件告警或脚本捕获错误
- 避免任务重叠 :用
flock锁机制,防止上一个任务没执行完,下一个任务又启动
五、实战案例分析
案例1:系统负载过高排查
bash
# 1. 查看系统负载相关日志【CPU过载】
grep -i "load" /var/log/messages
# 2. 查看内存不足相关信息【内存爆了】
grep -i "out of memory" /var/log/messages
# 3. 查看磁盘IO相关问题【磁盘IO阻塞】
grep -i "blocked" /var/log/messages
# 4. 结合dmesg查看内核消息【一般是内存不足导致系统自动杀死进程】
dmesg | grep -i "killed process"
案例2:SSH登录失败排查
bash
# 1. 查看SSH登录失败记录【失败原因】
grep "Failed password" /var/log/secure
# 2. 查看SSH服务状态【服务是否正常】
systemctl status sshd
journalctl -u sshd
# 3. 查看防火墙状态【防火墙禁止访问】
systemctl stauts firewalld
# 4. 是不是 禁passwd / root
grep -E "PasswordAuthentication | permitRootLogin" /etc/ssh/sshd_config
案例3:Web服务异常排查
bash
# 1. 查看Nginx错误日志【定位错误原因】
tail -f /var/log/nginx/error.log
# 2. 分析访问日志中的异常状态码【分析用户是否能正常访问】
awk '$9 >= 400 {print $0}' /var/log/nginx/access.log
# 3. 统计各种HTTP状态码的数量
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c
# 4. 查看PHP-FPM日志(如果使用PHP)【状态码为500 / 502 通常是后端代码错误】
tail -f /var/log/php-fpm/www-error.log
案例4:内存OOM问题排查
OOM是指系统内存不足时,内核会启动OOM Killer机制,强制杀死一些进程来释放内存。这是Linux系统的自我保护机制。
bash
######################OOM日志特征识别##############
# 在dmesg中查找OOM相关信息
dmesg | grep -i "out of memory\|oom\|killed process"
# 在系统日志中查找OOM信息
grep -i "out of memory\|oom-killer\|killed process" /var/log/messages
# 使用journalctl查找OOM(RHEL 7+)
journalctl | grep -i "oom\|out of memory"
六、日志监控和告警
6.1 实时监控脚本
bash
#!/bin/bash
# 监控关键错误日志
tail -f /var/log/messages | while read line
do
if echo "$line" | grep -q "CRITICAL\|FATAL\|Out of memory"; then
echo "$(date): 发现严重错误 - $line" | mail -s "系统告警" admin@company.com
fi
done
6.2 使用rsyslog集中管理
1. 服务端
bash
# 配置rsyslog服务端
vim /etc/rsyslog.conf
# 将前几行修改为:
[test@k8s-node1 ~]$ head -n 7 /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
# 重启并查看状态
systemctl restart rsyslog
systemctl status rsyslog
# 查看端口是否已在监听
ss -tulnp | grep rsyslog
2. 客户端
bash
# 配置rsyslog客户端
echo "*.* @@log-server:514" >> /etc/rsyslog.conf
systemctl restart rsyslog
3. 验证
bash
# 服务端实时查看日志
tail -f /var/log/messages
# 客户端输入一条日志
logger "test1"
# 这个时候服务端就会显示test1
七、日志安全和维护
7.1 日志文件权限管理
# 设置适当的日志文件权限
chmod 640 /var/log/secure
chown root:adm /var/log/secure
7.2 日志备份策略
# 定期备份重要日志
tar -czf /backup/logs-$(date +%Y%m%d).tar.gz /var/log/
八、常用工具推荐
8.1 命令行工具
- less: 分页查看大文件
- zcat/zless: 查看压缩日志文件
- awk/sed: 文本处理和分析
- multitail: 同时监控多个日志文件
8.2 图形化工具
1. Logwatch : 日志分析和报告工具,生成文本 / HTML 报告,通过邮件或文件输出,无需图形界面。
(1)核心组件:无复杂组件,单命令行工具,依赖系统 crontab 定时执行
(2)安装(CentOS):
sudo yum install -y logwatch(3)核心操作
场景 命令 说明 今日概览 sudo logwatch --range today --detail Med --output stdout终端输出今日日志摘要 分析 sshd sudo logwatch --service sshd --detail High --output stdoutsudo、sshd、cron、syslog、yum专注分析 SSH 登录失败 / 成功 邮件报告 sudo logwatch --range today --mailto admin@example.com --output mail配置邮件发送每日报告 (4)定时配置 - Logwatch 由 crontab 每日自动执行:
# 编辑定时任务 sudo crontab -e # 添加每日0点执行 0 0 * * * /usr/bin/logwatch --range today --mailto admin@example.com --output mail(5) 适用场景
服务器日常巡检,快速发现异常(如 SSH 暴力破解、服务报错);
无需实时分析,只需定期汇总报告的场景。
- ELK Stack: 企业级日志分析平台
- Graylog: 开源日志管理平台
整体流程:
- 配置阶段:
- 用户通过 Graylog Web Interface 配置告警规则、用户权限、Pipeline 等;配置信息存入 MongoDB,Graylog Server 加载并编译这些规则。
- 日志采集与处理阶段:
- 日志源发送日志到 Graylog Server,经过 Pipeline 解析、清洗、丰富化。
- 处理过程中,若匹配实时告警规则,Graylog Server 直接触发告警通知。
- 处理完成的日志写入 Elasticsearch 持久化存储。
- 用户查询与分析阶段:
- 用户在 Web 界面发起日志查询或查看仪表板,请求发送到 Graylog Server,由 Graylog Server 从 Elasticsearch 拉取日志数据,返回给界面渲染展示。
- 定时聚合告警(补充场景):
- Graylog Server 按设定的时间间隔,主动查询 Elasticsearch,做聚合统计后判断是否触发告警。