山本です
こんにちは
そろそろ冬が終わってしまいますね
さて
CloudWatch のロググループ から ログを検索したいということはよくあるかと思います
AWSマネジメントコンソールから検索できます
「JSONで出力して加工したい」といった要件から AWS CLI を使って検索結果を出力することもあるかと思います
この記事では AWS CLI を使用して CloudWatch のロググループ から ログを検索する方法を紹介します
そもそも AWSマネジメントコンソールで検索するには?
CloudWatchのロググループ画面 を開いて 右上の [Search log group]をクリックします
※ログストリームごとに検索したい場合はログストリーム名をクリックして検索できます
フィルターバーに検索ワードを打ち込んで検索できます
- 検索構文の書き方は右記を参照:フィルターパターンを使用してログデータを検索する - Amazon CloudWatch Logs
CSV出力もできます
AWS CLI を使用して CloudWatch のロググループ から ログを検索する
上と同等のことを AWS CLI を使用してやってみます
([Search log group]にあたる機能がないため少々コマンドが複雑になります ご了承ください)
前提
- Bash 環境
- AWS CLI v2以上
- jq コマンド
コマンド
log_group_name=hoge #ロググループ名 search_string=fuga #検索文字列 max_items=37 #検索するログストリームの数 aws logs describe-log-streams --log-group-name $log_group_name --max-items $max_items --order-by LastEventTime --descending |jq '.logStreams[].logStreamName' |xargs aws logs filter-log-events --log-group-name $log_group_name --filter-pattern $search_string --log-stream-names
実行前に以下を確認してください
- 「log_group_name」にはロググループ名を入れてください
- 「search_string 」には検索する文字列を入れてください
- 検索構文の書き方は フィルターとパターンの構文 を参照ください
- 「max_items」は検索するログストリームの数です よしなに変更ください
利用しているコマンドの解説
- describe-log-streams
- ロググループにある最新のストリームの情報(json)を取得するために使用
- jq
- ログストリームの情報(json)からログストリーム名のリストを取得するために使用
- filter-log-events
- それぞれのログストリームから 検索文字列に一致するログを抽出するために使用
動作解説
- aws logs describe-log-streams を使い最新のログストリーム のリスト(json形式)取り出す (最大 $max_items 個のログストリームを格納したリスト)
- jq コマンドを使って 1 のリストからログストリーム名のみを抽出し文字列のリストにする
- aws logs filter-log-events コマンドの引数に 2 のリストからログストリーム名を 1つずつ渡し(xargs) 各ログストリームから検索文字列のイベントを取り出す
実行結果イメージ
search_string を error にして実行した結果画面
まとめ
json で出力できるので 加工の幅が広がりそうですね
小ネタでした
山本 哲也 (記事一覧)
カスタマーサクセス部
好きなサービス:AWS SDK , AWS CLI
趣味:トレラン、ラン、スカイラン、登山、アウフグース、サウナ、乃木坂46 を推す (筒井あやめ・岩本蓮加・柴田柚菜・小川彩・佐藤璃果 推し)