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"