Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 为什么rsyslog无法解析带有json模板的传入系统日志,这些模板通过TCP转发到某个端口(比如10514)?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash_Rsyslog - Fatal编程技术网 elasticsearch 为什么rsyslog无法解析带有json模板的传入系统日志,这些模板通过TCP转发到某个端口(比如10514)?,elasticsearch,logstash,rsyslog,elasticsearch,Logstash,Rsyslog" /> elasticsearch 为什么rsyslog无法解析带有json模板的传入系统日志,这些模板通过TCP转发到某个端口(比如10514)?,elasticsearch,logstash,rsyslog,elasticsearch,Logstash,Rsyslog" />

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" ]
    }

  }
}