传统日志,dmesg,journalctl的区别和应用场景

dmesg、传统日志、journalctl 三者的关系

这是一个从内核到应用,从旧到新的日志体系:


一、三者对比表格

对比项dmesg传统日志 (/var/log/*)journalctl
来源内核环形缓冲区rsyslog/syslog-ngsystemd-journald
主要内容内核消息、硬件驱动系统服务、应用日志整合所有日志(内核+系统+应用)
存储位置内存(重启清空)文本文件(永久)二进制文件(/var/log/journal/)
格式纯文本纯文本结构化数据(带字段索引)
查询能力弱(grep)弱(grep)(按时间、服务、级别等)
重启后新的启动日志历史保留历史保留(需持久化配置)

二、数据流向图

                    ┌─────────────┐
内核消息 ───────────→│    dmesg    │(内存缓冲区)
                    └─────────────┘
                          ↓
                    ┌─────────────┐
                    │ journalctl  │←───── 系统服务日志
                    │ (二进制)     │←───── 应用日志
                    └─────────────┘
                          ↓
                    ┌─────────────┐
                    │ 传统日志文件 │
                    │ /var/log/*  │(文本文件)
                    └─────────────┘

三、实际使用场景

1️⃣ dmesg – 只看内核/硬件

# 查看硬件错误
dmesg | grep -i error

# 查看硬盘识别
dmesg | grep sda

# 实时监控内核消息
dmesg -w

2️⃣ 传统日志 – 看特定服务/习惯操作

# 系统消息
tail -f /var/log/messages

# 登录安全
tail -f /var/log/secure

# Nginx日志(应用自己的)
tail -f /www/wwwlogs/access.log

3️⃣ journalctl – 现代系统的万能查询

# 查看所有日志
journalctl

# 实时监控
journalctl -f

# 查看指定服务的日志
journalctl -u nginx.service

# 查看今天的日志
journalctl --since today

# 查看内核日志(相当于dmesg)
journalctl -k

# 查看错误级别日志
journalctl -p err

四、为什么有重叠?

历史原因:
SysV init 时代 → 只有 dmesg + 文本日志
Systemd 时代 → 引入 journalctl(统一收集)
但现在系统为了兼容,三者并存:
- dmesg:快速看硬件
- 文本日志:脚本处理、传统习惯
- journalctl:强大查询、结构化

五、推荐使用策略

需求推荐工具
快速看硬件问题dmesg | grep -i error
实时监控系统journalctl -f
查某个服务的日志journalctl -u nginx.service
导出给其他人tail -100 /var/log/messages
查登录失败journalctl _COMM=sshd | grep "Failed password"
看今天所有错误journalctl --since today -p err

一句话总结dmesg 看内核,journalctl 查一切,传统日志做兼容。

实际工作中怎么用?

✅ 推荐用 journalctl 的场景:

bash复制下载

# 查服务日志(最方便)
journalctl -u nginx.service -f

# 按时间查
journalctl --since "1 hour ago"

# 按级别查
journalctl -p err -p warning

# 查内核日志
journalctl -k

# 组合查询
journalctl -u sshd.service --since today | grep "Failed"

✅ 还得用传统日志的场景:

bash复制下载

# 查Nginx访问日志(应用自己写的)
tail -f /www/wwwlogs/access.log

# 查MySQL慢查询
tail -f /var/log/mysql/slow-query.log

# 给同事发日志(文本文件更方便)
cat /var/log/messages | grep error

# 脚本处理(grep/awk处理文本更简单)

✅ 还得用 dmesg 的场景:

bash复制下载

# 快速看硬件问题
dmesg | grep -i usb

# 系统启动刚完,想看内核消息
dmesg | tail -20

现状总结

text复制下载

journalctl 优势:  结构化、好查询、统一入口
传统日志 优势:   文本格式、脚本友好、应用习惯

实际工作流

  1. 日常排查:先用 journalctl -u 服务名 -f
  2. 深入分析:再用 journalctl -p err --since today
  3. 特殊需求:最后找对应应用的日志文件

一句话建议

能记journalctl就记journalctl,但也要知道传统日志在哪——工作中两种都会遇到。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注