Fluent-bit - 将 json 日志拆分为 Elasticsearch 中的结构化字段
Fluent-bit - Splitting json log into structured fields in Elasticsearch
我正在尝试在 Fluent-bit 配置中找到一种方法 tell/enforce ES 来存储纯 json 格式的日志(log 下面的位以结构化方式来自 docker stdout/stderror) - 请查看底部的图片以获得更好的解释。例如,除了(或连同)将日志存储为 log
字段下的普通 json 条目之外,我想单独存储每个 属性,如 所示红色.
过滤器和解析器的文档真的很差而且不清楚。除此之外,forward
输入没有 "parser" 选项。我尝试了 json/docker/regex
个解析器,但没有成功。如果我必须使用正则表达式,我的正则表达式是 here。目前使用 ES (7.1)、Fluent-bit (1.1.3) 和 Kibana (7.1) - 不是 Kubernetes。
如果有人能指导我举个例子或提供一个例子,我将不胜感激。
谢谢
{
"_index": "hello",
"_type": "logs",
"_id": "T631e2sBChSKEuJw-HO4",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2019-06-21T21:34:02.000Z",
"tag": "php",
"container_id": "53154cf4d4e8d7ecf31bdb6bc4a25fdf2f37156edc6b859ba0ddfa9c0ab1715b",
"container_name": "/hello_php_1",
"source": "stderr",
"log": "{\"time_local\":\"2019-06-21T21:34:02+0000\",\"client_ip\":\"-\",\"remote_addr\":\"192.168.192.3\",\"remote_user\":\"\",\"request\":\"GET / HTTP/1.1\",\"status\":\"200\",\"body_bytes_sent\":\"0\",\"request_time\":\"0.001\",\"http_referrer\":\"-\",\"http_user_agent\":\"curl/7.38.0\",\"request_id\":\"91835d61520d289952b7e9b8f658e64f\"}"
},
"fields": {
"@timestamp": [
"2019-06-21T21:34:02.000Z"
]
},
"sort": [
1561152842000
]
}
谢谢
conf
[SERVICE]
Flush 5
Daemon Off
Log_Level debug
Parsers_File parsers.conf
[INPUT]
Name forward
Listen 0.0.0.0
Port 24224
[OUTPUT]
Name es
Match hello_*
Host elasticsearch
Port 9200
Index hello
Type logs
Include_Tag_Key On
Tag_Key tag
您可以为此目的使用 Fluent Bit Nest 过滤器,请参阅以下文档:
解决方法如下
[SERVICE]
Flush 5
Daemon Off
Log_Level debug
Parsers_File parsers.conf
[INPUT]
Name forward
storage.type filesystem
Listen my_fluent_bit_service
Port 24224
[FILTER]
Name parser
Parser docker
Match hello_*
Key_Name log
Reserve_Data On
Preserve_Key On
[OUTPUT]
Name es
Host my_elasticsearch_service
Port 9200
Match hello_*
Index hello
Type logs
Include_Tag_Key On
Tag_Key tag
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
# Command | Decoder | Field | Optional Action
# =============|==================|=================
Decode_Field_As escaped_utf8 log do_next
Decode_Field_As json log
我正在尝试在 Fluent-bit 配置中找到一种方法 tell/enforce ES 来存储纯 json 格式的日志(log 下面的位以结构化方式来自 docker stdout/stderror) - 请查看底部的图片以获得更好的解释。例如,除了(或连同)将日志存储为 log
字段下的普通 json 条目之外,我想单独存储每个 属性,如 所示红色.
过滤器和解析器的文档真的很差而且不清楚。除此之外,forward
输入没有 "parser" 选项。我尝试了 json/docker/regex
个解析器,但没有成功。如果我必须使用正则表达式,我的正则表达式是 here。目前使用 ES (7.1)、Fluent-bit (1.1.3) 和 Kibana (7.1) - 不是 Kubernetes。
如果有人能指导我举个例子或提供一个例子,我将不胜感激。
谢谢
{
"_index": "hello",
"_type": "logs",
"_id": "T631e2sBChSKEuJw-HO4",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2019-06-21T21:34:02.000Z",
"tag": "php",
"container_id": "53154cf4d4e8d7ecf31bdb6bc4a25fdf2f37156edc6b859ba0ddfa9c0ab1715b",
"container_name": "/hello_php_1",
"source": "stderr",
"log": "{\"time_local\":\"2019-06-21T21:34:02+0000\",\"client_ip\":\"-\",\"remote_addr\":\"192.168.192.3\",\"remote_user\":\"\",\"request\":\"GET / HTTP/1.1\",\"status\":\"200\",\"body_bytes_sent\":\"0\",\"request_time\":\"0.001\",\"http_referrer\":\"-\",\"http_user_agent\":\"curl/7.38.0\",\"request_id\":\"91835d61520d289952b7e9b8f658e64f\"}"
},
"fields": {
"@timestamp": [
"2019-06-21T21:34:02.000Z"
]
},
"sort": [
1561152842000
]
}
谢谢
conf
[SERVICE]
Flush 5
Daemon Off
Log_Level debug
Parsers_File parsers.conf
[INPUT]
Name forward
Listen 0.0.0.0
Port 24224
[OUTPUT]
Name es
Match hello_*
Host elasticsearch
Port 9200
Index hello
Type logs
Include_Tag_Key On
Tag_Key tag
您可以为此目的使用 Fluent Bit Nest 过滤器,请参阅以下文档:
解决方法如下
[SERVICE]
Flush 5
Daemon Off
Log_Level debug
Parsers_File parsers.conf
[INPUT]
Name forward
storage.type filesystem
Listen my_fluent_bit_service
Port 24224
[FILTER]
Name parser
Parser docker
Match hello_*
Key_Name log
Reserve_Data On
Preserve_Key On
[OUTPUT]
Name es
Host my_elasticsearch_service
Port 9200
Match hello_*
Index hello
Type logs
Include_Tag_Key On
Tag_Key tag
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
# Command | Decoder | Field | Optional Action
# =============|==================|=================
Decode_Field_As escaped_utf8 log do_next
Decode_Field_As json log