CloudWatch Logs へテストログを書き込み
概要
- CloudWatch Logs のログストリームにテストログを書き込む方法を記載します。今回の私の目的は、CloudWatch Logs にサブスクリプションフィルターを設定後、フィルターが正しく機能しているかを確認するためでした。
- テストログの書き込みは、AWS CLI の aws logs put-log-events を使用します。
- 新しく作成されたログストリームにPutLogEvents が呼ばれた場合はシーケンストークンの指定は必要ありませんが、後続のPutLogEvents の呼び出しには、前回のPutLogEvents のレスポンスから取得したシーケンストークンを指定する必要があります。
- 前回のレスポンスが不明な場合、シーケンストークンは、aws logs describe-log-streams から確認することができます。
- ログイベントは、Timestamp順に時系列である必要があります。Timestampは、イベントが発生した時刻であり、Unix time (1970/1/1 00:00:00 UTC)からのミリ秒数で表現されます。
- Timestampの指定は、2時間以上未来の場合や、14 日以上過去の場合、ロググループの保持期間より古い場合は記録されません。
- ログストリームごとに1秒あたり5リクエストのクォータがあります。
- アップロードするログの最大バッチサイズは、1MBです。これは、指定のログに26 Byteを加えたものです。
- その他の説明は、こちらのドキュメントを参照。
ロググループ / ログストリームを作成する
- テストログを出力する先のロググループ / ログストリームを作成します。
- コンソールから CloudWatch のサービスを開きます。
- ロググループを選択し、「ロググループを作成」を押します。
- ロググループ名を指定し、「作成」を押します。
- 作成したロググループを選択し、「ログストリームを作成」を押します。
- ログストリーム名を指定し、「Create」を押します。
- ログストリームが作成されました。
テストログを書き込む
- AWS CLI のaws logs put-log-eventsを使用します。
- timestamp には
node -e 'console.log(Date.now())
によって現在日時を設定します。
- 以下、AWS CLI のaws logs put-log-events の実行結果です。レスポンスに、シーケンストークンが出力されました。
- CloudWatch Logs に、テストログが出力されたことを確認します。
- 再度、aws logs put-log-events を実行するとInvalidSequenceTokenException のエラーになります。
- 新しく作成されたログストリームにログを書き込む場合はシーケンストークンを指定する必要はありません。しかし、後続の書き込みは、以下の様にaws logs put-log-events にシーケンストークンを指定する必要があり、シーケンストークンを指定しないと、InvalidSequenceTokenException のエラーが発生します。
- シーケンストークンは、前回のコマンドのレスポンスから取得する方法以外に、aws logs describe-log-streams を使用することで確認ができます。
- CloudWatch Logs に、2つ目のテストログが出力されたことを確認します。