Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filebeat可以将JSON字段而不是整个JSON对象解析为kibana吗?_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash_Kibana_Filebeat - Fatal编程技术网 elasticsearch,logstash,kibana,filebeat,Json,elasticsearch,Logstash,Kibana,Filebeat" /> elasticsearch,logstash,kibana,filebeat,Json,elasticsearch,Logstash,Kibana,Filebeat" />

Filebeat可以将JSON字段而不是整个JSON对象解析为kibana吗?

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

我能够在Kibana中获得一个JSON对象:

通过将其保存在filebeat.yml文件中:

output.elasticsearch:
  hosts: ["localhost:9200"]
如何获取JSON字符串中的各个元素。因此,如果我想比较所有JSON对象的所有“伪范围”字段。我将如何:

  • 从我的所有JSON消息中选择“pseudorange”字段以进行比较
  • 在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>
        }
      }
    }
    
    “@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