2016-01-13 105 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" ] 
     } 

因此,抽取字段/字段中輸入您的興趣,然後取出用在最後的解析器發領域。這對我來說很有用。我不知道爲什麼,但它可能也適用於其他人。