elasticsearch 为什么rsyslog无法解析带有json模板的传入系统日志,这些模板通过TCP转发到某个端口(比如10514)?
我当前正在通过elasticsearch 为什么rsyslog无法解析带有json模板的传入系统日志,这些模板通过TCP转发到某个端口(比如10514)?,elasticsearch,logstash,rsyslog,elasticsearch,Logstash,Rsyslog,我当前正在通过rsyslog将传入的syslog转发到local logstash端口。我目前使用的模板位于/etc/rsyslog.d/json template.conf 我的json template.conf内容如下: template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="time
rsyslog
将传入的syslog
转发到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模板
rsyslog
能够将传入的syslog
发送到端口10514,但无法解析来自syslog
的有意义信息
注意:我对UDP
有相同的设置,rsyslog
能够根据json模板解析所有MSG
我使用UDP尝试了相同的rsyslog配置:
在/etc/rsyslog.conf中转发的配置:
*.@127.0.0.1:10514;json模板
并且rsyslog
能够解析来自系统日志的所有内容(时间戳、消息、系统日志主机)
打开tcp端口进行tcp转发和打开udp端口进行udp转发的所有必要配置如下:
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")
}
对于tcp:
sudo firewall cmd--zone=public--add port=10514/tcp
对于udp:
sudo firewall cmd--zone=public--add port=10514/udp
但我唯一无法弄清楚的是,我缺少了什么,即使用TCP转发的w.r.t解析系统日志
预期结果:rsyslog应该能够按照json模板解析syslog我发现了问题。json模板发送json而不是RFC3164或RFC5424格式。 因此,我们必须在logstash配置文件中添加一个过滤器,以按原样转发JSON 我的日志存储配置文件如下所示:
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" ]
}
}
}