【问题标题】:rsyslog sending badly encoded (corrupted?) data via tcp (receiving using logstash)rsyslog 通过 tcp 发送编码错误(损坏?)的数据(使用 logstash 接收)
【发布时间】:2014-08-20 20:10:22
【问题描述】:

我的 rsyslog 在本地正确记录,但是我也想远程接收日志,所以我添加了规则:

*.* @@myIP:5141

到我的 rsyslog.conf 结尾

为了接收输出,我正在使用配置运行 logstash

input { tcp { port => 5141 } }
output { stdout {} }

Logstash 需要 UTF-8 编码,但我得到了错误

收到一个与您配置的字符编码不同的事件

消息本身似乎是乱码,或者是混合编码,例如:

\u0016\u0003\u0002\u0000V\u0001\u0000\u0000R\u0003\u0002S\xB1R\xAB5K\xF6\\\xB9\xB2\xB4\xB1\xAE0\t\u007F\xDF`5\xF6\ u0015\xC8)H\xD7H\xCF+&\xD5T5\u0000\u0000$\u00003\u0000E\u00009\u0000\x88\u0000\u0016\u00002\u0000D\u00008\u0000\x87\u0000\u00003f /\u0000A\u00005\u0000\x84\u0000

请注意,有些条目是 \u00,而另一些是 \x。甚至还有多个反斜杠。

我想知道我是否以某种方式弄乱了设置,或者我和服务器之间是否有什么东西弄乱了消息?

我也尝试过使用 syslog logstash 输入,结果相同

另一个例子:

\u0016\u0003\u0002\u0000V\u0001\u0000\u0000R\u0003\u0002S\xB1RiZ^\xC3\xD9\u001Cj\a\xD4\xE0\xECr\x8E\xAC\xF5\u001A\xB9+\u07B9 \xE5\xF9\xA3''z\u0018}9\u0000\u0000$\u00003\u0000E\u00009\u0000\x88\u0000\u0016\u00002\u0000D\u00008\u0000\x87\u0000\u00000\u00000 /\u0000A\u00005\u0000\x84\u0000

编辑: 我找到了问题的根源,它与加密有关。不幸的是,我无法透露我做了什么来解决它,我只想说 John Petrone 下面的回答是未来读者可能遇到的类似问题的良好开端

【问题讨论】:

  • 您使用的是什么版本的 Logstash?
  • 我目前使用的是 1.4.2
  • 糟糕,错过了 5 分钟的编辑窗口。忘了提我正在使用 rsyslog 7.2.4
  • 我遇到了完全相同的问题。请给我一些提示,了解发生了什么...我的头因整天撞墙而受伤。

标签: encoding logstash rsyslog


【解决方案1】:

所以你得到的那个看起来像损坏编码的魔法字符串实际上是 SSL 握手请求。

我怀疑你所做的是(就像我刚才所做的那样)错误配置了 logstash 中的 tcp 输入。具体来说,我忘了添加ssl_enable => true。所以它正在监听正常的 TCP 并获得 SSL 握手并尽职尽责地将其记录为垃圾。

【讨论】:

    【解决方案2】:

    问题是您正在摄取的系统日志源正在以非 UTF-8 格式发送数据,这会导致 Logstash 出现问题,正如它所期望的那样。你基本上有 3 个行动方案:

    1. 让 Rsyslog 为您更正此问题:使用 Rsyslog mmutf8fix 模块 修复无效的 UTF-8 序列。 http://www.rsyslog.com/doc/mmutf8fix.html

    2. 更改 Logstash 以使用更合适的字符集:您可以更改 普通编解码器的默认字符集: http://logstash.net/docs/1.4.2/codecs/plain 。您将需要 尝试一下,我会在这里检查一个起点。 https://logstash.jira.com/browse/LOGSTASH-1047

    3. 将源更改为输出 UTF-8:不知道源是 由 Rsyslog 收集我无法评论它需要做什么 这种变化。

    我会从选项 1 开始,如果这不起作用,请转到选项 2。

    【讨论】:

    • 感谢您的输入,1。(自:7.5.4 以来可用)看起来很有希望,但我在遥控器上停留在 7.2.4 版本。升级它已经在书上很久了,所以我现在可能就这样做了。 2. 如果我知道会发生什么,那么更改字符集将是完美的,但我将四处玩耍,看看会发生什么。 3. 查看 rsyslog 输出的文件的编码(使用 file -bi),它们都声称是 utf-8。所以我不确定这是否是 rsyslog 在写入文件之前所做的转换,或者它是否指示源
    • 我刚刚想到,rsyslog 是否有可能试图以某种方式加密流量,而我却误解了它?
    • 似乎更有可能是编码问题
    • 我会接受这个答案,因为它对未来的读者来说是最好的做法,尽管它不能解决我的具体错误
    【解决方案3】:

    基于@docwhat 的回答。

    nano logstash/pipeline/logstash.conf
    # Or
    nano /path/to/logstash.conf
    input {
     beats {
          port => 5000
          ssl => false
     }
      #tcp {
      #   port => 5000
      #}
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-25
      • 2012-03-10
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多