RDSで出力されているログを取得してくるスクリプトを作成したのでご紹介します。
ログ取得のスクリプトを実行しようとしているあなた下準備をしないと使えませんよ!
■下準備というのは
1.RDSのAPIをLinuxサーバへインストールすること
JAVAのバージョンとかにも注意が必要だよ
2.IAMでアクセスキーとシークレットキーを作成してRDSにアクセスすることができるように設定すること
■スクリプトの流れは
1.設定ファイルから必要なパラメータを読み込む
2.RDSに保存されているログファイルの一覧を取得
3.ログファイルの一覧を時間の昇順に並び替えリスト化する
4.リスト化された中からRDSに保存されているログファイルを一つ一つ取得
5.すべてのログファイルの取得が完了すれば、ローカルに保存しているログファイルのローテート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
## ## AWS RDS LOG GETTING SCRIPT ## VERSION : 1.04 ## LAST UPDATE : 2014.08.03 22:53 ## #!/bin/sh ## EXPORT SETTING WITH API TOOLS export AWS_RDS_HOME="{APIを置いた位置に変えてね}" export JAVA_HOME="{JAVAのディレクトリに変えてね}" export PATH=${AWS_RDS_HOME}/bin:${PATH} ## SCRIPT SETTING DOWNLOAD_DIR="{ログを保存したいディレクトリに変えてね}" DAY=`date '+%Y%m%d'` FILE="{アクセスキー、シークレットキー、リージョン、DBインスタンス名が書かれたファイルを指定してね}" SAVETIME="+30" ## TARGET FILE CHECK if [ -e ${FILE} ] ; then logger -i -s -t rds "I will start to get the log." mkdir -p ${DOWNLOAD_DIR} while read line do ACCESS_KEY=`echo ${line} | awk '{print $1}'` SECRET_KEY=`echo ${line} | awk '{print $2}'` REGION=`echo ${line} | awk '{print $3}'` INSTANCE=`echo ${line} | awk '{print $4}'` LOG_FILE=`rds-describe-db-log-files --db-instance-identifier ${INSTANCE} -I ${ACCESS_KEY} -S ${SECRET_KEY} --region ${REGION} | awk '{print $2" \t "$3" "$4" "$5" "$6" "$8}' | sort -k2 | awk '{print $1}'` for item in ${LOG_FILE[@]}; do FILENAME=`basename ${item} | awk -F. '{print $1"."$2}'` FILEPATH="${DOWNLOAD_DIR}/${FILENAME}_${INSTANCE}_${DAY}" echo "##### `basename ${item}` #####" >> ${FILEPATH} echo "" >> ${FILEPATH} rds-download-db-logfile --db-instance-identifier ${INSTANCE} --log-file-name ${item} -I ${ACCESS_KEY} -S ${SECRET_KEY} --region ${REGION} >> ${FILEPATH} done find `dirname ${DOWNLOAD_DIR}` -name "${FILENAME}_${INSTANCE}_*" -type f -ctime ${SAVETIME} | xargs rm -rf logger -i -s -t rds "Log getting instances '${INSTANCE}' was completed." done < ${FILE} logger -i -s -t rds "Logging was completed." exit 0; else logger -i -s -t rds "Configuration file was not found." logger -i -s -t rds "Series of processing is terminated." exit 99; fi |
ざっと書きましたが、APIの動作は少々処理に時間がかかるので、スクリプトをキックすると完了するまで5分~20分程度(ログの大きさによる)時間がかかるしLoad Averageが高くなりますのでLoad Averageで監視を行っている方はアラームが鳴るでしょう。
AWSのRDSは、運用が楽ですがログは自動的にある一定の期間(DBの種類によって異なる)でローテートされてしまいますので長期間ログの保存が必要な方はAPIやコンパネからログをダウンロードして保存することをおすすめします。