過去 2 週間分しか取得できない CloudWatch のメトリクスを、 毎日ダウンロードするようにスクリプトを書いた。
このメトリクスはいずれツールを使って分析に使いたいので、 ローカルにだけ保存しておくのは心もとない。 念のためバックアップしておきたい。
というわけで、S3 にアップロードするスクリプトも書いたのでメモしておく。
# ログの出力先 # メトリクスもこの下に保存されている logdir=/var/log/your_app_name/perform today=`date -u +%Y/%m/%d` logfile=${logdir}/cloudwatch.log # アップロード先のバケット bucket=your_bucket_name # アップロードするメトリクス metrics="CPUUtilization DatabaseConnections FreeStorageSpace FreeableMemory ReadIOPS WriteIOPS ReadLatency WriteLatency DiskQueueDepth NetworkTransmitThroughput NetworkReceiveThroughput" # ログ出力 function write_log() { echo -e "`date -u +%Y-%m-%dT%TZ` ${1}\r\n" >> ${logfile} } # メトリクスをアップロード function upload_metrics() { instance_id=${1} for metric in $metrics; do metric_file=${logdir}/${instance_id}/${today}/${metric}.json upload_url=s3://${bucket}/performlogs/${instance_id}/${metric}/${today}/${metric}.json if [ -f ${metric_file} ]; then write_log "${metric_file} を S3 にアップロードします。" # S3 にアップロード aws s3 cp ${metric_file} ${upload_url} write_log "${upload_url} にアップロードしました。" fi done } # RDS インスタンス取得 ids=`aws rds describe-db-instances | jq -r '.DBInstances[].DBInstanceIdentifier' | perl -pe 's/\r\n/ /g'` for id in ${ids}; do upload_metrics ${id} done