我是ElasticSearch、Kibana和FileBeat这一行的新手。
我使用decode_json_fields
配置(在filebeat.yml
中,如https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html[1]所述,并在https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html#decode-json-example[2]中提供了一个示例),获得了有关如何让FileBeat将JSON文件摄取到Elasticearch中的信息。
然而,即使按照[2]中提供的例子,我也没有得到预期的结果。我甚至找到了一个旧条目(https://www.elastic.co/blog/structured-logging-filebeat[3]),但没有更好的结果。
这是以下尝试之一(filebeat.yml
):
filebeat.inputs:
- type: filestream
paths:
- c:\tmp\tmf\events-*.ndjson
json.keys_under_root: true
json.add_error_key: true
#json.message_key: event
fields: ["inner"]
output.elasticsearch:
hosts: ["localhost:9200"]
protocol: "https"
username: ...
password: ...
..。这是另一个:
filebeat.inputs:
- type: filestream
paths:
- c:\tmp\tmf\events-*.ndjson
#json.keys_under_root: true
#json.add_error_key: true
#json.message_key: event
#fields: ["inner"]
processors:
- decode_json_fields:
fields: [ "outer", "inner" ]
max_depth: 1
target: ""
add_error_key: true
下面是我的样例JSON日志文件:
{ "outer": "value", "inner": "{"data": "value"}" }
下面是通过http://localhost:5601/app/dev_tools#/console:进行查询时的外观
- 查询:
GET /.ds-filebeat-8.3.2-2022.09.28-000001/_search?_source_excludes=ecs,host,os
{
"query": {
"match": {
"log.file.path": {
"query": """c:tmptmfevents-20220930-11.ndjson"""
}
}
}
}
- 返回的文档(文件内容在
message
字段):
{
"hits": {
"hits": [
{
"_source": {
"input": {
"type": "filestream"
},
"@timestamp": "2022-09-30T23:26:01.087Z",
},
"message": """{ "outer": "value", "inner": "{"data": "value"}" }""",
}
}
]
}
}
无论我如何调整filebeat.yml配置文件,JSON文件都不会被解析。
如有任何帮助,我们不胜感激。
参考资料:
1.https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html
2.https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html#decode-json-example
3.https://www.elastic.co/blog/structured-logging-filebeat
1条答案
按热度按时间1zmg4dgp1#
TLDR;
您没有向
filebeat
提供文件布局的知识。您可能应该为
filebeat
提供parser
。解决方案