如何使用 fluentd 解析来自 syslog 的 JSON 数据?

How to parse JSON data from syslog with fluentd?

我的自定义 rsyslog 模板:

template(name="outfmt" type="list" option.jsonf="on") {
         property(outname="@timestamp"
                  name="timereported" 
                  dateFormat="rfc3339" format="jsonf")
         property(outname="host"
                  name="hostname" format="jsonf")
         property(outname="severity"
                  name="syslogseverity-text" caseConversion="upper" format="jsonf")
         property(outname="facility"
                  name="syslogfacility-text" format="jsonf")
         property(outname="syslog-tag"
                  name="syslogtag" format="jsonf")
         property(outname="source"
                  name="app-name" format="jsonf")
         property(outname="message"
                  name="msg" format="jsonf")

     }

我的 rsyslog 示例输出:

{
  "@timestamp": "2018-03-01T01:00:00+00:00",
  "host": "172.20.245.8",
  "severity": "DEBUG",
  "facility": "local4",
  "syslog-tag": "app[1666]",
  "source": "app",
  "message": " this is my syslog message"
}

如何使用 fluentd 解析此日志并发送到 elasticsearch?

您可以通过 syslog plugin 直接在 elasticsearch 中接收日志(甚至不必将它们格式化为 json)。这可能是解决您问题的最直接的方法。

如果出于某种原因您需要使用某种日志聚合器,我个人不会推荐 fluentd,因为它可以带来不必要的复杂性。

但是你可以使用 elasticsearch 支持的 logstash,你可以找到很多关于它的 documentation