Filebeat 能否将 JSON 字段而不是整个 JSON 对象解析到 kibana 中?
Can Filebeat parse JSON fields instead of the whole JSON object into kibana?
我能够在 Kibana 中获得一个 JSON 对象:
通过在 filebeat.yml 文件中添加:
output.elasticsearch:
hosts: ["localhost:9200"]
如何获取 JSON 字符串中的各个元素。所以说如果我想比较我所有 JSON 对象的所有“伪范围”字段。我会怎样:
- Select 我所有 JSON 消息中的“伪范围”字段以比较它们。
- 在 kibana 中直观地比较它们。目前我什至找不到消息,更不用说可视化选项卡中的各个字段了...
我听说有人使用 logstash 以某种方式解析字符串,但是没有办法仅使用 filebeat 来完成此操作吗?如果没有,那么我如何使用 logstash 来帮助过滤 json 中的各个字段,而不是让我的消息只是一个我无法与之交互的大 json 字符串?
我从 output.console 得到以下输出,注意我在 <> 中放置了一些信息以隐藏它:
"@timestamp": "2021-03-23T09:37:21.941Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.8.14",
"truncated": false
},
"message": "{\n\t\"Signal_data\" : \n\t{\n\t\t\"antenna type:\" : \"GPS\",\n\t\t\"frequency type:\" : \"GPS\",\n\t\t\"position x:\" : 0.0,\n\t\t\"position y:\" : 0.0,\n\t\t\"position z:\" : 0.0,\n\t\t\"pseudorange:\" : 20280317.359730639,\n\t\t\"pseudorange_error:\" : 0.0,\n\t\t\"pseudorange_rate:\" : -152.02620448094211,\n\t\t\"svid\" : 18\n\t}\n}\u0000",
"source": <ip address>,
"log": {
"source": {
"address": <ip address>
}
},
"input": {
"type": "udp"
},
"prospector": {
"type": "udp"
},
"beat": {
"name": <ip address>,
"hostname": "ip-<ip address>",
"version": "6.8.14"
},
"host": {
"name": "ip-<ip address>",
"os": {
<ubuntu info>
},
"id": <id>,
"containerized": false,
"architecture": "x86_64"
},
"meta": {
"cloud": {
<cloud info>
}
}
}
在 Filebeat 中,您可以利用 decode_json_fields
processor 来解码 JSON 字符串并将解码后的字段添加到根对象中:
processors:
- decode_json_fields:
fields: ["message"]
process_array: false
max_depth: 2
target: ""
overwrite_keys: true
add_error_key: false
这要归功于 Val。然而,他的回答奏效了,因为他建议我的 JSON 字符串末尾有一个 \000,这会阻止它成为 JSON 并阻止 decode_json_fields 处理器正常工作...
升级到 Filebeat 的 7.12 版本(同时确保 Elasticsearch 和 Kibana 的版本为 7.12,因为它们之间的版本不匹配会导致问题)允许我们使用 脚本处理器:https://www.elastic.co/guide/en/beats/filebeat/current/processor-script.html.
再次感谢 Val,此脚本删除了空终止符:
- script:
lang: javascript
id: trim
source: >
function process(event) {
event.Put("message", event.Get("message").trim());
}
删除空终止符后,decode_json_fields 处理器按照 Val 的建议完成工作,我能够提取 JSON 字段的各个元素,这允许 Kibana 可视化查看元素我想要!
我能够在 Kibana 中获得一个 JSON 对象:
通过在 filebeat.yml 文件中添加:
output.elasticsearch:
hosts: ["localhost:9200"]
如何获取 JSON 字符串中的各个元素。所以说如果我想比较我所有 JSON 对象的所有“伪范围”字段。我会怎样:
- Select 我所有 JSON 消息中的“伪范围”字段以比较它们。
- 在 kibana 中直观地比较它们。目前我什至找不到消息,更不用说可视化选项卡中的各个字段了...
我听说有人使用 logstash 以某种方式解析字符串,但是没有办法仅使用 filebeat 来完成此操作吗?如果没有,那么我如何使用 logstash 来帮助过滤 json 中的各个字段,而不是让我的消息只是一个我无法与之交互的大 json 字符串?
我从 output.console 得到以下输出,注意我在 <> 中放置了一些信息以隐藏它:
"@timestamp": "2021-03-23T09:37:21.941Z",
"@metadata": {
"beat": "filebeat",
"type": "doc",
"version": "6.8.14",
"truncated": false
},
"message": "{\n\t\"Signal_data\" : \n\t{\n\t\t\"antenna type:\" : \"GPS\",\n\t\t\"frequency type:\" : \"GPS\",\n\t\t\"position x:\" : 0.0,\n\t\t\"position y:\" : 0.0,\n\t\t\"position z:\" : 0.0,\n\t\t\"pseudorange:\" : 20280317.359730639,\n\t\t\"pseudorange_error:\" : 0.0,\n\t\t\"pseudorange_rate:\" : -152.02620448094211,\n\t\t\"svid\" : 18\n\t}\n}\u0000",
"source": <ip address>,
"log": {
"source": {
"address": <ip address>
}
},
"input": {
"type": "udp"
},
"prospector": {
"type": "udp"
},
"beat": {
"name": <ip address>,
"hostname": "ip-<ip address>",
"version": "6.8.14"
},
"host": {
"name": "ip-<ip address>",
"os": {
<ubuntu info>
},
"id": <id>,
"containerized": false,
"architecture": "x86_64"
},
"meta": {
"cloud": {
<cloud info>
}
}
}
在 Filebeat 中,您可以利用 decode_json_fields
processor 来解码 JSON 字符串并将解码后的字段添加到根对象中:
processors:
- decode_json_fields:
fields: ["message"]
process_array: false
max_depth: 2
target: ""
overwrite_keys: true
add_error_key: false
这要归功于 Val。然而,他的回答奏效了,因为他建议我的 JSON 字符串末尾有一个 \000,这会阻止它成为 JSON 并阻止 decode_json_fields 处理器正常工作...
升级到 Filebeat 的 7.12 版本(同时确保 Elasticsearch 和 Kibana 的版本为 7.12,因为它们之间的版本不匹配会导致问题)允许我们使用 脚本处理器:https://www.elastic.co/guide/en/beats/filebeat/current/processor-script.html.
再次感谢 Val,此脚本删除了空终止符:
- script:
lang: javascript
id: trim
source: >
function process(event) {
event.Put("message", event.Get("message").trim());
}
删除空终止符后,decode_json_fields 处理器按照 Val 的建议完成工作,我能够提取 JSON 字段的各个元素,这允许 Kibana 可视化查看元素我想要!