2016-12-27 60 views
0

我在使用logstash配置時遇到問題。你可以在下面找到我的logstash配置。Logstash到elasticsearch。帶點的鍵

Ruby過濾器刪除每個點 - 「。」來自我的領域。看來,每一個工作正常 - 數據過濾的結果是正確的,但elasticsearch神奇地迴應:"status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [/ConsumerAdminWebService/getConsumerTransactions.call] cannot contain '.'"}其中getConsumerTransactions.call是我的領域之一。

input { 
    http_poller { 
    urls => { 
     uatBackend1 => { 
     method => get 
     url => "http://some-url/" 
     headers => { 
      Accept => "application/json" 
     } 
     } 
    } 
    request_timeout => 60 
    # Run every 30 seconds 
    schedule => { cron => "* * * * * UTC"} 
    codec => "json" 
    metadata_target => "http_poller_metadata" 
} 
} 
filter { 
    ruby { 
    init => " 
     def remove_dots hash 
      new = Hash.new 
      hash.each { |k,v| 
       if v.is_a? Hash 
        v = remove_dots(v) 
       end 
       new[ k.gsub('.','_') ] = v 
       if v.is_a? Array 
        v.each { |elem| 
         if elem.is_a? Hash 
          elem = remove_dots(elem) 
         end 
         new[ k.gsub('.','_') ] = elem 
        } unless v.nil? 
       end 
      } unless hash.nil? 
      return new 
     end 
    " 
    code => " 
     event.instance_variable_set(:@data,remove_dots(event.to_hash)) 
    " 
} 
} 
output { 
    elasticsearch { 
    hosts => localhost 
    } 
} 

恐怕這行代碼是不正確的:event.instance_variable_set(:@data,remove_dots(event.to_hash)) - 結果數據以某種方式固定到該事件,但原始數據持續不變,並交付給Elasticsearch API。

我想作一些澄清這裏需要:

  • 我用ES版> 2.0,以便點不準
  • 紅寶石濾波應以「_」代替點和它的偉大工程 - 得到的數據是完全但是ES正確回覆提到的錯誤。我懷疑這個過濾器不會取代事件數據,而只是向事件對象添加一個新的字段。 ES然後仍然讀取原始數據而不是更新的數據。

說實話Ruby是一個神奇的給我:)

+0

什麼是您使用的ES版本? – Kulasangar

+0

我建議你檢查異常:begin event.instance_variable_set(:@ data,remove_dots(event.to_hash)) rescue exception => e event ['logstash_ruby_exception'] ='field dot cleanup:'+ e。消息 結束 –

+0

@Kulasangar我使用ES版本2.3.1。 – adgon92

回答

0

如果您使用的是ES 2.0版本也可能是版本問題,即ES不拿起領域包含.點。

根據本thread這樣的響應:

Field names cannot contain the . character in Elasticsearch 2.0.

這樣的工作,你身邊可能要mutate(重命名)的字段名弄成像_ or -而不是使用.點。這個ticket幾乎可以解釋這個問題,其中.點可以在2.0版以後的ES版本中使用。希望能幫助到你!

+0

我很抱歉,但這無濟於事。我知道它,這就是爲什麼我添加遞歸過濾器,用「 - 」代替點。我在我的問題中添加了更多細節。 – adgon92

相關問題