【问题标题】:Rsyslog imudp splits message containing colonRsyslog imudp 拆分包含冒号的消息
【发布时间】:2019-08-21 23:40:38
【问题描述】:

我们无法通过 imudp 向 rsyslog 发送消息。我们的消息包含一个冒号(“:”),但 imudp 似乎使用它作为分隔符。

我们可以禁用分隔符,以便将整个消息读入单个字段吗?

如果这不是因为 imudp,有人可以指出实际问题出在哪里吗?是不是模板构造有问题?

输入
echo "deploys.test.myservice:4|c" | nc -w0 -u localhost 12345

RSYSLOG 模板
template(name="json_lines" type="list" option.json="on") { constant(value="{ \"timestamp\":\"") property(name="timestamp" dateFormat="rfc3339") constant(value="\",\"message\":\"") property(name="msg") constant(value="\",\"host\":\"") property(name="hostname") constant(value="\",\"type\":\"") property(name="syslogtag") constant(value="\"}") }

输出
{ "timestamp":"2016-11-22T16:15:15.773754+05:30", "message":"4|c", "host":"localhost", "type":"deploys.test.myservice:" }

提前致谢!

【问题讨论】:

    标签: json rsyslog


    【解决方案1】:

    免责声明:我仍在积极学习 rsyslog 的来龙去脉

    如果您想接受未经任何处理的原始消息,请查看pmnull module

    来自documentation的示例:

    module(load="imtcp")
    module(load="pmnull")
    
    input(type="imtcp" port="13514" ruleset="ruleset")
    parser(name="custom.pmnull" type="pmnull")
    
    ruleset(name="ruleset" parser="custom.pmnull") {
          action(type="omfile" file="rsyslog.out.log")
    }
    

    大概您可以像此处显示的 TCP 输入一样设置 UDP 输入。

    【讨论】:

    • 感谢@deoren 的回答,看起来它会做我想要的,但此时我无法检查它,因为它太长了而且我没有方便的设置。一旦我找到一个空闲的周末,我会试一试。
    • 不客气。如果您在实施更改时遇到问题,mailing listforums 以及此处的 StackExchange 站点都是很好的资源。
    【解决方案2】:

    另一种选择是在模板中使用“rawmsg”而不是“msg”。这是一个更简单的尝试路径。

    我无法使用“pmnull”选项,因为 rsyslog 失败并出现以下错误 (more info):

    rsyslogd:无法加载模块“/usr/lib64/rsyslog/pmnull.so”,dlopen:/usr/lib64/rsyslog/pmnull.so:无法打开共享对象文件:没有这样的文件或目录 [v8.36.0试试http://www.rsyslog.com/e/2066]

    【讨论】:

      猜你喜欢
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多