当前位置:首页 > 文章列表 > 文章 > linux > journald 与 rsyslog 同时启用会存两份吗:转发链路和落盘边界怎么判断

journald 与 rsyslog 同时启用会存两份吗:转发链路和落盘边界怎么判断

来源:17golang原创 2026-09-04 00:22:36 0浏览 收藏

大部分主流带systemd的Linux发行版默认同时启用journald和rsyslog服务时,同一条系统日志默认确实会被写入两份不同的存储位置,只有你手动调整转发链路规则或者落盘开关,才能避免重复存储。

默认无自定义配置的场景下两份日志独立存储互不覆盖,你不需要同时保留的话只要关掉其中一个的落盘配置,或者调整rsyslog的输入源过滤掉journald转发的重复内容即可。

服务器磁盘突然多出一份日志,最容易误判的就是“journald 和 rsyslog 都开着,所以一定双写”。实际要先看消息怎么进入 rsyslog,再看 journald 和 rsyslog 各自有没有落盘动作。两者可以组成一条转发链,也可以因为同时启用两个输入模块,让同一条消息被 rsyslog 处理两次。

要点速览
  • ForwardToSyslog=yes/run/systemd/journal/syslogimjournal 则直接读取 journal 数据库。
  • Storage=auto 是否写入持久化日志,取决于 /var/log/journal 是否存在;volatile 不代表 rsyslog 不会写文件。
  • 出现两条相同消息时,先排查 imjournalimuxsock 是否同时生效,再比对文件和来源字段。

先区分 journald 到 rsyslog 的两条输入路径

第一条路径是即时转发:journald 接收消息后,按 ForwardToSyslog=yes 发往 /run/systemd/journal/syslog,rsyslog 通过 imuxsock 接收。它传递的是传统 syslog 入口能理解的消息。

第二条路径是 imjournal 主动读取 journal 数据库。它不依赖消息刚好在 socket 上经过,rsyslog 晚启动时仍能读取已经保存的记录,并能拿到更多结构化字段。代价是读取 journal 数据库的开销通常高于 imuxsock

因此,配置里同时有 ForwardToSyslog=yesimuxsockimjournal 时,同一消息可能从两个入口进入 rsyslog。先检查:

grep -R "ForwardToSyslog" /etc/systemd/journald.conf /etc/systemd/journald.conf.d 2>/dev/null
grep -R "imjournal\|imuxsock" /etc/rsyslog.conf /etc/rsyslog.d 2>/dev/null
Linux journald、syslog socket 与 rsyslog 输入模块的静态关系图
图1:查看 journald、syslog socket、imuxsock 与 imjournal 的边界,判断同一消息是否存在两个进入 rsyslog 的入口。

再核对 journald 的 Storage 落盘位置

“存两份”还要问清楚是哪两份。journald 的 Storage=auto 在默认命名空间中会根据 /var/log/journal 是否存在,在持久化磁盘和易失性目录之间选择;Storage=persistent 优先使用 /var/log/journalStorage=volatile 只写 /run/log/journal。前者是内存文件系统,重启后不能当作长期副本。

这意味着即使 journald 只保留易失性数据,rsyslog 仍可能把收到的消息写到 /var/log/messages 或其他本地文件。反过来,journald 持久化且 rsyslog 只把消息发往远端,也不等于本机有两个文件副本。先看配置和实际占用:

grep -R "^Storage=" /etc/systemd/journald.conf /etc/systemd/journald.conf.d 2>/dev/null
ls -ld /run/log/journal /var/log/journal 2>/dev/null && journalctl --disk-usage

目录存在只是重要线索,最终还要结合 drop-in 优先级和 journalctl --disk-usage 的结果判断。修改 journald 配置后,也要留意已存在的持久化文件不会因为切换到 volatile 自动消失。

Linux journald 的 Storage、运行时目录、持久化目录与 rsyslog 文件输出关系图
图2:对照 /run/log/journal、/var/log/journal 与 rsyslog 文件输出,判断磁盘上到底保留了几套日志副本。

最后核对 rsyslog 的输入与输出规则

打开 /etc/rsyslog.conf/etc/rsyslog.d/*.conf,把每个输入模块和 action 画成一张小表。输入模块只回答“消息从哪里来”,输出动作才回答“消息写到哪里”。常见的 omfile 会产生本地文本文件,远程转发会产生另一台机器上的副本,omjournal 则会把 rsyslog 收到的消息重新写回 journal。

看到的配置说明优先核对
imjournal读取 journal 数据库是否又启用了 imuxsock
imuxsock读取 syslog socket是否由 journald 转发而来
omfile写本地文件文件路径和筛选条件
omjournal重新写入 journal是否形成回写环路

如果你的目标只是让 rsyslog 统一接收传统 syslog 消息,通常应选择一种入口;如果确实需要 imjournal 的结构化字段,就要明确关闭另一条重复入口,并为规则加上清楚的筛选条件。不要只删掉一个模块后直接重启,先保存当前配置,修改后用服务状态和抽样日志确认。

用文件大小与来源字段确认是否真的重复

看到两条相同文本,不足以证明有两套持久化副本。它可能是同一文件被两个输入模块重复写入,也可能是 journald 的一份二进制日志加 rsyslog 的一份文本日志,还可能只是远端汇聚系统再次展示了本机消息。

建议按三个层次确认:第一,用 journalctl --disk-usage 记录 journal 占用,用 du -sh /var/log/messages /var/log 2>/dev/null 观察 rsyslog 文件;第二,从同一时间段抽取几条消息,比较时间戳、主机名、SYSLOG_IDENTIFIER 和优先级;第三,暂时停用一个输入路径或收窄一条规则,再观察单个测试窗口内的计数变化。

修复后的验收标准很具体:目标消息只从一个预期入口进入 rsyslog;需要长期保存的落点数量与设计一致;重启后仍能查到的记录来自明确的持久化目录;远端转发则在接收端单独核对。rsyslog 的可靠转发还可能遵循 at-least-once 语义,网络中断后的重复发送要与本机双入口问题分开处理。

相关问答

只开启 rsyslog 就会关闭 journald 吗?

不会。两个服务可以同时运行,是否保留 journal 由 Storage 与实际目录决定,是否转发给 rsyslog 则由 ForwardToSyslog 或 rsyslog 的输入模块决定。

imjournal 和 imuxsock 应该二选一吗?

不是绝对二选一,但同一消息源同时走两者时要有明确过滤和去重设计。只需要传统 syslog 消息时,优先评估 imuxsock;需要 journal 结构化字段时,再保留 imjournal 并关闭重复入口。

Storage=volatile 能解决磁盘日志重复吗?

只能减少 journald 的持久化副本,不能阻止 rsyslog 的 omfile 写文件,也不能解决两个输入模块把同一消息处理两次。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Python packaging 26.2 的 pylock.toml 怎么接入:锁文件选择、环境复现与旧 pip 边界Python packaging 26.2 的 pylock.toml 怎么接入:锁文件选择、环境复现与旧 pip 边界
上一篇
Python packaging 26.2 的 pylock.toml 怎么接入:锁文件选择、环境复现与旧 pip 边界
Go slices.Collect 为什么会改变内存预期:迭代器消费与结果切片边界
下一篇
Go slices.Collect 为什么会改变内存预期:迭代器消费与结果切片边界
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    120次使用
  • C-Eval中文评测基准:大语言模型多学科能力评估指南
    C-Eval
    深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
    40次使用
  • Google AI提示词库:免费官方Prompt模板与使用指南
    Google AI提示词库
    探索Google Cloud官方生成式AI提示词库,提供免费、无需登录的中英双语Prompt模板。涵盖内容创作、代码优化、数据分析等场景,助您快速提升AI交互效率与质量。
    16次使用
  • Gradio是什么?Python开源库快速构建机器学习Web演示界面
    Gradio
    Gradio是一个用于构建机器学习和数据科学Web应用的开源Python库。支持快速创建交互界面,获Google、Meta等大厂青睐,适合模型演示、部署反馈及调试。
    119次使用
  • AgentGPT是什么?开源自主AI代理工具详解与本地部署指南
    AgentGPT
    深入了解AgentGPT:一款基于浏览器的自主人工智能代理工具。本文解析其核心功能、技术栈、应用场景,并提供详细的在线使用及本地部署教程,助您高效利用AI自动化完成任务。
    15次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码