我目前正在通过syslogs将传入的rsyslog转发到local logstash端口。我目前正在使用/etc/rsyslog.d/json-template.conf中的以下模板

我的json-template.conf内容如下:

template(name="json-template"
  type="list") {
    constant(value="{")
      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"@version\":\"1")
      constant(value="\",\"message\":\"")     property(name="msg" format="json")
      constant(value="\",\"sysloghost\":\"")  property(name="hostname")
      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
      constant(value="\",\"programname\":\"") property(name="programname")
      constant(value="\",\"procid\":\"")      property(name="procid")
    constant(value="\"}\n")
}

/etc/rsyslog.conf中转发的配置:
*.* @@127.0.0.1:10514;json-templatersyslog能够将传入的syslogs发送到端口10514,但无法解析syslogs中有意义的信息。

注意:我为UDP设置了相同的设置,并且rsyslog能够根据json模板解析所有msg。

我尝试使用UDP配置rsyslog的相同配置:

在/etc/rsyslog.conf中转发的配置:
*.* @127.0.0.1:10514;json-templatersyslog能够解析syslog中的所有内容(时间戳,消息,sysloghost)

打开tcp端口以进行tcp转发和打开udp端口以进行udp转发的所有必要配置,请参见以下内容:

对于TCP:sudo firewall-cmd --zone=public --add-port=10514/tcp
对于udp:sudo firewall-cmd --zone=public --add-port=10514/udp
但是我唯一无法弄清楚的是我缺少使用TCP转发解析syslog的内容。

预期结果:rsyslog应该能够按照json模板解析系统日志

最佳答案

我发现了问题。 json-template发送JSON而不是RFC3164或RFC5424格式。
因此我们必须在logstash配置文件中添加一个过滤器,以按原样转发JSON。

我的logstash配置文件如下所示:

input {
  tcp {
    host => "127.0.0.1"
    port => 10514
    type => "rsyslog"
  }
}
# This is an empty filter block.  You can later add other filters here to further process
# your log lines
filter {
    json {
        source => "message"
    }

  if "_jsonparsefailure" in [tags] {
    drop {}
  }

}
# This output block will send all events of type "rsyslog" to Elasticsearch at the configured
# host and port into daily indices of the pattern, "logstash-YYYY.MM.DD"
output {
  if [type] == "rsyslog" {
    elasticsearch {
      hosts => [ "localhost:9200" ]
    }

  }
}

关于elasticsearch - 为什么rsyslog无法使用通过TCP转发到某个端口的json模板解析传入的syslog(例如10514)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57275158/

10-16 20:41