Linux 中的日志系统:从 journald 到 rsyslog 全景解析

引言

日志是系统诊断的核心。本文将解析 systemd-journaldrsyslog 等工具的协作机制与配置方法。


1. systemd-journald

1.1 核心功能

  • 集中化日志 :收集内核、服务日志到 /var/log/journal/

  • 过滤与查询 :

    # 查看特定服务日志
    
    journalctl -u nginx.service
    
    # 实时监控
    
    journalctl -f
    

1.2 日志轮转

通过 /etc/systemd/journald.conf 配置存储策略:

Storage=persistent

SystemMaxUse=5G

2. rsyslog:传统日志管理

2.1 配置文件结构

  • 主配置/etc/rsyslog.conf
  • 模块与规则/etc/rsyslog.d/*.conf

2.2 日志过滤规则

# 将 kernel 警告写入单独文件

kern.warning                    /var/log/kernel-warnings.log

# 过滤特定服务

if $programname == 'nginx' then /var/log/nginx/access.log

3. 两者的协同工作

3.1 数据流

  1. 内核/服务日志systemd-journald

  2. rsyslog 从journald 读取日志并持久化:

    # 在 rsyslog 配置中启用 journald 输入模块
    
    module(load="imjournal")
    

3.2 共存场景

  • journald :实时查询与临时存储
  • rsyslog :长期归档与远程传输(如 rsyslog → ELK Stack

4. 高级配置示例

4.1 远程日志收集

# 在 rsyslog 中配置远程服务器

*.* @@logserver:514  # 使用 TCP 协议

4.2 日志过滤与告警

# 当出现 "error" 关键词时发送邮件

if $msg contains 'error' then :ommail:admin@example.com

总结

systemd-journaldrsyslog 各有优势:前者适合实时分析,后者擅长长期存储与远程传输。根据需求选择或组合使用,可构建高效日志系统。