少于 1 分钟阅读 次阅读

1. systemd-journald

核心角色:系统日志的收集者初步存储者

  • 是什么:它是 systemd 套件的一部分,作为系统启动的第一个进程,负责收集来自内核、启动过程、系统服务以及所有标准输出/错误的所有日志信息。
  • 特点
    • 二进制存储:日志以二进制格式(非纯文本)集中存储在 /run/log/journal/(临时)或 /var/log/journal/(持久化)。
    • 结构化数据:每条日志都附带丰富的元数据,如时间戳、主机名、进程ID、优先级等,便于精确过滤和查询。
    • 实时性:使用 journalctl 命令可以实时跟踪日志 (journalctl -f),并支持强大的过滤和查询功能(如按时间、服务单元、优先级筛选)。
  • 主要目的:提供快速、结构化的日志访问,尤其利于故障诊断和系统状态查看。

2. rsyslog

核心角色:日志的高级处理分发路由者

  • 是什么:一个高性能、模块化的传统系统日志守护进程。它可以从多种来源(包括 journald、本地套接字、文件、网络)接收日志,进行复杂的过滤、处理,然后输出到多种目的地(文件、数据库、远程服务器等)。
  • 特点
    • 模块化与强大规则:通过配置规则,可以根据设施、优先级、程序名等条件,将不同的日志消息分发到不同的文件或远程服务器。
    • 协议支持:支持 TCP、UDP、RELP 等协议,是构建集中式日志服务器(如 ELK Stack 中的 Logstash)的关键组件。
    • 文本存储:默认将日志输出为纯文本文件(如 /var/log/messages/var/log/syslog),便于人类阅读和传统工具处理。
  • 主要目的:实现日志的长期归档、分类存储和网络集中化管理。

3. logrotate

核心角色:日志文件的维护管家

  • 是什么:一个独立的工具,用于自动轮转、压缩、删除和邮件通知日志文件,防止单个日志文件无限增长占满磁盘空间。
  • 特点
    • 按计划执行:通常作为每日的 cron 任务运行,Ubuntu20.04 下使用的是systemd任务代替 cron 任务。
    • 配置文件驱动:其行为由 /etc/logrotate.conf/etc/logrotate.d/ 目录下的配置文件定义。可以为每个日志文件(如 /var/log/syslog/var/log/nginx/access.log)设置独立的轮转策略(如按大小、按时间、保留多少份、是否压缩等)。
    • 轮转后处理:支持在轮转后执行自定义命令,例如让服务重新打开日志文件(通过 postrotate 脚本发送 SIGUSR1 信号)。
  • 主要目的:自动化管理日志文件的生命周期,确保磁盘空间合理利用。

协作关系

在现代 Linux 系统(如 RHEL/CentOS 8+, Ubuntu 16.04+)中,这三者通常协同工作,形成一个完整的日志管道:

  1. 收集systemd-journald 首先收集所有日志,提供临时的、结构化的查询接口。
  2. 处理与转发rsyslog 通过 imjournal 模块从 journald 读取日志,然后根据其复杂的规则进行过滤和分类,最终将需要长期保存的日志写入到 /var/log/ 目录下的各个纯文本文件中(如 syslogsecure 等)。
  3. 维护logrotate 定期检查这些由 rsyslog(或其他应用)生成的文本日志文件,按照配置对其进行轮转、压缩和清理。

简单总结journald 负责“记”和“存”,rsyslog 负责“分”和“存”,logrotate 负责“管”。三者共同保障了系统日志从产生、处理到归档维护的全流程自动化。

alt text

留下评论