使用 cisco syslog 的 Logstash 字符编码

Logstash character encoding with cisco syslog

我已经在服务器上设置了一个 ELK 堆栈。我配置了 logstash 和其他东西,并将 syslog 测试消息发送到 logstash。一切正常。

现在我尝试将 syslog 消息从 Cisco WLC 和 Cisco 交换机发送到 logstash,消息编码似乎有误。

在 logstash 日志文件中,我看到以下条目(我删除了消息)

[2018-01-09T16:04:24,603][WARN ][logstash.codecs.plain ] 收到的事件的字符编码与您配置的不同。 {:text=>"0\x82\u0002B\u0002\u0001\u0001\u000...[出于安全目的删除],:expected_charset=>"UTF-8"}

我的 logstash 配置文件的输入如下:

input {
  udp {
    port => 514
    type => syslog
    codec => plain {
     charset => "ISO-8859-1"
    }
  }
}

filter {
  if [type] == "syslog" {
    grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
     add_field => [ "received_at", "%{@timestamp}" ]
     add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}


output {
  elasticsearch {
  hosts => ["localhost:9200"]
  }
}

我已经尝试在输入中尝试使用编解码器,但没有成功。我做错了什么?

我也有类似的问题。我在输入配置中有一个默认的 "tcp" 模式。我将其替换为 "beats"(因为我使用 filebeat 将日志发送到 logstash),问题已解决。

Logstash 仅支持 RFC3164 syslog 消息,而 Cisco 仅支持 RFC5424。 所以你需要找到一种方法将 RFC5424 转换为 RFC3164