2016-12-13 14 views
0

私はかなり単純な問題がありますが、それは私にとっては紛らわしいものです。私は残りのAPIを介してGerritデータを取得するためにLogstashを使用しようとしています。私はhttp_pollerを使用しています。私の設定で正しい応答が得られるので、私はほとんどそこにいます。 Gerrits JSON応答の開始からlogstashを使用してJSON応答からXSSI接頭辞を取り除く

今はXSSIプレフィックスを除去する必要がある)]}」。問題は、どうですか?それを剥ぎ取る方法、分割する方法、または変異させる方法、またはどうすればいいですか?

私の入力構成:

input { 
    http_poller { 
    urls => { 
     gerrit_projects => { 
     method => get 
     url => "http://url.to/gerrit/a/projects/" 
     headers => { Accept => "application/json" } 
     auth => { user => "userid" password => "supresecret" } 
     } 
    } 
    target => "http_poller_data" 
    metadata_target => "http_poller_metadata" 
    request_timeout => 60 
    interval => 60 
    } 
} 
filter { 
    if [http_poller_metadata] { 
    mutate { 
     add_field => { 
     "http_poller_host" => "%{http_poller_metadata[host]}" 
     "http_poller" => "%{http_poller_metadata[name]}" 
     } 
    } 
    } 
    if [http_poller_metadata][runtime_seconds] and [http_poller_metadata][runtime_seconds] > 0.5 { 
    mutate { add_tag => "slow_request" } 
    } 
    if [http_request_failure] or [http_poller_metadata][code] != 200 { 
    mutate { add_tag => "bad_request" } 
    } 
} 

output { 
    stdout { codec => rubydebug } 
} 

とレスポンスの部品:

Pipeline main started 
JSON parse failure. Falling back to plain-text {:error=>#<LogStash::Json::ParserError: Unexpected character (')' (code 41)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at ... (bunch of lines)... 
    { 
      "http_poller_data" => { 
       "message" => ")]}'\n{\"All-Users\":{\"id\":\"All-Users\",....(more valid JSON)...", 
    "tags" => [ 
       [0] "_jsonparsefailure" 
      ], 
       "@version" => "1", 
      "@timestamp" => "2016-12-13T09:48:25.397Z" 
     }, 
        "@version" => "1", 
        "@timestamp" => "2016-12-13T09:48:25.397Z", 
     "http_poller_metadata" => { ... } 

これはStackOverflowのへの私の最初の質問です。あなたの答えを親切にしてくれてありがとう!

答えて

0

あなたは)]}

mutate { 
    gsub => [ 
    "message", "\)]}'", "" 
    ] 
} 

を削除するにはGSUBオプション(link)とのmutateフィルタを使用することができます。しかしGSUBは、すべて置き換えます。たとえば、私が実行ヘリットプロジェクトの状態を取得します正規表現が出現するので、そのパターンが一度だけ現れることを確認しなければなりません。

+0

ありがとう、これは私の問題を解決するのに役立ちました! Iはフィルタセクションに次の行を追加: } のmutate {GSUB => [ "メッセージ"、 "^ \)]} '\ n"、 ""]} JSON {ソース=> "メッセージ"今のところレスポンスが必要なように見えます。 – Leicha

+0

@Leicha No prob、喜んで助けた! – baudsp

0

JSON出力を処理するために "sed 1d"を使用して ")]} ''接頭辞と" jq "を削除します。

curl -s --header 'Content-Type:application/json' --request GET --netrc https://<GERRIT-SERVER>/a/projects/?r=<GERRIT-PROJECT> | sed 1d | jq --raw-output ".[] | .state" 

ACTIVE 
+0

ありがとう、私はそれを行うためにlogstashの方法を探していた。 – Leicha

関連する問題