概要は、『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 件のコメント:
コメントを投稿