二十一、【Linux系统日志管理】日志文件、日志级别、journalctl详解

发布于:2025-07-26 ⋅ 阅读:(22) ⋅ 点赞:(0)

本章学习目标

学习Linux系统核心日志文件、日志级别、查看日志命令。

内容简介

日志功能

  1. 日志分类与精准定位

  2. 日志轮转机制

  3. 安全审计功能

日志级别功能

  1. 精准事件分级

  2. 动态控制机制

  3. 故障快速定位

journactl命令功能

  1. 统一日志管理

  2. 精准多维过滤

  3. 运维维护工具

操作演示

核心日志文件演示

日志文件路径 功能描述 关键内容示例
/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` 结构化输出,便于脚本解析

网站公告

今日签到

点亮在社区的每一天
去签到