2016-06-12 8 views
1

私はJSONリクエストボディとしてデータを送信する複数のシステムを持っています。これは私の単純な設定ファイルです。LogstashエスケープJSONキー

input { 
    http { 
    port => 5001 
    } 
} 

output { 
    elasticsearch { 
    hosts => "elasticsearch:9200" 
    } 
} 

ほとんどの場合、これは問題なく機能します。私はキバナでjsonのデータを見ることができます。 場合によっては、JSONは処理されません。 JSONをエスケープすることと何か関係があります。例:キーに '。'が含まれている場合、JSONは処理されません。

私はJSONを制御できません。これらの文字をJSONキーでエスケープする方法はありますか?

更新:(。。。コンテンツが変更されている。しかし、私は、JSON文字列をテストしましそれはオリジナルと同じ振る舞いを持っている)のコメントで述べたように、私はJSON文字列の例をあげる:

{ 
    "http://example.com": { 
    "a": "", 
    "b": "" 
    } 
} 
+1

に行く:logstashフォーラムで あるユーザーは、JSONのキーにドットの世話をするRubyスクリプトを開発しました。 – Val

答えて

1

私の研究によって私のポストに戻ってきました。

弾性検索前に、キー内の2.0ドットが許可されました。バージョン2.0以降、これはもはや事例ではありません。

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

すべてのクレジットはたぶん、あなたはあなたが得るサンプルJSONを表示する必要があります@ hanzmeier1234(Field name cannot contain ‘.’

関連する問題