2015-11-04 58 views
1
的我們的應用程序通過UDP上JSON格式發送日誌到遠程服務器

之一。 一些日誌被鏈接JSON字符串,例如下面的一個:分裂JSON上logstash UDP輸入

{ 「S」:1, 「×」: 「foo」 的} { 「S」:1, 「P」: 「酒吧」 }

我使用以下濾波器來分割的消息。 當輸入文件,日誌分裂,我得到多個事件。 然而,當我使用UDP輸入,它不是分割字符串,並從第一JSON僅創建一個事件。

filter { 
    mutate { 
     gsub => [ "message","}{","}#{"] 
    } 
    split { 
     terminator => [ "#" ] 
    } 
    if [message] =~ /^{.*}$/ { 
     json { 
      source => message 
     } 
    } 
} 

沒有人知道什麼是錯在這裏?

+0

你的「消息」字段在被logstash處理後看起來是什麼樣的? –

+0

通過udp發送數據時,看起來在括號中添加了「\ u0000」,所以gsub函數沒有做應該做的事情。此更新配置解決了這個問題 - 濾波器{ 發生變異{ GSUB => [ 「消息」, 「} \ u0000的{」, 「}#{」] } 分裂{ 終止子=> [ 「#」] } if [message] =〜/^{.*}$/ { json {source => message } } } – user2294995

回答

0

因爲它看起來,我也回答了錯誤的位置。 這是什麼解決它:

當通過udp發送數據時,似乎「\ u0000」被添加在括號之間,所以gsub功能並沒有取代字符,因爲我希望它。 這個更新配置解決了這個問題 -

filter { 
       mutate { 
       gsub => [ "message","}\u0000{","}#{"] 
       } 
       split { 
       terminator => [ "#" ] 
       } 
       if [message] =~ /^{.*}$/ { 
       json { source => message } 
       } 
    } 
0

由於我的意見是正確的道路上,我會在這裏將它作爲一個答案:

檢查什麼logstash被髮送通過標準輸出{}輸出功能elasticsearch。如果您的角色與您的模式不匹配,則邏輯不會觸發。