Ubuntu 日志系统简介
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+)中,这三者通常协同工作,形成一个完整的日志管道:
- 收集:
systemd-journald首先收集所有日志,提供临时的、结构化的查询接口。 - 处理与转发:
rsyslog通过imjournal模块从journald读取日志,然后根据其复杂的规则进行过滤和分类,最终将需要长期保存的日志写入到/var/log/目录下的各个纯文本文件中(如syslog,secure等)。 - 维护:
logrotate定期检查这些由rsyslog(或其他应用)生成的文本日志文件,按照配置对其进行轮转、压缩和清理。
简单总结:journald 负责“记”和“存”,rsyslog 负责“分”和“存”,logrotate 负责“管”。三者共同保障了系统日志从产生、处理到归档维护的全流程自动化。

留下评论