1. ホーム
  2. amazon-web-services

AWS Cloudwatch Log - そこから既存のログデータをエクスポートすることは可能ですか?

2023-10-20 11:41:01

質問

AWS CloudWatchログエージェントを使用して、アプリケーションログをAWS Cloudwatchにプッシュすることに成功しました。しかし、CloudWatchウェブコンソールは、そこからログデータをダウンロード/エクスポートできるようにするボタンを提供していないようです。

どのように私はこの目標を達成することができます任意のアイデア?

どのように解決するのですか?

最新のAWS CLIにはCloudWatch Logs cliがあり、JSONやテキストファイルなどAWS CLIがサポートする出力でログをダウンロードすることができます。

例えば、最初の1MBから10,000までのログエントリーをストリームから取得する場合 a グループ内で A をテキストファイルに変換して、実行します。

aws logs get-log-events \
   --log-group-name A --log-stream-name a \
   --output text > a.log

このコマンドは現在、最大1MBのレスポンスサイズに制限されています(1回のリクエストで最大10,000レコード)。 --next-token パラメータを使用して、独自のページステップ機構を実装する必要があります。将来的には、CLIでも1つのコマンドでフルダンプができるようになることを期待しています。

更新

指定された時間以降に、特定のグループ内のすべてのストリームからのイベントをリストアップする小さなBashスクリプトです。

#!/bin/bash
function dumpstreams() {
  aws $AWSARGS logs describe-log-streams \
    --order-by LastEventTime --log-group-name $LOGGROUP \
    --output text | while read -a st; do 
      [ "${st[4]}" -lt "$starttime" ] && continue
      stname="${st[1]}"
      echo ${stname##*:}
    done | while read stream; do
      aws $AWSARGS logs get-log-events \
        --start-from-head --start-time $starttime \
        --log-group-name $LOGGROUP --log-stream-name $stream --output text
    done
}

AWSARGS="--profile myprofile --region us-east-1"
LOGGROUP="some-log-group"
TAIL=
starttime=$(date --date "-1 week" +%s)000
nexttime=$(date +%s)000
dumpstreams
if [ -n "$TAIL" ]; then
  while true; do
    starttime=$nexttime
    nexttime=$(date +%s)000
    sleep 1
    dumpstreams
  done
fi

最後の部分ですが、もし TAIL を設定すると、ログイベントの取得を続け、 より新しいイベントが来たときに (多少の遅れはありますが) 報告します。