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

Logstash中的JSON解析器会忽略数据吗?

左宁
2023-03-14
问题内容

我已经来了一段时间,感觉好像logstash中的JSON过滤器正在为我删除数据。我最初是从https://www.digitalocean.com/community/tutorials/how-
to-install-elasticsearch-logstash-and-kibana-elk-stack-on-
ubuntu-14-04

跟随该教程的

我进行了一些更改,但基本相同。我的grok过滤器如下所示:

uuid #uuid and fingerprint to avoid duplicates
{
    target => "@uuid"
    overwrite => true
}
fingerprint
{
    key => "78787878"
    concatenate_sources => true
}
grok #Get device name from the name of the log
{
    match => { "source" => "%{GREEDYDATA}%{IPV4:DEVICENAME}%{GREEDYDATA}" }
}

grok  #get all the other data from the log
{
    match => { "message" => "%{NUMBER:unixTime}..." }
}
date #Set the unix times to proper times.
{
    match => [ "unixTime","UNIX" ]
    target => "TIMESTAMP"
}


grok #Split up the message if it can
{
    match => { "MSG_FULL" => "%{WORD:MSG_START}%{SPACE}%{GREEDYDATA:MSG_END}" }
}
json 
{
    source => "MSG_END"
    target => "JSON"
}

我认为,导致问题的根源是底部。我的古怪的东西应该都是正确的。当我运行此配置时,我看到kibana中的所有内容均正确显示,除了所有其中包含JSON代码的日志(并非所有日志都具有JSON)。当我再次运行它而没有JSON过滤器时,它将显示所有内容。我尝试使用IF语句,以便仅在包含JSON代码的情况下才运行JSON过滤器,但这并不能解决任何问题。

但是,当我添加IF语句以仅运行特定的JSON格式时(因此,如果MSG_START =
x,y或z,则MSG_END将具有不同的json格式。在这种情况下,我只能解析z格式),然后在kibana中,我会看到所有包含x和y
JSON格式(尽管未解析)的日志,但不会显示z。因此,我确定这一定与我使用JSON过滤器的方式有关。

另外,每当我要测试新数据时,我便开始在elasticsearch中清除旧数据,以便如果它能正常工作,我知道是我的logstash有效,而不仅仅是elasticsearch中的内存运行。我已经使用完成了XDELETE 'http://localhost:9200/logstash-*/'。但是除非我为filebeat提供新日志,否则logstash不会在elasticsearch中建立新索引。我不知道这是否是另一个问题,只是想我应该提一下。

我希望一切都有意义。

编辑:我只是检查logstash.stdout文件,事实证明它正在解析json,但是它只在kibana中显示“
_jsonparsefailure”,因此Elastisearch一定出了问题。也许。我不知道,只是集思广益:)

样本记录:

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]}

在上面的示例中,MSG_START已加载,MSG_END已包含所有内容,因此MSG_END是我要解析的有效JSON。

波纹管中没有JSON,但是我的logstash将尝试解析“ Inf:”之后的所有内容,并发送“ _jsonparsefailure”。

1452470931.56 1448975463.00 1 6 rc.app 02:11:03.301
Inf:NOSApp:UpdateSplashScreen未在此平台上实现

这也是我在logstash中的输出,因为我觉得现在很重要:

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

问题答案:

我问了这个问题:json解析器的Logstash输出稍后不会发送到Elasticsearch,并且它具有更多相关的信息,如果有人遇到与我类似的问题,也许可以提供一个更好的答案,您可以查看该链接。



 类似资料:
  • 我试图解析来自服务器的响应json。数据是一个对象数组,但有时服务器在数组的项之间发送一个布尔值。像这样: 正如你所看到的,他们之间有一个错误。 tnx提前。

  • 问题内容: 我有一个具有预定义数据结构的对象: 和JSON应该是 我想以肯定的方式处理JSON错误,并且每当服务器为定义的数据类型返回意外的值时,我都希望它被忽略并设置默认值(空)。 现在,当JSON部分无效时,我得到了JSON阅读器异常: 而且我什么都没有。我想要的是获取一个对象: 并分析警告(如果可能)。可以使用JSON.NET完成吗? 问题答案: 为了能够处理反序列化错误,请使用以下代码:

  • 我正在使用antlr4语法存储库中的JSON语法来解析JSON文件。它工作得很好,并使用通常的规则忽略空格:

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

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

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc