Logstash - 更改字符集 - 收到的字符编码与您配置的字符编码不同

时间:2016-03-02 21:13:16

标签: logstash logstash-configuration elastic-stack logstash-forwarder

我有ELK堆栈(使用logstash-forwarder)设置,它似乎适用于JBoss日志。我发现我无法在奇怪的工作服务器上获得其他日志。我检查了/var/log/logstash/logstash.log,它包含以下错误:

{:timestamp=>"2016-03-02T16:02:25.232000-0500", :message=>"Received an event that has a different character encoding than you configured.", :text=>"\\tat company.core.controller.flat.FlatApplicationController.\\xFB(FlatApplicationController.java:3242)", :expected_charset=>"UTF-8", :level=>:warn}

在线阅读,似乎我必须指定我的日志文件正在使用的字符集。我检查了WebSphere的默认值为en-is ISO-8859。我无法将其应用于我的配置。

我使用了以下指南 - https://gist.github.com/ashrithr/c5c03950ef631ac63c43

我尝试将“charset =>”ISO-8859-1“”添加到/etc/logstash/conf.d/01-lumberjack-input.conf文件中:

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
    charset => "ISO-8859-1"
  }
}

这似乎不起作用,因为我得到了同样的错误。

有人可以提供有关如何正确设置字符集的说明吗?

2 个答案:

答案 0 :(得分:1)

如果你在同一个端口上运行像lumberjack这样的tcp输入和一个udp输入(比如gelf),你将收到一个错误"收到一个具有不同字符编码的事件......&#34 ;

这是由于udp输入尝试解释tcp握​​手数据包。除非您在不同的端口上运行输入侦听器,否则它将失败。

这将有效:

input {
  lumberjack {
    port => "5001"
    ssl_certificate => "/some/path/cert"
    ssl_key => "/some/path/cert.key"
             }

  gelf       {
    port => "5000"
             }
}

这会给你一个编码错误:

input {
      lumberjack {
        port => "5000"
        ssl_certificate => "/some/path/cert"
        ssl_key => "/some/path/cert.key"
                 }

      gelf       {
        port => "5000"
                 }
}

答案 1 :(得分:0)

我认为你必须使用纯文本选项,你可以在那里更改字符集。

$string = 'The quick brown fox jumps over the lazy dog';
$find_me = 'dog';

preg_replace('/'. $find_me .'$/', '', $string);