rsyslog通过tcp发送编码错误(损坏?)的数据(使用logstash接收)

时间:2014-06-30 12:40:30

标签: encoding logstash rsyslog

我的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 \吨\ 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的\ u0013 \ u0000f \ u0000的/ \ u0000A \ u00005 \ u0000的\ X84 \ u0000的

注意某些条目是\ u00,而其他条目是\ x。甚至有多个反斜杠。

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

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

另一个例子:

  

\ u0016 \ U0003 \ U0002 \ u0000V \ U0001 \ u0000的\ u0000R \ U0003 \ u0002S \ xB1RiZ ^ \ XC3 \ xD9 \ u001Cj \一个\ 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的\ u0013 \ u0000f符\ u0000 / \ u0000A \ u00005 \ u0000的\ X84 \ u0000的

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

3 个答案:

答案 0 :(得分:3)

因此,您回复看起来就像破碎的编码一样的魔术字符串实际上是SSL握手请求。

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

答案 1 :(得分:1)

问题是您正在摄取的系统日志源是以非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收集我无法评论它需要做什么 这种变化。

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

答案 2 :(得分:0)

基于@docwhat答案。

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