You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将systemd-journald属性捕获到rsyslog文件中?

问题原因及解决方向

以下是导致自定义journal属性丢失的常见原因及对应解决方法:

1. imjournal 默认仅提取基础字段

imjournal模块默认不会同步journald的所有字段,只导入预设的基础字段集合。自定义字段(如MEAS_VAL)不在默认列表中,需要显式配置要包含的字段。

解决方法:

  • 在rsyslog配置文件中添加$imjournalFields指令,指定需要同步的字段,例如:
    module(load="imjournal")
    $imjournalFields _SYSTEMD_UNIT, _PID, MESSAGE, MEAS_VAL
    
    或者使用更灵活的配置包含所有字段:
    $imjournalFieldFilter *
    

2. rsyslog 输出模板未包含自定义字段

即使rsyslog已经捕获到MEAS_VAL,如果输出日志的模板没有引用该字段,最终日志文件也不会显示它。

解决方法:

  • 检查并修改rsyslog的输出模板,确保包含自定义字段。例如,使用JSON格式输出的模板可以这样写:
    template(name="CustomJournalFormat" type="list") {
      constant(value="{")
      constant(value="\"timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"message\":\"") property(name="msg")
      constant(value="\",\"meas_val\":\"") property(name="MEAS_VAL")
      constant(value="\"}\n")
    }
    
    然后将该模板应用到输出规则中:
    action(type="omfile" file="/var/log/custom.log" template="CustomJournalFormat")
    

3. mmjsonparse 模块的解析过滤

如果配置了mmjsonparse,可能存在过滤规则或解析逻辑导致自定义字段被丢弃。需要确认mmjsonparse的配置是否保留了所有需要的字段。

解决方法:

  • 检查mmjsonparse的配置,确保没有设置exclude规则过滤MEAS_VAL,或者使用include规则明确包含该字段。例如:
    module(load="mmjsonparse")
    action(type="mmjsonparse" include="MEAS_VAL")
    

4. Docker容器内的systemd/journald 权限/通信限制

虽然journalctl能看到字段,但Docker容器内的rsyslog进程可能没有足够权限读取journald的完整字段,或者journald在容器内的运行模式限制了字段导出。

解决方法:

  • 确保容器运行时挂载了journald的套接字路径,例如启动容器时添加参数:
    docker run -v /run/systemd/journal/socket:/run/systemd/journal/socket ...
    
  • 确认容器内的rsyslog进程以足够权限运行(比如root用户),避免因权限不足无法读取完整journal数据。

内容的提问来源于stack exchange,提问作者woodz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:50:33