2016-01-21 238 views
0

的值設置爲空XML字段我得到logstash一些XML消息,我才能分析得到相關信息我怎樣才能在logstash

if ([message] =~ /^</) { 
     xml { 
     source => "message" 
     store_xml => false 
     xpath => [ 
      "name(/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/*[not(self::METADATA)])","MESSAGE_TYPE",    
     ] 
     target => "xml" 
     } 
     if ([MESSAGE_TYPE] == "") { 
     mutate { 
      update => { "MESSAGE_TYPE" => "EDITO" } 
     } 
     } 
    } 

我的目標是讓所有MESSAGE_TYPE,如果它是空的,將其設置爲EDITO。 現在我可以用(MESSAGE_TYPE.raw:「」)看到kibana中的空信息,但是我沒有看到任何EDITO MESSAGE_TYPE。

我有一些MESSAGE_TYPE:文本,資料,照片,但沒有EDITO(只空消息)

kibana fiels

所以總結起來,空字符串應該EDITO

我已經讀一些文檔(https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-replacehttps://groups.google.com/forum/#!msg/logstash-users/mKJVO6yAmSc/on9mLRtLgTYJ)但仍然沒有運氣

+0

我也檢查http://stackoverflow.com/questions/4489976/xpath-to-return-default-value-if-node-not-present但我不知道如何處理它 – glmrenard

+0

試試的東西,不應該既成事實'''如果[MESSAGE_TYPE] { 如果([MESSAGE_TYPE] == 「」){ 發生變異{ 更新=> { 「MESSAGE_TYPE」=> 「EDITO」}} } } 否則{ 發生變異{ add_field => { 「MESSAGE_TYPE」=> 「EDITO」}} } '''但仍然是空的,而不是EDITO – glmrenard

+0

也許訣竅是使用'alter'插件(https://www.elastic.co/guide/en/logstash/current/plugins-filters-alter.html)'''alter condrewrite => [ 「MESSAGE_TYPE」,「」, 「EDITO」 ] } ''' – glmrenard

回答

0

至少我有它:) 我不得不ins高大的一個logstash插件(修改:https://www.elastic.co/guide/en/logstash/current/plugins-filters-alter.html) 而這裏的logstash的conf

xml { 
     add_field => { "genre" => "xml"} 
     source => "message" 
     store_xml => false 
     xpath => [ 
      "/APIOS_MOM_EVENT/IDENT/NO_EMIARTE/text()", "NO_EMIARTE", 
      "/APISTAT_EVENT/IDENT/NO_EMIARTE/text()", "NO_EMIARTE", 
      "/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/VECTORS/VECTOR","VECTORS", 
      "/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/VECTORS/VECTOR/@NAME","VECTOR_NAME", 
      "/APIOS_MOM_EVENT/INFO_EVENT/SENDER/text()","SENDER", 
      "/APISTAT_EVENT/INFO_EVENT/SENDER/text()","SENDER", 
      "/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/VECTORS/VECTOR/@ONLINE","ON_LINE", 
      "/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/VECTORS/VECTOR/@OFFLINE","OFF_LINE", 
      "name(/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/*[not(self::METADATA)])","MESSAGE_TYPE", 
      "/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/CODE_OFFRE_WEB/text()","OFFRE_WEB" 
     ] 
     target => "xml" 
     } 
     alter { 
     condrewrite => [ 
      "MESSAGE_TYPE","","EDITO" 
     ] 
     } 

現在,我有我的EDITO消息正確

Kibana/discover tab with EDITO message

這個插件將是logstash核心的一部分(的這個插件提供的功能可能會被合併到未來版本的mutate過濾器中。