Filebeat可以将JSON字段而不是整个JSON对象解析为kibana吗?
我能够在Kibana中获得一个JSON对象: 通过将其保存在filebeat.yml文件中:Filebeat可以将JSON字段而不是整个JSON对象解析为kibana吗?,json,
elasticsearch,logstash,kibana,filebeat,Json,
elasticsearch,Logstash,Kibana,Filebeat,我能够在Kibana中获得一个JSON对象: 通过将其保存在filebeat.yml文件中: output.elasticsearch: hosts: ["localhost:9200"] 如何获取JSON字符串中的各个元素。因此,如果我想比较所有JSON对象的所有“伪范围”字段。我将如何: 从我的所有JSON消息中选择“pseudorange”字段以进行比较 在kibana中直观地比较它们。目前,我甚至找不到消息,更不用说可视化选项卡中的各个字段了 我听说有人使用l
output.elasticsearch:
hosts: ["localhost:9200"]
如何获取JSON字符串中的各个元素。因此,如果我想比较所有JSON对象的所有“伪范围”字段。我将如何:
"@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>
}
}
}
“@timestamp”:“2021-03-23T09:37:21.941Z”,
“@元数据”:{
“beat”:“filebeat”,
“类型”:“单据”,
“版本”:“6.8.14”,
“截断”:false
},
“消息:“\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t”天线类型:天线类型:“:::“GPS\“GPS\”:“GPS\”,,,\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t“svid\”:18\n\t}\n}\u0000“,
“资料来源”:,
“日志”:{
“来源”:{
“地址”:
}
},
“输入”:{
“类型”:“udp”
},
“探矿者”:{
“类型”:“udp”
},
“节拍”:{
“姓名”:,
“主机名”:“ip-”,
“版本”:“6.8.14”
},
“主持人”:{
“名称”:“ip-”,
“操作系统”:{
},
“id”:,
“集装箱化”:错误,
“体系结构”:“x86_64”
},
“元”:{
“云”:{
}
}
}
在Filebeat中,您可以利用来解码JSON字符串并将解码字段添加到根obejct中:
processors:
- decode_json_fields:
fields: ["message"]
process_array: false
max_depth: 2
target: ""
overwrite_keys: true
add_error_key: false
这要归功于瓦尔。然而,他的回答起了作用,因为他建议我的JSON字符串末尾有一个\000,这会阻止它成为JSON,并阻止解码\u JSON\u字段处理器正常工作 升级到Filebeat的7.12版(同时确保Elasticsearch和Kibana的7.12版,因为它们之间的版本不匹配会导致问题)允许我们使用脚本处理器: 再次感谢Val,此脚本删除了空终止符:
- script:
lang: javascript
id: trim
source: >
function process(event) {
event.Put("message", event.Get("message").trim());
}
删除空终止符后,decode_json_fields处理器按照Val的建议完成了它的工作,我能够提取json字段的各个元素,这使得Kibana可视化可以查看我想要的元素 嗨,谢谢你的回复。我在搜索该主题时确实看到了这一点,但当数据输入Elasticsearch时,在处理器中应用这一点并没有改变任何事情。Kibana仍然将其视为“消息”,这是“信号数据”的整个JSON字符串。您能否共享一个进入Filebeat的示例原始文档?来自windows机器I的JSON字符串流。Filebeat通过UDP输入接收它。“sendTo”sock函数将“Signal_data”字符串流式传输到filebeat,该字符串与我之前在Kibana中显示的“message”中的字符串相同。好的,但我想查看一条原始消息,以了解
解码json_字段
处理器为什么不拾取它。。。您是否可以注释掉您的elasticsearch
输出,并使用output.console
显示一个示例事件?我们需要找到一种方法,在最后修剪\u0000
,因为这是无效的JSON