2016-06-23 4 views
0

から値を割り当てることができないLogstash:以下の入力が与えられるとJSON

111.111.111.111、11.11.11.11 - 11.11.11.11 [06 /月/ 2016:08:26:10 +0000]「POST /幾分サービス/ GetSomething HTTP/1.1" 499 0 " - " "ジャカルタコモンズ-のHttpClient/3.1" "7979798797979799" 59.370 - "{\ X0A \ x22correlationId \ X22:\ x22TestCorr1 \ X22 \ X0A}" Logstash構成で

input { stdin {} } 
output { stdout { codec => "rubydebug" } } 

filter { 
    grok { 
    match => { "message" => "%{COMBINEDAPACHELOG} %{QS:partner_id} %{NUMBER:req_time} %{GREEDYDATA:extra_fields}" } 
    add_field => [ "received_at", "%{@timestamp}" ] 
    add_field => [ "received_from", "%{host}" ] 
    } 


    mutate { 
    gsub => ["extra_fields", "\\x0A","","extra_fields", "\\x22",'\"'] 
    } 

    json { 
    source => "extra_fields" 
    target => "extra_fields_json" 
    } 


    mutate { 
     add_field => { 
     "correlationId" => "%{[extra_fields_json][correlationId]}" 
     } 
    } 
} 

は私たちに次のような出力を与えました

 
Logstash startup completed 
{ 
        "message" => "111.111.111.111, 11.11.11.11 - 11.11.11.11 [06/May/2016:08:26:10 +0000] "POST /some-service/GetSomething HTTP/1.1" 499 0 "-" "Jakarta Commons-HttpClient/3.1" "8888888" 59.370 - "{\x0A\x22correlationId\x22 : \x22TestCorr1\x22\x0A}", 
        "@version" => "1", 
       "@timestamp" => "2016-06-23T18:00:28.831Z",    
        "clientip" => "11.11.11.11", 
        "ident" => "-", 
         "auth" => "10.0.12.205", 
       "timestamp" => "06/May/2016:08:26:10 +0000", 
         "verb" => "POST", 
        "request" => "/some-service/GetSomething", 
       "httpversion" => "1.1", 
        "response" => "499", 
        "bytes" => "0", 
        "referrer" => "\"-\"", 
        "agent" => "\"Jakarta Commons-HttpClient/3.1\"", 
       "partner_id" => "\"8888888\"", 
        "req_time" => [ 
         [0] "59.370", 
         [1] "1" 
        ], 
       "extra_fields" => "\"{\\\"correlationId\\\" : \\\"TestCorr_1\\\"}\"", 
      "extra_fields_json" => "{\"correlationId\" : \"TestCorr_1\"}", 
       "correlationId" => "correlationId" 

} 
Logstash shutdown completed 

なぜ "correlationId"の値が "TestCorr_1 \"ではなく "correlationId"であるのですか?

あなたのお手伝いをお待ちしております。ありがとう!

答えて

0

jsonが正しく解析されるためには、"\extra_fieldsから削除する必要があります。 あなたはにあなたのmutateフィルタを変更する必要があります:それが動作するかどう

mutate { 
     gsub => ["extra_fields", "\"","", 
      "extra_fields", "\\x0A","", 
      "extra_fields", "\\x22",'\"', 
      "extra_fields", "(\\)","" 
     ] 
} 

は、それが動作する...

+0

アメージング動作しない/フィードバックを与えることを躊躇しないでください!ありがとう、私はこの問題を解決するために多くの時間を費やしてきました。ところでもう1つ質問がありますが、jsonが空の場合、テキストが表示されます。ソースにフィールドがない場合はどうすれば空白になりますか? "correlationId" => "%{[extra_fields_json] [correlationId]}"フィールドがソースに存在しない場合、 "correlationId" => "" – yanto

+0

jsonフィルタの後に、このようにsthgを使用する必要があると思います。if([correlationId] == "%{[extra_fields_json] [correlationId]}"){...}にmutateフィルタとreplaceオプションcorrelationIdフィールド([doc](https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-replace)) – baudsp

+0

こんにちは@yanto答えがあなたの質問を解決したことを受け入れることを検討してください。さらなる助けが必要な場合は、お気軽にコメント/新しい質問をしてください – baudsp

関連する問題