journalctl命令指南:Linux系统日志管理工具
1. 简介
journalctl是systemd日志管理系统的查询工具,用于查看和分析系统日志。它提供了强大的过滤和分析功能,是系统管理员排查问题的重要工具。
主要功能
- 查看系统日志
- 实时监控日志
- 按各种条件过滤日志
- 日志空间管理
- 日志分析和导出
2. 基本用法
查看日志
# 查看所有日志
journalctl
# 查看最新日志
journalctl -n 50
# 实时查看日志
journalctl -f
# 查看本次启动的日志
journalctl -b
# 查看特定时间的日志
journalctl --since "2024-01-01" --until "2024-01-02"
输出格式
# 输出简短格式
journalctl --no-full
# 输出详细格式
journalctl -l
# 输出JSON格式
journalctl -o json
# 输出JSON格式并美化
journalctl -o json-pretty
# 显示消息优先级
journalctl -p err
3. 过滤选项
按单元过滤
# 查看特定服务的日志
journalctl -u nginx.service
# 查看多个服务的日志
journalctl -u nginx.service -u php-fpm.service
# 查看内核日志
journalctl -k
# 查看特定PID的日志
journalctl _PID=1234
按时间过滤
# 查看今天的日志
journalctl --since today
# 查看最近一小时的日志
journalctl --since "1 hour ago"
# 查看昨天的日志
journalctl --since "yesterday" --until "today"
# 查看特定时间段的日志
journalctl --since "2024-01-01 00:00:00" --until "2024-01-02 00:00:00"
按优先级过滤
# 查看错误及以上级别的日志
journalctl -p err
# 查看警告及以上级别的日志
journalctl -p warning
# 优先级说明:
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
4. 高级特性
日志分析
# 查看日志占用空间
journalctl --disk-usage
# 查看特定字段
journalctl -o verbose
# 统计日志数量
journalctl | wc -l
# 查找特定消息
journalctl | grep "error"
日志导出
# 导出为文本文件
journalctl > system.log
# 导出为JSON格式
journalctl -o json > system.json
# 导出特定服务的日志
journalctl -u nginx.service > nginx.log
# 导出并压缩
journalctl | gzip > system.log.gz
5. 日志管理
日志轮转
# 设置日志大小限制
journalctl --vacuum-size=1G
# 设置日志时间限制
journalctl --vacuum-time=1weeks
# 清理特定时间之前的日志
journalctl --vacuum-time=2d
# 检查日志设置
journalctl --header
系统配置
# /etc/systemd/journald.conf
[Journal]
# 持久化存储
Storage=persistent
# 最大使用空间
SystemMaxUse=1G
# 最大文件大小
SystemMaxFileSize=100M
# 最大保留时间
MaxRetentionSec=1month
6. 最佳实践
日志监控
- 定期检查系统错误日志
- 设置合理的日志保留策略
- 监控关键服务的日志
- 配置日志告警
故障分析
# 分析启动问题
journalctl -b -p err
# 分析服务故障
journalctl -u service-name.service -p warning
# 查看系统慢启动
journalctl -b -o short-monotonic
# 分析安全问题
journalctl _SYSTEMD_UNIT=sshd.service _COMM=sshd
7. 常见问题排查
系统问题
# 查看启动错误
journalctl -b -p err
# 查看系统崩溃信息
journalctl -k -b -1
# 查看硬件错误
journalctl --dmesg
# 查看认证失败
journalctl _COMM=sshd | grep "Failed"
服务问题
# 查看服务启动失败
journalctl -u service-name.service -b
# 查看服务错误
journalctl -u service-name.service -p err
# 实时监控服务
journalctl -f -u service-name.service
# 分析服务崩溃
journalctl -u service-name.service --since "10 minutes ago"
性能问题
# 查看OOM killer日志
journalctl | grep -i "out of memory"
# 查看CPU相关日志
journalctl | grep -i "cpu"
# 查看磁盘相关日志
journalctl | grep -i "disk"
# 查看内存相关日志
journalctl | grep -i "memory"