所以我看到还有其他一些此类问题,但似乎没有一个可以解决我的问题。
我试图从文件中获取 Springboot 日志,解析出有用的信息,并将结果发送到 Elasticsearch,最终从 Kibana 中读取。我的 fluentd.conf 如下所示:
<source>
type tail
read_from_head true
path /path/to/log/
pos_file /path/to/pos_file
format /^(?<date>[0-9]+-[0-9]+-[0-9]+\s+[0-9]+:[0-9]+:[0-9]+.[0-9]+)\s+(?<log_level>[Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)\s+(?<pid>[0-9]+)\s+---\s+(?<message>.*)$/
tag my.app
</source>
<match my.app>
type stdout
</match>
<match my.app>
type elasticsearch
logstash_format true
host myhosthere
port 9200
index_name fluentd-app
type_name fluentd
</match>
给定一个典型的 Springboot 日志行:
2015-07-16 19:20:04.074 INFO 16649 --- [ main] {springboot message}
通过也写入标准输出作为测试,我看到我的解析器导致:
{
"date":"2015-07-16 19:20:04.074",
"log_level":"INFO",
"pid":"16649",
"message":"[ main] {springboot message}"
}
但是,当它被写入 Elasticsearch 时,所有结果都是:
{
_index: "fluentd-app-2015.07.16",
_type: "fluentd",
_id: "AU6YT5sjvkxiJXWCxeM8",
_score: 1,
_source: {
message: "2015-07-16 19:20:04.074 INFO 16649 --- [ main] {springboot message}",
@timestamp: "2015-07-16T19:20:04+00:00"
}
},
根据我对fluentd-plugin-elasticsearch 的阅读,我希望 _source 包含我在标准输出中看到的所有已解析字段。我也尝试过 grok 解析器——尽管问题显然在于对 fluentd elasticsearch 插件的理解。如何让我解析的字段持久保存到 elasticsearch?