awkまたは他のcliツールを使用して、ログ行からjsonフィールドを抽出します。

awkまたは他のcliツールを使用して、ログ行からjsonフィールドを抽出します。

これは現在私たちが使用しているシステムのログ形式であり、現在システム全体のログ形式を変更するのは簡単ではありません。ログとそのフィールドからjsonオブジェクトを抽出する方法が必要です。現在のメッセージサイズが大きすぎるため、これを行うとログが見やすくなります。

ログ形式

A B C {"field name one":value of field , "msg": "a sample message", "c": c}

サンプルログです。 A、B、Cフィールドにはスペースはありませんが、jsonオブジェクトのフィールドと値にスペースがある可能性があることに注意してください。

service_name/syslog.log:2022-09-24T16:18:01.38754199Z stdout F {"level":"info","ts":1664036281.3874626,"msg":"system sample message","host":"host_name","processor":"test","reqId":"1234"}

cliを介してmsgの値を印刷したいと思います。どうすればいいですか?

ベストアンサー1

jqJSONを操作するための一般的なツールです。jq -r .msgJSONドキュメントのキーのデコードされた値を返します。msg

フィールド4()cutからフィールドを抽出してJSONデータを取得できます。cut -d ' ' -f 4-

したがって、以下を組み合わせてください。

cut -d ' ' -f 4- | jq -r .msg

例えば

echo '2022-09-24T16:18:01.38754199Z stdout F {"level":"info","ts":1664036281.3874626,"msg":"system sample message","host":"host_name","processor":"test","reqId":"1234"}' | cut -d ' ' -f 4- | jq -r .msg
system sample message

おすすめ記事