AWS CLI で CloudWatch のメトリクスを取得できるけど、 過去 2 週間までしかさかのぼれないみたいだ。 2 週間よりも前のメトリクスを見たくなったときに備えて、 あらかじめダウンロードしておく必要があるな。
そういうわけで、1 日分のメトリクスをダウンロードする bash スクリプトを書いてみた。 このスクリプトを cron で毎日実行してローカルに保存しておく。
# ログの出力先 # メトリクスもこの下にダウンロードする logdir=/var/log/your_app_name/perform/ today=`date -u +%Y/%m/%d` logfile=${logdir}cloudwatch.log # aws コマンドに渡すパラメータ namespace=AWS/RDS statistics=Average starttime=`date -u -d '1 days ago' +%Y-%m-%dT%TZ` endtime=`date -u +%Y-%m-%dT%TZ` 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} } # CloudWatch のメトリクスをダウンロード function download_metrics() { instance_id=${1} # ログフォルダが無ければ作る instance_logdir=${logdir}${instance_id}/${today} [ ! -d ${instance_logdir} ] && mkdir -p ${instance_logdir} for metric in $metrics; do write_log "${instance_id}/${metric} を取得" aws cloudwatch get-metric-statistics \ --namespace ${namespace} \ --dimensions Name=DBInstanceIdentifier,Value=${instance_id} \ --metric-name ${metric} \ --statistics ${statistics} \ --start-time ${starttime} \ --end-time ${endtime} \ --period 300 > ${instance_logdir}/${metric}.json done } # RDS インスタンス取得 ids=`aws rds describe-db-instances | jq -r '.DBInstances[].DBInstanceIdentifier' | perl -pe 's/\r\n/ /g'` for id in ${ids}; do download_metrics ${id} done