🔍

CloudWatchLogsをAWS-CLIで参照する

2022/08/23に公開

お疲れ様です。
中村です。

あるLambda関数でエラーが出ていないかどうか CloudWatchLogsで確認が必要なのですが、吐き出されるログの量が多すぎて、ログストリーム(ログが格納されている箱の単位)の数も1日に10件前後あります。
コンソール画面でストリームを1件づつ開いて中身を確認するのは時間がかかるし、
Search Allボタンで全ストリームを検索できますが、途方もなく時間がかかります。。。。(-。-)y-゜゜゜
検索が終了しても、古いモノから先に出てきちゃう。。。メンドクサ.....

グダグダと愚痴を書いてしまいましたが、m(___)m
こんな時はAWS CLIコマンドを使って検索した方が良いかもしれませんね

実行環境

AWS CloudShell
https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html

実行コマンド

こんな感じのコマンドを書きました。
Lambdaでリソースのタグ情報を取ろうとしてエラーが出ているようなので、
--filter-pattern "Get Tag Value Error"を指定してその情報を取っています。

aws logs filter-log-events \
--log-group-name /aws/lambda/lambda-name \
--start-time `TZ=Asia/Tokyo date --date='2022-08-12 08:00:00.000' +%s%3N` \
--end-time  `TZ=Asia/Tokyo date --date='2022-08-26 08:00:00.000' +%s%3N` \
--filter-pattern "Get Tag Value Error"

実行結果

結果はこんな感じ。(端折ったりマスキングしてますが) timestampがエポック秒になってるので、そこの変換が少し手間ですが

{
    "events": [
        {
            "logStreamName": "2022/08/12/[4]xxx",
            "timestamp": 1660320179249,
            "message": "{'EBS [vol-xxx] Get Tag Value Error': ('An error occurred (RequestLimitExceeded) when calling the DescribeTags operation (reached max retries: 4): Request limit exceeded.',)}\n",
            "ingestionTime": 1660320180855,
            "eventId": "9999"
        }
    ],
    "searchedLogStreams": []
}

こっちの方がいいですね。うんうん。
今後も活用できそうです。

参考

https://qiita.com/neruneruo/items/eac2ab18686aba0fe483

https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html

Discussion