
AWSのJSONログをjqで読みやすくする
こんにちは。運用チームのDIです。
AWSを使っていると、JSON形式のログを調査する場面がよくあります。
たとえば、次のようなログです。
- CloudWatch Logsで取得したログ
- CloudTrailのイベントログ
- アプリケーションが出力したログ
JSONログは機械的に扱いやすく、内容がシンプルであれば人間でも比較的読みやすい形式です。
しかし、AWSサービスのログには、多くの情報が記録されています。
ログ件数が多かったり、階層が深かったりすると、目視で必要な情報を探すのは大変です。
そこで便利なのが jqコマンドです。
jqを使うと、JSONログを見やすく整形したり、必要な項目だけを抽出したり、条件に合うログだけを絞り込んだりできます。
jqとは
jqは、JSONをコマンドラインで扱うためのツールです。
例えば、下記のように1行で記録されたJSONログがあったとします。
{"timestamp":"2026-04-25T10:15:30+09:00","level":"INFO","service":"user-api","requestId":"req-001","path":"/users","statusCode":200,"message":"Get user list"}
このままでも内容は確認できますが、1行でまとまっていて少し読みづらいです。
ここで、次のようにjqを使います。
$ jq '.' json
{
"timestamp": "2026-04-25T10:15:30+09:00",
"level": "INFO",
"service": "user-api",
"requestId": "req-001",
"path": "/users",
"statusCode": 200,
"message": "Get user list"
}
項目ごとにインデントされて見やすくなりました。
ここで指定している「.」は読み込んだJSONデータ全体を表します。
つまり、実行したコマンドは「JSONファイルの中身すべてを整形して表示する」という意味です。
必要な項目だけ抽出する
ログを調査するときは、JSON全体ではなく、特定の項目だけ確認したい場合があります。
例えば、エラー内容だけを確認したい場合は、次のように指定します。
$ jq '.message' json
"Get user list"
このように、jq を使うとJSONログの中から必要な項目だけを簡単に取り出せます。
複数項目を取り出す場合には、次のようにします。
$ jq '{level: .level, statusCode: .statusCode, message: .message}'
json
{
"level": "INFO",
"statusCode": 200,
"message": "Get user list"
}
ログ全体を見る必要がない場合は、調査に必要な項目だけを抽出すると確認しやすくなります。
条件に合うログだけを絞り込む
次は、複数件のログから条件に合うものだけを絞り込みます。
たとえば、下記のようなログがあるとします。
[
{
"timestamp": "2026-04-25T10:15:30+09:00",
"level": "INFO",
"service": "user-api",
"requestId": "req-001",
"path": "/users",
"statusCode": 200,
"message": "Get user list"
},
{
"timestamp": "2026-04-25T10:16:05+09:00",
"level": "ERROR",
"service": "user-api",
"requestId": "req-002",
"path": "/users/123",
"statusCode": 500,
"message": "Failed to get user"
}
]
今回のように、[ ] で囲まれているJSONは、配列形式のデータとなります。
このJSONログから、levelがERRORのログだけ取り出してみます。
$ jq '.[] | select(.level == "ERROR")' json
{
"timestamp": "2026-04-25T10:16:05+09:00",
"level": "ERROR",
"service": "user-api",
"requestId": "req-002",
"path": "/users/123",
"statusCode": 500,
"message": "Failed to get user"
}
このようにERRORのログだけ表示することが出来ました。
$ jq '.[] | select(.level == "ERROR") | .message' json
"Failed to get user"
条件に合うログから、さらに必要な項目だけ取り出すこともできます。
まとめ
今回は、jq コマンドを使ってJSONログを整形・抽出・絞り込みする方法を紹介しました。
jqを使うと、JSONログの中から必要な情報を素早く確認できます。
特にAWS環境では、CloudWatch LogsやCloudTrail、アプリケーションログなど、JSON形式のログを扱う場面が多いため、覚えておくとログ調査がしやすくなるかなと思います。
今回は以上となります。
それでは、また。





