これは現在私たちが使用しているシステムのログ形式であり、現在システム全体のログ形式を変更するのは簡単ではありません。ログとそのフィールドから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
jq
JSONを操作するための一般的なツールです。jq -r .msg
JSONドキュメントのキーのデコードされた値を返します。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