2016-01-13 155 views
1

这是怎么样的一个遵循我的问题另外一个了: JSON parser in logstash ignoring data? 但这次我觉得这个问题是比较清楚的,然后最后一次,可能是有人更容易回答。Logstash输出送交elasticsearch

我使用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单独添加的字段。至少应该显示出来,对吧?

如果有人看过类似的东西,这将是很大的帮助。 也抱歉发送几乎相同的问题两次。

示例日志LINE:

1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2负载{ “向上”:[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),并且在标准输出中我可以看到它被成功解析,但是我在弹性搜索中没有看到它。 这是我的输出代码:

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

很多我的logstash过滤器是在其他的问题,但我认为像所有相关部分在这个问题了。 如果你想看看这里的链接:JSON parser in logstash ignoring data?

+1

如果你希望人们能帮忙就这一个,你需要分享您的logstash配置(至少相关部分),你知道还有一个真实的样本日志行与您的当前配置失败。 – Val

+0

@Val我更新了问题以获得一些日志和代码。我之前的问题中有很多logstash配置,除了我换出了csv解析器的grok外,不应该影响这个,因为它之前做的是同样的事情。 –

+0

@val我刚与所有除JSON滤波器(只与源设置)移除所述过滤器的测试它,只有用在问题(只是它的JSON部分)日志的例子。它像以前一样在logstash.stdout文件中解析,但没有在kibana中显示。所以我必须假设我的输出是错误的,或者我使用JSON过滤器错误。 –

回答

1

在这里回答我自己的问题。这不是理想的答案,但如果任何人有类似的问题,我可以试试这个。

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

因此,抽取字段/字段中输入您的兴趣,然后取出用在最后的解析器发领域。这对我来说很有用。我不知道为什么,但它可能也适用于其他人。