概要

  • 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つ目のテストログが出力されたことを確認します。

関連資料

CloudWatch Logs のサービスクォータとサービス制限を一覧表示します。

元記事はこちら

https://oji-cloud.net/2022/01/21/post-6847/
著者:新川貴章


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/