Red*_*ssi 5 parsing json fluent-bit
我有以下日志
{
"log": {
"header": {
"key": "value",
"nested": "{\"key1\":\"value\",\"key2\":\"value\"}",
"dateTime": "2019-05-08T20:58:06+00:00"
},
"body": {
"path": "/request/path/",
"method": "POST",
"ua": "curl/7.54.0",
"resp": 200
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Fluentbit 聚合日志,并且希望整个记录为 JSON。具体问题是“log.header.nested”字段,它是一个 JSON 字符串。如何解析该字符串并将其替换为其内容?
我尝试使用Fluentbit的解析器过滤器。但我有一个问题,key_name它不能很好地处理嵌套的 json 值。我尝试使用非嵌套字段在本地测试它,并且以下配置有效:
[INPUT]
name tail
path nst.log
read_from_head true
Parser json
[FILTER]
name parser
Match *
Parser json
key_name log
Reserve_Data On
[FILTER]
name parser
Match *
Parser json
key_name nested
Reserve_Data On
[OUTPUT]
name stdout
match *
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用此过滤器来过滤嵌套值时:
[FILTER]
name parser
Match *
Parser json
key_name log.header.nested
Reserve_Data On
Run Code Online (Sandbox Code Playgroud)
它不起作用,Fluentbit 文档中没有任何关于如何在key_name文件中使用嵌套键的内容。所以我尝试:
log.header.nestedlog_header_nestlog['header']['nest']log[header][nest]为了清楚起见,我希望 Fluentbit 输出的日志如下所示:
[INPUT]
name tail
path nst.log
read_from_head true
Parser json
[FILTER]
name parser
Match *
Parser json
key_name log
Reserve_Data On
[FILTER]
name parser
Match *
Parser json
key_name nested
Reserve_Data On
[OUTPUT]
name stdout
match *
Run Code Online (Sandbox Code Playgroud)
您可以尝试将 Nest 过滤器插件与 Parser 过滤器插件结合起来。例如,我设法使用以下配置在第一级解析嵌套 json:
[FILTER]
Name nest
Match application.*
Operation lift
Nested_under log_processed
Add_prefix log_
Wildcard message
[FILTER]
Name parser
Match application.*
Key_Name log_message
Parser docker
Preserve_Key On
Reserve_Data On
Run Code Online (Sandbox Code Playgroud)
在两个过滤器之前的消息是:
{
"time": "2022-05-10T19:43:04.655207298Z",
"stream": "stdout",
"_p": "F",
"log": "{\"timestamp\":\"2022-05-10 19:43:04.654\",\"level\":\"DEBUG\",\"nested\":"{\"key1\":\"value\",\"key2\":\"value\"}",\"context\":\"default\"}",
"log_processed": {
"timestamp": "2022-05-10 19:43:04.654",
"level": "DEBUG",
"message": "{\"key1\":\"value\",\"key2\":\"value\"}",
"context": "default"
}
}
Run Code Online (Sandbox Code Playgroud)
经过两个过滤器后,一级嵌套 json 被解析为:
{
"time": "2022-05-10T19:43:04.655207298Z",
"stream": "stdout",
"_p": "F",
"log": "{\"timestamp\":\"2022-05-10 19:43:04.654\",\"level\":\"DEBUG\",\"nested\":"{\"key1\":\"value\",\"key2\":\"value\"}",\"context\":\"default\"}",
"log_processed": {
"timestamp": "2022-05-10 19:43:04.654",
"level": "DEBUG",
"message": "{\"key1\":\"value\",\"key2\":\"value\"}",
"context": "default"
},
log_message: "{\"key1\":\"value\",\"key2\":\"value\"}".
"key1" : "value",
"key2" : "value"
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试多次应用带有电梯操作的 Nest 插件。
| 归档时间: |
|
| 查看次数: |
6697 次 |
| 最近记录: |