2017-10-17 3 views
0

私は数日間それを把握しようとしているので、誰かがこの質問で私を助けてくれることを本当に願っています。ログペイロードのいくつかのキーワードに基づいてFluentdのログメッセージの重大度(INFO、ERROR、WARNINGなど)を変更する方法はありますか?

私はGKEのkubernetesで動作するコンテナを持っています。 /var/log/containers/my_container.logでは、私は(異なるフォーマットでいくつかの他のログの中で)このようなものを持っている:

{"log":"17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason\n","stream":"stdout","time":"2017-10-17T04:36:29.750702216Z"} 

このログはINFOログとしてのStackdriver(GKEでFluentd出力)に現れるなど:

23:02:32.000 17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason 

ので

23:02:32.000 

は(のStackdriverの正常な動作です)、それに追加されます。このフォーマットはフォーマット2として参照されます。

このログメッセージは実際には(ペイロードの内容に基づいて)エラーログメッセージなので、Stackdriver(Fluentd)にERRORとして表示します。

私がしようとしています:

<filter reform.**> 
    type parser 
    format /^(?<time>\d{2} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w)\s+(?<log2222>.*)/ 
    reserve_data true 
    suppress_parse_error_log false 
    key_name log 
</filter> 

ERRORにメッセージ変化の重症度を得ることを望んもこの中にいくつかの新しいキー/値(としてログに[..]フィールドの内容を取得しますケースメッセージ2:メインなど)

しかし、このフィルタを設定ファイルに追加した後も、出力ログは以前と同じですが、変更はありません。

私には何が欠けていますか? Regexパターンを書いているときに、kubernetesのログファイルやフォーマット2と呼ばれるメッセージの "ログ"フィールドを実際に考慮する必要があるかどうかはわかりません(Stackdriver上に時間が追加されています) 。

私は本当に助言に感謝します、それは大きな助けになるでしょう。

答えて

0

使用しているツールがわかりませんが、正規表現の最初の部分がログ文字列内の接頭辞の正確な形式と一致していないようです。

実際には\d{2}は2桁にのみ一致します。

時間プレフィックス全体を一致させるには、代わりに(?:\d{2}:){2}\d{2}\.\d{3}を使用してください。

重大度に関する追加ポイント:(?<severity>\w)は、1つの単語文字のみをキャプチャしました。複数の文字を一致させるには、(?<severity>\w+)を使用してください。

あなたの正規表現はその後になる:

^(?<time>(?:\d{2}:){2}\d{2}\.\d{3} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w+)\s+(?<log2222>.*) 

demo靴一致していること。

+0

ありがとうございました。今私は出力のペイロードから重大度を取得しています。もう一つ質問があります。私はまた、メッセージ5とlog2222へのmessage2の新しいフィールドが追加されることを期待していましたが、新しいフィールドは追加されません。ログtext-payloadからいくつかのデータを抽出し、出力の新しい追加フィールドとして取得するにはどうすればいいですか?(上記の例では "message2:[main]"のように) – samanta

+0

ようこそ。私はあなたのツールを知らないので、それが助けになるかどうかはわかりませんが、置換文字列を指定することができれば、$ {severity} message2:$ {message2} 'を置き換えることができます。これで 'ERROR message2:[main'が出ます。新しいバージョン[here](https://regex101.com/r/o5lu2j/2)を参照してください。 – PJProudhon

関連する問題