本章学习目标
学习Linux系统核心日志文件、日志级别、查看日志命令。
内容简介
日志功能
日志分类与精准定位
日志轮转机制
安全审计功能
日志级别功能
精准事件分级
动态控制机制
故障快速定位
journactl命令功能
统一日志管理
精准多维过滤
运维维护工具
操作演示
核心日志文件演示
日志文件路径 | 功能描述 | 关键内容示例 |
---|---|---|
/var/log/messages |
系统级事件(内核、服务、硬件) | USB设备连接、cron任务执行 |
/var/log/secure |
用户认证及安全事件 | SSH登录失败、sudo提权记录 |
/var/log/boot.log |
系统启动流程记录 | 服务启动状态、初始化完成标志 |
/var/log/cron |
定时任务执行详情 | 任务触发时间、执行结果 |
/var/log/dmesg |
内核及硬件驱动实时消息 | 磁盘I/O错误、硬件故障 |
/var/log/maillog |
邮件服务活动记录 | SMTP发送失败、邮件队列状态 |
/var/log/httpd/access_log |
Apache访问日志 | 客户端IP、请求路径、HTTP状态码 |
/var/log/btmp |
失败登录尝试(需 lastb 查看) |
恶意爆破IP、无效用户名 |
/var/log/wtmp |
用户登录历史(需 last 查看) |
登录/登出时间、会话时长 |
/var/log/lastlog |
用户最后一次登录(lastlog ) |
所有账户最近登录时间戳 |
系统主日志(/var/log/messages)
# 查看系统级事件(内核、服务启动等)
[root@localhost ~]# tail -n 3 /var/log/messages
Jul 21 15:30:01 localhost systemd: Started System Logging Service.
Jul 21 15:32:22 localhost kernel: USB device connected to port 2.
Jul 21 15:35:10 localhost cron[1234]: (root) CMD (command)
安全日志(/var/log/secure)
# 监控认证事件(SSH登录、sudo提权等)
[root@localhost ~]# grep "Failed password" /var/log/secure
Jul 21 14:45:33 localhost sshd[5678]: Failed password for root from 10.0.0.2 port 22
启动日志(/var/log/boot.log)
# 检查系统启动过程
[root@localhost ~]# cat /var/log/boot.log | grep "Success"
[ OK ] Started LVM2 PV scan on device 8:2.
[ OK ] Reached target System Initialization.
计划任务日志(/var/log/cron)
# 查看定时任务执行记录
[root@localhost ~]# tail -f /var/log/cron
Jul 21 16:00:01 localhost CROND[7890]: (root) CMD (/usr/sbin/backup.sh)
内核环缓冲日志(dmesg)
# 实时检测硬件及驱动事件
[root@localhost ~]# dmesg | grep "error"
[ 12.345678] sd 0:0:0:0: [sda] Critical I/O error to sector 2048
日志级别
级别名称 | 数值 | 使用场景 | 典型命令示例 | 输出示例 |
---|---|---|---|---|
DEBUG | 7 | 开发调试、变量跟踪 | journalctl -p debug -u nginx |
[DEBUG] Worker process initialized |
INFO | 6 | 运行状态监控(默认级别) | grep "INFO" /var/log/messages |
[INFO] Server started on port 80 |
WARNING | 4 | 潜在风险提示(不影响运行) | journalctl -p warn --since "today" |
[WARN] Disk space 85% full |
ERROR | 3 | 功能故障(需立即处理) | journalctl -p err -b |
[ERROR] Database connection failed |
CRITICAL | 2 | 系统崩溃风险(进程中断) | grep "CRIT" /var/log/secure |
[CRIT] Out of memory: Kill process |
ALERT | 1 | 需人工干预的紧急事件 | journalctl -p alert |
[ALERT] RAID array degraded |
EMERGENCY | 0 | 系统不可用(硬件故障/灾难) | `cat /var/log/syslog | grep emerg` |
查看当前系统日志级别(syslog/rsyslog)
说明:*.info
表示记录 INFO
及以上级别(含 WARNING
, ERROR
)的日志
# 查看全局日志级别配置
[root@localhost ~]# grep "LogLevel" /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages # 记录INFO及以上级别
按级别过滤日志(journalctl)
作用:-p
指定优先级,err
对应错误,debug
对应调试信息
# 查看所有 ERROR 级别日志(本次启动后)
[root@localhost ~]# journalctl -p err -b
Jul 21 06:15:47 localhost kernel: EXT4-fs error (device sda1) # 磁盘错误示例
# 查看 DEBUG 级别日志(需服务支持)
[root@localhost ~]# journalctl -p debug -u nginx
-- No entries -- # 若未启用DEBUG级别则无输出
动态调整日志级别(临时生效)
# 将内核日志级别调整为 DEBUG(数值7)
[root@localhost ~]# echo 7 > /proc/sys/kernel/printk
[root@localhost ~]# cat /proc/sys/kernel/printk
7 4 1 7 # 当前级别:DEBUG | 默认级别:INFO | 最低级别:1 | 启动级别:DEBUG
永久修改日志级别(rsyslog)
效果:/var/log/messages
将不再记录 INFO
级别日志
# 修改配置:仅记录 WARNING 及以上日志
[root@localhost ~]# sed -i 's/*.info/*.warning/g' /etc/rsyslog.conf
[root@localhost ~]# systemctl restart rsyslog
为特定服务设置独立级别
场景:高并发服务减少冗余日志,提升性能
# 配置 Nginx 仅记录 ERROR 日志
[root@localhost ~]# echo "local0.error /var/log/nginx/error.log" >> /etc/rsyslog.d/nginx.conf
[root@localhost ~]# systemctl restart rsyslog nginx
journacal查看日志
演示命令 | 功能描述 | 关键选项/参数 |
---|---|---|
journalctl |
查看所有系统日志 | 默认倒序显示 |
journalctl -f |
实时追踪最新日志 | -f 动态更新 |
journalctl -n 5 |
查看最近 5 条日志 | -n 指定条数 |
journalctl -u nginx.service |
按服务名称过滤日志 | -u 服务单元名 |
journalctl -p err -b |
查看本次启动的错误日志 | -p 优先级,-b 本次启动 |
journalctl --since "14:00" --until "14:30" |
按时间范围过滤日志 | --since/--until 时间窗口 |
journalctl _COMM=sshd |
按进程名称过滤日志 | _COMM 进程名 |
journalctl --disk-usage |
查看日志磁盘占用 | 显示总大小 |
journalctl --vacuum-size=1G |
清理日志保留指定大小 | --vacuum-size 空间阈值 |
查看所有日志
[root@localhost ~]# journalctl
-- Logs begin at Mon 2025-07-21 00:00:01 CST, end at Mon 2025-07-21 14:30:50 CST. --
Jul 21 14:30:01 localhost systemd: Started System Logging Service.
# 默认显示全部日志(按 `Page Up/Down` 翻页,`Ctrl+C` 退出)
查看实时日志
[root@localhost ~]# journalctl -f
-- Following new logs --
Jul 21 14:31:05 localhost sshd[1234]: Accepted publickey for root from 10.0.0.2
# 动态追踪最新日志(按 `Ctrl+C` 退出)
查看最近5条日志
[root@localhost ~]# journalctl -n 5
Jul 21 14:30:01 localhost cron[5678]: (root) CMD ( /usr/sbin/backup.sh )
Jul 21 14:30:05 localhost kernel: USB device connected to port 2.
# `-n` 指定显示条数
按服务过滤日志
[root@localhost ~]# journalctl -u nginx.service
-- Logs for Nginx service --
Jul 21 14:25:10 localhost nginx: 192.168.1.100 GET /index.html HTTP/1.1 200
# `-u` 精准定位服务日志
按优先级过滤错误日志
[root@localhost ~]# journalctl -p err -b
Jul 21 06:15:47 localhost kernel: EXT4-fs error (device sda1)
# `-p err` 仅显示错误及以上级别(0-3),`-b` 限定本次启动
按时间范围过滤
[root@localhost ~]# journalctl --since "2025-07-21 14:00:00" --until "14:30:00"
Jul 21 14:25:22 localhost systemd: Starting Backup Service...
# `--since` 和 `--until` 精确框定时间窗口
按进程id或名称过滤
# 过滤 PID 为 1234 的进程日志
[root@localhost ~]# journalctl _PID=1234
# 过滤进程名为 sshd 的日志
[root@localhost ~]# journalctl _COMM=sshd
查看日志磁盘占用
[root@localhost ~]# journalctl --disk-usage
Archived and active journals take up 1.2G in the file system.
# 监控存储空间,避免磁盘耗尽
清理旧日志
# 保留最近 1GB 日志
[root@localhost ~]# journalctl --vacuum-size=1G
Deleted archived journal files (8.7M)
# 删除 1 周前的日志
[root@localhost ~]# journalctl --vacuum-time=1weeks
导出日志为json格式
[root@localhost ~]# journalctl -u sshd -o json-pretty
{
"__CURSOR": "s=abc123...",
"__REALTIME_TIMESTAMP": "1680000000000000",
"MESSAGE": "Accepted publickey for root",
"_SYSTEMD_UNIT": "sshd.service"
}
# `-o json-pretty` 结构化输出,便于脚本解析