Amazon-CloudWatch

CloudWatch LogsをAWS CLIから見る方法について

こんにちは、Apache Sparkのエンジニア(PySpark)になりつつあるディーネット山田です。

さて、今回はAWS Glueのジョブ開発時に重宝したCloudWatch LogsをAWS CLIから見る方法について紹介します。

はじめに

開発したAWS GlueジョブコードをAWS環境に移送して、検証する際に以下のような悩みがありました。

  • Glueジョブのコード内に埋め込んでいるデバッグ用の出力結果を、AWSマネジメントコンソールのCloudWatch Logsで見るのが面倒
  • ログ画面で更新ボタンと連打をすると、連打しすぎたことによるRate Limitエラー発生

そこで色々調べていると、AWS CLIからCloudWatch Logsのログに対して(Linuxで言うところの)tailする機能があったので、その紹介になります。

準備

事前準備としては、AWS CLIのインストールとIAMの認証情報割り当ての対応をお願いします。

  • AWS CLIを自分の開発環境へインストールします(注意点としては、v2のみtailオプションに対応しています)
    AWS CLI の最新バージョンをインストール

  • IAMの認証情報を割り当てる(アクセスキーを発行するか、開発EC2マシンに、IAMロールを割り当てるかは状況に応じてお任せします)

AWS CLIのリファレンス

AWS CLIのリファレンスを見ると、v1には記載のないtailオプションが、v2のリファレンスには存在しますね。
aws-logs-tail

【v1のリファレンス】

https://docs.aws.amazon.com/cli/latest/reference/logs/index.html

【v2のリファレンス】

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/logs/index.html

実際に使ってみる

ロググループに対してtailオプションを使ってみる

  • ログが流れ切ると勝手にプロンプトに戻る
    $ aws logs tail {ロググループ名}
    2022-05-29T14:50:21.109000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 START RequestId: 052afd35-116a-4941-afef-c887adb45970 Version: $LATEST
    2022-05-29T14:50:22.522000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 200
    2022-05-29T14:50:22.522000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 {"status":"ok","date_created":"2022-05-25T12:58:20-07:00","date_updated":"2022-05-25T12:58:20-07:00","active_incidents":[]}
    2022-05-29T14:50:22.561000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 END RequestId: 052afd35-116a-4941-afef-c887adb45970
    2022-05-29T14:50:22.561000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 REPORT RequestId: 052afd35-116a-4941-afef-c887adb45970    Duration: 1450.62 ms    Billed Duration: 1451 ms        Memory Size: 128 MB     Max Memory Used: 69 MB  Init Duration: 531.67 ms

    (参考例では、趣味で作成したとあるLambdaのログを眺めています)

(デバッグ中に重宝)ロググループに対してtailを垂れ流す

  • followオプションを付けているので、いわゆるLinuxで言うところのtail -fになります
  • 終了するには、Ctrl+c(^C )を使う必要があります
    $ aws logs tail --follow {ロググループ名}
    2022-05-29T14:40:21.603000+00:00 2022/05/29/[$LATEST]5ab2ba1d50ce4fde872c26720d766cdf START RequestId: 4272bf76-79ca-44af-a910-4d3e1b47e3d7 Version: $LATEST
    2022-05-29T14:40:23.262000+00:00 2022/05/29/[$LATEST]5ab2ba1d50ce4fde872c26720d766cdf 200
    2022-05-29T14:40:23.262000+00:00 2022/05/29/[$LATEST]5ab2ba1d50ce4fde872c26720d766cdf {"status":"ok","date_created":"2022-05-25T12:58:20-07:00","date_updated":"2022-05-25T12:58:20-07:00","active_incidents":[]}
    2022-05-29T14:40:23.300000+00:00 2022/05/29/[$LATEST]5ab2ba1d50ce4fde872c26720d766cdf END RequestId: 4272bf76-79ca-44af-a910-4d3e1b47e3d7
    2022-05-29T14:40:23.300000+00:00 2022/05/29/[$LATEST]5ab2ba1d50ce4fde872c26720d766cdf REPORT RequestId: 4272bf76-79ca-44af-a910-4d3e1b47e3d7    Duration: 1695.94 ms    Billed Duration: 1696 ms        Memory Size: 128 MB     Max Memory Used: 69 MB  Init Duration: 657.87 ms
    2022-05-29T14:50:21.109000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 START RequestId: 052afd35-116a-4941-afef-c887adb45970 Version: $LATEST
    2022-05-29T14:50:22.522000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 200
    2022-05-29T14:50:22.522000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 {"status":"ok","date_created":"2022-05-25T12:58:20-07:00","date_updated":"2022-05-25T12:58:20-07:00","active_incidents":[]}
    2022-05-29T14:50:22.561000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 END RequestId: 052afd35-116a-4941-afef-c887adb45970
    2022-05-29T14:50:22.561000+00:00 2022/05/29/[$LATEST]73ae0fe6f24d4f3d88ad5dffea263c43 REPORT RequestId: 052afd35-116a-4941-afef-c887adb45970    Duration: 1450.62 ms    Billed Duration: 1451 ms        Memory Size: 128 MB     Max Memory Used: 69 MB  Init Duration: 531.67 ms

    (参考例では、趣味で作成したとあるLambdaのログを眺めています)

ログストリーム名も指定可能

  • ロググループ名だけの指定だと、同じロググループ名を使用する他のログも混じってきます
  • そのため、ログストリーム名を指定することも可能です
$ aws logs tail {ロググループ名} --log-stream-names '{ログストリーム名}' --since {期間}
2022-05-25T15:30:21.170000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c START RequestId: 28b65e42-2efd-4529-a32e-8aa365190b56 Version: $LATEST
2022-05-25T15:30:22.774000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c 200
2022-05-25T15:30:22.792000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c {"status":"active","date_created":"2022-05-25T08:27:41-07:00","date_updated":"2022-05-25T08:27:41-07:00","active_incidents":[{"id":1096,"date_created":"2022-05-25T07:29:04-07:00","date_updated":"2022-05-25T08:27:41-07:00","title":"Brief errors and slowness for some users","type":"incident","status":"active","url":"https:\/\/status.slack.com\/2022-05\/87663dfe2a1716ae","services":["Connections","Messaging"],"notes":[{"date_created":"2022-05-25T08:27:41-07:00","body":"We are seeing some improvements. However, users are still experiencing some slowness as well as message and API failures in Slack. We are continuing to investigate to find out what is causing these issues. If you are encountering problems, we've noticed that retrying the failed action should allow it to succeed. \r\n\r\nWe thank you for your patience and we'll provide an update soon."},{"date_created":"2022-05-25T07:29:04-07:00","body":"Users may be experiencing brief errors and slowness in Slack, which is currently being investigated. We'll be back with another update as soon as we have more information to share. We've noticed retrying the failed action should allow it to succeed."}]}]}
2022-05-25T15:30:22.813000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c -162
2022-05-25T15:30:22.813000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c 2022-05-26 00:27:41+09:00
2022-05-25T15:30:22.814000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c 2022-05-26 00:27:41+09:00
2022-05-25T15:30:22.814000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c {'id': 1096, 'date_created': '2022-05-25T07:29:04-07:00', 'date_updated': '2022-05-25T08:27:41-07:00', 'title': 'Brief errors and slowness for some users', 'type': 'incident', 'status': 'active', 'url': 'https://status.slack.com/2022-05/87663dfe2a1716ae', 'services': ['Connections', 'Messaging'], 'notes': [{'date_created': '2022-05-25T08:27:41-07:00', 'body': "We are seeing some improvements. However, users are still experiencing some slowness as well as message and API failures in Slack. We are continuing to investigate to find out what is causing these issues. If you are encountering problems, we've noticed that retrying the failed action should allow it to succeed. \r\n\r\nWe thank you for your patience and we'll provide an update soon."}, {'date_created': '2022-05-25T07:29:04-07:00', 'body': "Users may be experiencing brief errors and slowness in Slack, which is currently being investigated. We'll be back with another update as soon as we have more information to share. We've noticed retrying the failed action should allow it to succeed."}]}
2022-05-25T15:30:22.814000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c Brief errors and slowness for some users
2022-05-25T15:30:22.814000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c https://status.slack.com/2022-05/87663dfe2a1716ae
2022-05-25T15:30:23.026000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c {'MessageId': '3ebd63a8-7624-5172-ac33-38a03bebedb7', 'ResponseMetadata': {'RequestId': '8b2243fa-cbed-560b-80f2-18f28623dace', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8b2243fa-cbed-560b-80f2-18f28623dace', 'content-type': 'text/xml', 'content-length': '294', 'date': 'Wed, 25 May 2022 15:30:22 GMT'}, 'RetryAttempts': 0}}
2022-05-25T15:30:23.053000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c END RequestId: 28b65e42-2efd-4529-a32e-8aa365190b56
2022-05-25T15:30:23.053000+00:00 2022/05/25/[$LATEST]2504f81ceef44d89980b127b7b34b02c REPORT RequestId: 28b65e42-2efd-4529-a32e-8aa365190b56    Duration: 1881.29 ms    Billed Duration: 1882 ms        Memory Size: 128 MB     Max Memory Used: 70 MB  Init Duration: 632.69 ms

(参考例では、趣味で作成したとあるLambdaのログを眺めています)

最後に

いかがだったでしょうか、CloudWatch Logsに出力される内容をAWS CLIから見ることができました。
AWS CLI v2でもバージョンが古いと、--log-stream-namesオプションが用意されていないようなので、使いたい方は最新版にアップデートしてみてください。

余談

ご存じの方もいらっしゃるかもしれませんが、趣味で作成したとあるLambdaは、Slackのステータスを定期的にチェックして、異常があればSNSを使ってメール通知してくれるものです。
Checking up on Slack with the Slack Status API

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA