概要は、『fluentdでShellScriptを定期的にkickし、返り値をtsv形式で受け取る』という感じ。fluentdで受け取ったあとは、outputプラグインにお任せしましょう。
まずはShellScript。『aws cloudwatch get-metric-statistics』で取得した値を、tsv形式で吐き出すスクリプトです。今回はSNS通信の送信・失敗数をカウントすることにしました。
get-metric-statisticsは該当する値が無いとnullを返すので、『0』を代入する必要が有ります。これくらいしか悩む所ありません。
#!/bin/bash
export AWS_CONFIG_FILE=[適当なパス]
if [ $# -ne 1 ]; then
LASTSEC=300
else
LASTSEC=$1
fi
LASTSEC_CMD="$LASTSEC seconds ago"
NOW=`date +"%Y/%m/%dT%I:%M:%SJST"`
LASTDAY=`date -d "$LASTSEC_CMD" +" %Y/%m/%dT%I:%M:%SJST"`
# DEBUG -----------------------------------
#LASTDAY=`date -d '5 days ago' +"%Y/%m/%dT%I:%M:%SJST"`
# Get CloudWatch DATA ---------------------
SEND=`/usr/bin/aws cloudwatch get-metric-statistics --namespace "AWS/SNS" --metric-name "NumberOfMessagesPublished" --start-time $LASTDAY --end-time $NOW --period $LASTSEC --statistics "Sum" --dimensions Name=Application,Value=********** --output text | awk 'NR==2 {print $2}'| sed -e "s/.0//g"`
FAILED=`/usr/bin/aws cloudwatch get-metric-statistics --namespace "AWS/SNS" --metric-name "NumberOfNotificationsFailed" --start-time $LASTDAY --end-time $NOW --period $LASTSEC --statistics "Sum" --dimensions Name=Application,Value=********** --output text| awk 'NR==2 {print $2}'| sed -e "s/.0//g"`
# null check ------------------------------
if [ -z $SEND ]; then
SEND="0"
fi
if [ -z $FAILED ]; then
FAILED="0"
fi
# echo TSV Format -------------------------
echo -e "$SEND\t$FAILED"
このShellScriptをfluentdからkickしてもらいます。ShellScriptから吐き出されたtsvにはkey、tagがないので、ここで定義します。起動間隔もここで定義できます。
<source> type exec command [shellのパス] keys [key名1],[key名2] tag [タグ名] run_interval 300s </source>fluentdに投げ込んだ後は、S3に送るなりmongoDBに喰わせるなりご自由に!
0 件のコメント:
コメントを投稿