当前位置: 首页 > 面试题库 >

JSON解析器的Logstash输出未发送到elasticsearch

翁烨霖
2023-03-14
问题内容

这是我另一个问题的跟进:Logstash中的JSON解析器忽略数据了吗?
但是这次我觉得问题比上次更清楚了,可能更容易回答。

我正在使用JSON解析器,如下所示:

json #Parse all the JSON
{
    source => "MFD_JSON"
    target => "PARSED"
    add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}

logstash.stdout中一个日志的输出部分看起来像这样:

        "FACILITY_NUM" => "1",
       "LEVEL_NUM" => "7",
         "PROGRAM" => "mfd_status",
       "TIMESTAMP" => "2016-01-12T11:00:44.570Z",
       MORE FIELDS

当我删除JSON代码时,有一堆字段就像上面的字段一样工作。当我添加JSON过滤器时,由于某种原因,整个日志只会从elasticserach /
kibana中消失。JSON过滤器添加的位如下:

"PARSED" => {  
    "platform" => {
               "boot_mode" => [
            [0] 2,
            [1] "NAND"
        ],
                "boot_ver" => [
            [0] 6,
            [1] 1,
            [2] 32576,
            [3] 0
        ],
            WHOLE LOT OF OTHER VARIABLES

               "family_id" => [
            [0] 14,
            [1] "Hatchetfish"
        ],
            A WHOLE LOT MORE VARIABLES
    },
       "flash" => [
        [0] 131072,
        [1] 7634944
    ],
      "can_id" => 1700,
     "version" => {
          "kernel" => "3.0.35 #2 SMP PREEMPT Thu Aug 20 10:40:42 UTC 2015",
        "platform" => "17.0.32576-r1",
         "product" => "next",
             "app" => "53.1.9",
            "boot" => "2013.04 (Aug 20 2015 - 10:33:51)"
    }
},
    "%{FAMILY_ID}" => "Hatchetfish 14"

让我们假装JSON不起作用,现在我可以了,那应该不会与来自Elasticsearch /
kibana的日志有关的其他事情弄乱了。另外,最后我得到了FAMILY_ID作为我使用add_field单独添加的字段。至少应该显示出来,对吗?

如果之前有人看到过这样的东西,那将是很大的帮助。对于两次发送几乎相同的问题也感到抱歉。

样本记录行:

1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2 load {“
up”:[38,1.66,0.40,0.13],“ mem”:[967364,584900,3596,116772],“
cpu”:[1299,812,1791,3157,480,144 ],“ cpu_dvfs”:[996,1589,792,871,396,1320],“
cpu_op”:[996,50]}

样本行将被解析(加载后的所有内容均为JSON),在stdout中,我可以看到它已成功解析,但是在elasticsearch中却看不到它。这是我的输出代码:

elasticsearch 
{ 
hosts => ["localhost:9200"] 
document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }

我的许多logstash过滤器都在另一个问题中,但是我想现在所有相关部分都在这个问题中。


问题答案:

在这里回答我自己的问题。这不是理想的答案,但是如果有人遇到与我类似的问题,可以尝试一下。

json #Parse all the JSON
{
    source => "MFD_JSON"
    target => "PARSED"
    add_field => { "%{FAMILY_ID}" => "%{[PARSED][platform][family_id][1]}_%{[PARSED][platform][family_id][0]}" }
}

这就是我之前解析所有JSON的方式,我一直尝试并希望我能在某个时候得到它。我将只使用grok过滤器来获取所需的位,如果这对您不起作用,则可以选择。后来,我又回到了这个话题,并以为“如果以后删除所有内容,该怎么办”,因为我忘记了一些疯狂的原因。最后,我做到了:

            json
        {
            source => "MFD_JSON"
            target => "PARSED_JSON"
            add_field => { "FAMILY_ID" => "%{[PARSED_JSON][platform][family_id][1]}_%{[PARSED_JSON][platform][family_id][0]}"  }
            remove_field => [ "PARSED_JSON" ]
        }

因此,提取您感兴趣的一个或多个字段,然后最后删除解析器创建的字段。那对我有用。我不知道为什么,但是它也可能对其他人有用。



 类似资料:
  • 问题内容: 当我在Kibana中看到结果时,我发现JSON中没有字段,而且,该字段仅包含。 是否可以解析json中的字段并将其显示在Kibana中?我有以下配置: 以及以下JSON文件: 问题答案: 是。您需要在配置中添加一个过滤器,如下所示。 在这里的文档中对此进行了很好的描述 编辑 json编解码器似乎不喜欢传入数组。单个元素与此配置一起工作: 输入: Logstash结果: } 现在有了一个

  • 问题内容: 我正在尝试使用Logstash将XML转换为ElasticSearch的JSON。我能够读取值并将其发送到ElasticSearch。问题是所有值都以数组形式出现。我想让它们像字符串一样出来。我知道我可以为每个字段分别执行操作,但是随后遇到了一个问题,嵌套字段的深度为3级。 XML格式 Logstash配置 示例输出 如您所见,输出是每个元素的数组(我替换为的locationId除外)

  • 问题内容: 我在配置logstash以输出到AWS EC2上的Elasticsearch集群时遇到麻烦。 我正在使用Logstash版本1.1.5和Elasticsearch 1.19.8。 这是我在logstash中的输出配置: 这是elasticsearch.yml中的相应配置 我使用以下命令启动logstash: 在启动一段时间后,出现以下故障: 我的怀疑是,logstash需要使用诸如cl

  • 我的登录格式如下,它是一个带有嵌套字段的普通json。 如何使用Filebeat和Logstash正确地解析它,以将Kibana中的所有json字段视为单独的(已解析的)字段?我在“message”字段中遇到了一个问题,它嵌套了json字段。我解析一个在“message”中有字符串的事件没有问题,但不是JSON。 我的尝试: [2019-03-08T09:55:47,084][WARN][logs

  • 我需要我的logstash conf文件向一个kafka主题发送一条消息,以指示已处理的文档已发送到ElasticSearch。我已经准备好了logstash文件来构造发送到ElasticSearch的数据,但是我需要通过同一个logstash文件向kafka主题发布“是”或“否”消息。

  • 问题内容: 我已经来了一段时间,感觉好像logstash中的JSON过滤器正在为我删除数据。我最初是从https://www.digitalocean.com/community/tutorials/how- to-install-elasticsearch-logstash-and-kibana-elk-stack-on- ubuntu-14-04 跟随该教程的 我进行了一些更改,但基本相同。我