CloudWatch Logs へテストログを書き込み 1月 21, 2022 1月 24, 2022 AWS , CloudWatch
概要
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 logs put-log-events --log-group-name ロググループ名 --log-stream-name ログストリーム名 --log-events timestamp=$(node -e 'console.log(Date.now())'),message="テストログ"
以下、AWS CLI のaws logs put-log-events の実行結果です。レスポンスに、シーケンストークンが出力されました。
$ aws logs put-log-events --log-group-name niikawa-test --log-stream-name Testlog --log-events timestamp=$(node -e 'console.log(Date.now())'),message="ERROR-1"
{
"nextSequenceToken": "49624509995586930163950622318112001238954107959752261730"
}
CloudWatch Logs に、テストログが出力されたことを確認します。
再度、aws logs put-log-events を実行するとInvalidSequenceTokenException のエラーになります。
$ aws logs put-log-events --log-group-name niikawa-test --log-stream-name Testlog --log-events timestamp=$(node -e 'console.log(Date.now())'),message="ERROR-2"
An error occurred (InvalidSequenceTokenException) when calling the PutLogEvents operation: The given sequenceToken is invalid. The next expected sequenceToken is: 49624509995586930163950622318112001238954107959752261730
新しく作成されたログストリームにログを書き込む場合はシーケンストークンを指定する必要はありません。しかし、後続の書き込みは、以下の様にaws logs put-log-events にシーケンストークンを指定する必要があり、シーケンストークンを指定しないと、InvalidSequenceTokenException のエラーが発生します。
$ aws logs put-log-events --log-group-name niikawa-test --log-stream-name Testlog --log-events timestamp=$(node -e 'console.log(Date.now())'),message="ERROR-2" --sequence-token 49624509995586930163950622318112001238954107959752261730
{
"nextSequenceToken": "49623824394611685460412219365418983372009176809665986610"
}
シーケンストークンは、前回のコマンドのレスポンスから取得する方法以外に、aws logs describe-log-streams を使用することで確認ができます。
niikawa@niikawa1:~$ aws logs describe-log-streams --log-group-name niikawa-test
{
"logStreams": [
{
"logStreamName": "Testlog",
"creationTime": 1642771386503,
"firstEventTimestamp": 1642771886935,
"lastEventTimestamp": 1642771886935,
"lastIngestionTime": 1642772636190,
"uploadSequenceToken": "49623824394611685460412219365418983372009176809665986610",
"arn": "arn:aws:logs:ap-northeast-1:111111111111:log-group:niikawa-test:log-stream:Testlog",
"storedBytes": 0
}
]
}
CloudWatch Logs に、2つ目のテストログが出力されたことを確認します。
関連資料