本文档风哥主要介绍Linux系统服务日志查看命令journalctl,包括基本使用、高级过滤、日志管理、生产环境实战案例等内容,参考Red Hat Enterprise Linux 10官方文档中的System administration章节,适合系统管理员在生产环境中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 journalctl命令概念
journalctl是systemd系统的日志查看工具,用于查看和管理systemd journal日志。它提供了丰富的过滤和查询功能,可以帮助系统管理员快速定位和分析系统问题。学习交流加群风哥微信: itpux-com
- 统一的日志管理界面
- 支持多种过滤条件
- 实时日志监控
- 日志持久化存储
- 支持日志转发
1.2 journald服务
journald是systemd的日志服务,负责收集和存储系统日志。
$ systemctl status systemd-journald
● systemd-journald.service – Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since Wed 2026-04-06 10:00:00 CST; 1h ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 1234 (systemd-journal)
Status: “Processing requests…”
Tasks: 1
Memory: 12.3M
CPU: 1.234s
CGroup: /system.slice/systemd-journald.service
└─1234 /usr/lib/systemd/systemd-journald
Apr 06 10:00:00 fgedu.net.cn systemd[1]: Starting Journal Service…
Apr 06 10:00:00 fgedu.net.cn systemd-journald[1234]: Journal started
Apr 06 10:00:00 fgedu.net.cn systemd-journald[1234]: Runtime journal is using 8.0M (max allowed 49.7M, trying to leave 74.6M free of 497.5M available → current limit 49.7M)
Apr 06 10:00:00 fgedu.net.cn systemd-journald[1234]: System journal is using 128.0M (max allowed 4.0G, trying to leave 4.0G free of 49.7G available → current limit 4.0G)
1.3 日志结构
journal日志的结构包括:
- 时间戳:日志产生的时间
- 主机名:产生日志的主机
- 服务名:产生日志的服务
- 进程ID:产生日志的进程ID
- 日志级别:日志的严重程度
- 日志内容:日志的具体内容
Part02-生产环境规划与建议
2.1 日志管理策略
日志管理策略:
- 集中管理:将日志集中存储和管理
- 分类存储:按服务和级别分类存储日志
- 定期清理:定期清理过期日志
- 备份策略:备份重要日志
- 监控告警:监控日志中的异常信息
2.2 日志保留策略
日志保留策略:
$ sudo vim /etc/systemd/journald.conf
# 添加以下内容
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=4G
SystemKeepFree=4G
RuntimeMaxUse=50M
RuntimeKeepFree=100M
MaxRetentionSec=1month
ForwardToSyslog=no
# 重启journald服务
$ sudo systemctl restart systemd-journald
2.3 日志安全性
日志安全性考虑:
- 权限控制:设置日志文件的权限
- 加密存储:加密敏感日志
- 访问控制:限制日志访问权限
- 审计:监控日志访问
- 备份:备份重要日志
Part03-生产环境项目实施方案
3.1 基本使用
journalctl的基本使用方法:
$ journalctl
# 查看最新日志
$ journalctl -n
# 查看最新100条日志
$ journalctl -n 100
# 实时查看日志
$ journalctl -f
# 查看指定服务的日志
$ journalctl -u nginx
# 查看指定时间范围的日志
$ journalctl –since “2026-04-06 10:00:00” –until “2026-04-06 11:00:00”
# 查看引导日志
$ journalctl -b
# 查看指定引导的日志
$ journalctl -b -1
3.2 高级过滤
journalctl的高级过滤功能:
$ journalctl -p err
$ journalctl -p warning
$ journalctl -p info
# 按进程ID过滤
$ journalctl _PID=1234
# 按用户ID过滤
$ journalctl _UID=1000
# 按系统单元过滤
$ journalctl -u nginx -u mysql
# 按日志字段过滤
$ journalctl MESSAGE=”*error*”
# 组合过滤
$ journalctl -u nginx -p err –since “1h ago”
# 按主机名过滤
$ journalctl _HOSTNAME=fgedu.net.cn
# 按设备过滤
$ journalctl _KERNEL_DEVICE=/dev/sda
3.3 日志管理
日志管理操作:
$ journalctl –disk-usage
Archived and active journals take up 128.0M on disk.
# 清理日志
$ sudo journalctl –vacuum-time=1d
Vacuuming done, freed 64.0M of archived journals from /var/log/journal/1234567890abcdef1234567890abcdef.
# 清理指定大小的日志
$ sudo journalctl –vacuum-size=100M
Vacuuming done, freed 28.0M of archived journals from /var/log/journal/1234567890abcdef1234567890abcdef.
# 查看日志统计信息
$ journalctl –header
Journal header information:
File path: /var/log/journal/1234567890abcdef1234567890abcdef/system.journal
File ID: 1234567890abcdef1234567890abcdef
State: ONLINE
Compatible: yes
Server: fgedu.net.cn
Signature: yes
Key pair: none
Created: Wed 2026-04-06 10:00:00 CST
Head: 1234567890
Tail: 1234567890
Seqno: 123456
Freespace: 4.0G
Reserved: 0
Runtime journal: no
Journal file type: system
Part04-生产案例与实战讲解
4.1 服务故障排查
案例:Nginx服务故障排查
$ systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2026-04-06 10:30:00 CST; 5min ago
Process: 12345 ExecStart=/usr/sbin/nginx (code=exited, status=1/FAILURE)
Main PID: 12345 (code=exited, status=1/FAILURE)
Apr 06 10:30:00 fgedu.net.cn systemd[1]: Starting The nginx HTTP and reverse proxy server…
Apr 06 10:30:00 fgedu.net.cn nginx[12345]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Apr 06 10:30:00 fgedu.net.cn nginx[12345]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 06 10:30:00 fgedu.net.cn systemd[1]: nginx.service: Control process exited, code=exited status=1
Apr 06 10:30:00 fgedu.net.cn systemd[1]: nginx.service: Failed with result ‘exit-code’.
Apr 06 10:30:00 fgedu.net.cn systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
# 使用journalctl查看Nginx日志
$ journalctl -u nginx –since “10min ago”
— Logs begin at Wed 2026-04-06 10:00:00 CST, end at Wed 2026-04-06 10:35:00 CST.
Apr 06 10:30:00 fgedu.net.cn systemd[1]: Starting The nginx HTTP and reverse proxy server…
Apr 06 10:30:00 fgedu.net.cn nginx[12345]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Apr 06 10:30:00 fgedu.net.cn nginx[12345]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 06 10:30:00 fgedu.net.cn systemd[1]: nginx.service: Control process exited, code=exited status=1
Apr 06 10:30:00 fgedu.net.cn systemd[1]: nginx.service: Failed with result ‘exit-code’.
Apr 06 10:30:00 fgedu.net.cn systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
# 查看端口占用情况
$ ss -tulpn | grep :80
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(“httpd”,pid=6789,fd=4)
# 停止占用端口的服务
$ sudo systemctl stop httpd
# 启动Nginx服务
$ sudo systemctl start nginx
# 验证Nginx服务状态
$ systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-06 10:36:00 CST; 1min ago
Main PID: 12346 (nginx)
Tasks: 2 (limit: 4915)
Memory: 1.2M
CPU: 10ms
CGroup: /system.slice/nginx.service
├─12346 nginx: master process /usr/sbin/nginx
└─12347 nginx: worker process
Apr 06 10:36:00 fgedu.net.cn systemd[1]: Starting The nginx HTTP and reverse proxy server…
Apr 06 10:36:00 fgedu.net.cn nginx[12346]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Apr 06 10:36:00 fgedu.net.cn nginx[12346]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Apr 06 10:36:00 fgedu.net.cn systemd[1]: Started The nginx HTTP and reverse proxy server.
4.2 系统启动问题
案例:系统启动失败排查
$ journalctl -b
# 查看指定引导的启动日志
$ journalctl -b -1
# 查看启动失败的服务
$ journalctl -b | grep “Failed to start”
# 查看系统启动过程中的错误
$ journalctl -b -p err
# 查看特定服务的启动日志
$ journalctl -b -u systemd-fsck
# 查看硬件相关的日志
$ journalctl -b -k | grep -i error
# 查看网络相关的日志
$ journalctl -b -u NetworkManager
4.3 安全事件分析
案例:SSH暴力破解攻击分析
$ journalctl -u sshd
# 查看SSH登录失败的日志
$ journalctl -u sshd | grep “Failed password”
# 查看SSH登录成功的日志
$ journalctl -u sshd | grep “Accepted”
# 统计登录失败的IP地址
$ journalctl -u sshd | grep “Failed password” | awk ‘{print $11}’ | sort | uniq -c | sort -nr
# 查看最近1小时的SSH日志
$ journalctl -u sshd –since “1h ago”
# 实时监控SSH日志
$ journalctl -u sshd -f
# 查看特定IP地址的登录尝试
$ journalctl -u sshd | grep “192.168.1.100”
Part05-风哥经验总结与分享
5.1 故障排查技巧
故障排查技巧:
- 从最近的日志开始:使用-n参数查看最新日志
- 按服务过滤:使用-u参数过滤特定服务的日志
- 按级别过滤:使用-p参数过滤特定级别的日志
- 按时间过滤:使用–since和–until参数过滤时间范围
- 组合过滤:结合多个参数进行精确过滤
- 实时监控:使用-f参数实时监控日志
5.2 最佳实践
最佳实践:
- 定期清理日志:避免磁盘空间被占满
- 配置日志保留策略:根据需要设置合适的保留时间
- 集中管理日志:将日志集中存储和分析
- 监控日志:设置日志监控和告警
- 备份重要日志:备份关键系统和服务的日志
- 文档化:记录日志分析过程和结果
5.3 风哥建议
风哥建议:
- 熟悉journalctl命令:掌握常用参数和过滤方法
- 建立日志分析流程:制定标准化的日志分析流程
- 使用日志分析工具:结合ELK Stack等工具进行日志分析
- 定期培训:定期培训团队成员的日志分析能力
- 持续改进:根据实际情况不断优化日志管理策略
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
