前提条件
RDSのスロークエリをCloudWatch Logsに出力している。
awscli v2、jq、curl、sed、catが使用できる環境である。
IAMロール等で、awscliからCloudWatch Logsにアクセスする権限が付与されている。
SlackのIncoming WebHooksのURLを取得済みである。
この記事について
「AWS RDS(Aurora MySQL)のスロークエリ発生件数をSlackに通知する」Bashスクリプトの紹介です。
リンクから、CloudWatch Logsへアクセスする事ができます。
cron等で、日次実行する事を想定しています。
スクリプト(Bash)
CloudShellで動作確認をしています。
#!/bin/bash
#メッセージを保存する一時ファイル
TEMP_MESSAGE_FILE=$(mktemp templogfile.XXXXXX)
# Slack送信用の設定
COLOR='#32CD32'
WEBHOOK_URL='SlackのIncoming WebHooksのURL'
# CloudWatch Logsから、スロークエリのログを、「日本時間:昨日の00:00~23:59までの期間」で取得
REGION='ap-northeast-1'
LOG_GROUP='スロークエリのロググループ名(例:/aws/rds/cluster/gotchamall-prd/slowquery)'
YESTERDAY=`TZ=Asia/Tokyo date -d '-24 hour' '+%Y-%m-%d'`
START_TIME=`TZ=Asia/Tokyo date --date="${YESTERDAY} 00:00:00.000" +%s%3N`
END_TIME=`TZ=Asia/Tokyo date --date="${YESTERDAY} 23:59:59.999" +%s%3N`
# ログストリーム名を取得
aws logs describe-log-streams --log-group-name ${LOG_GROUP} | jq -r ".logStreams[] | .logStreamName" | while read LOG_STREAM; do
# ログをタブ区切りで取得
aws logs filter-log-events --log-group-name ${LOG_GROUP} --log-stream-names ${LOG_STREAM} --start-time $START_TIME --end-time ${END_TIME} \
| jq -r '.events[] | [(.timestamp/1000+32400 | strftime("%Y-%m-%d %H:%M:%S")), .message] | @tsv' \
| sed 's/\\n$//' \
> ${TEMP_MESSAGE_FILE}
# Slackに通知するための各設定
# スロークエリの件数
COUNT=`cat ${TEMP_MESSAGE_FILE} | wc -l`
# タイトル
TITLE="LOG STREAM: ${LOG_STREAM}"
# CloudWatch LogsのURL
URL="https://${REGION}.console.aws.amazon.com/cloudwatch/home?region=${REGION}#logsV2:log-groups/log-group/"
URL="${URL}${LOG_GROUP//\//\$252F}/log-events/${LOG_STREAM}\$3FfilterPattern\$3D\$26start\$3D${START_TIME}\$26end\$3D${END_TIME}"
# 本文
MESSAGE="DATE:${YESTERDAY}\nCOUNT: ${COUNT}\n${URL}"
#Slack Incoming WebHooks 送信
curl -s -S -X POST --data-urlencode \
"payload={ \
\"attachments\": [ \
{ \
\"pretext\": \"${TITLE}\", \
\"color\": \"${COLOR}\", \
\"text\": \"${MESSAGE}\" \
} \
] \
}" \
${WEBHOOK_URL}
done
# 後始末
trap "
rm ${TEMP_MESSAGE_FILE}
" 0
参考元
https://qiita.com/neruneruo/items/eac2ab18686aba0fe483
https://blog.serverworks.co.jp/2022/04/07/163722
https://mariyudu.hatenablog.com/entry/2019/06/29/150937