ELBの持つIPとノード数を1分おきに取得(dig)し、ノード数に変更ある場合にはSlack通知する
19310 ワード
前回「ELBのIPと台数をひたすらdigしておく」の進化版です
Slackに通知してみました
-
elb-node-watch チャンネル
-
elb-node-change チャンネル
実行例
# 適当なEC2を使いバックグラウンド実行しておく
sh elbdig.sh xxxx.ap-northeast-1.elb.amazonaws.com testelb &
elbdig.sh
#!/bin/bash -
# ELBのIPアドレスとノード数をdigコマンドから取得しSlackに通知します
# 第一引数=ELBのDNS名
elbname=$1
# 第二引数=ELBの略称 (WEB,APなど)
elbnickname=$2
# hook URL
url=https://hooks.slack.com/services/xxxx/xxxx/xxxx
# 通知チャンネル設定
channel_watch="elb-node-watch"
icon_watch=":elb_icon:"
username_watch="ELBのIPアドレス・ノード数確認bot"
# ノード数に変更あった際の通知チャンネル設定
channel_change="elb-node-watch"
icon_change=":elb_icon:"
username_change="ELBのノード数変更を通知するbot"
# 何分に1回Slackに送るか (1=1分)
sendcount=15
count=0
# TTL (DNSレコードのTTL)
ttl=60
# ノード数初期化 (ありえない数値にしておく)
number1=1000
number2=1000
# 無限ループ開始
while :
do
# 1回目
# sleep 60 (TTL=60)
sleep ${ttl}
datetime1=$(date "+%Y-%m%d-%H:%M-%S(JST)")
ipaddrlist1=$(dig ${elbname} |grep -v -E "^(;|$)" |awk '{print $5}' |sort -n -t'.' -k1,1 -k2,2 -k3,3 -k4,4 |awk -v 'RS=nothing!!!!' '{print $1,",",$2,",",$3,",",$4,",",$5,",",$6,",",$7,",",$8}')
number1=$(dig ${elbname} |grep -v -E "^(;|$)" | wc -l)
text1="${elbnickname}\t${datetime1}\t${number1}\t${ipaddrlist1}"
echo -e ${text1} |tee -a ${elbname}.txt
count=$(( count + 1 ))
countresult=$((${count} % ${sendcount}))
if [ ${countresult} -eq 0 ]; then
curl -X POST --data-urlencode "payload={\"username\": \"${username_watch}\", \"icon_emoji\": \"${icon_watch}\", \"channel\": \"${channel_watch}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"略称\t時間\tノード数\tIPアドレス\n${text1}\"}]}" ${url} >/dev/null 2>&1
fi
# 前回の値ある場合のみ実行
if [ ${number2} -ne 1000 ]; then
# ノード数に変更あった際の処理
if [ ${number1} -ne ${number2} ]; then
# ログにchangedと出力
echo "changed" |tee -a ${elbname}.txt
# Slackに通知
curl -X POST --data-urlencode "payload={\"username\": \"${username_change}\", \"icon_emoji\": \"${icon_change}\", \"channel\": \"${channel_change}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"${datetime1}\n*ノード数に変更あり*\n${elbnickname}\n変更前:${number2}\n変更後:${number1}\nノード数は下記のチャンネルにおいても確認できます\n#作成中\"}], \"link_names\": 1}" ${url} >/dev/null 2>&1
fi
fi
# 2回目
# sleep 60 (TTL=60)
sleep ${ttl}
datetime2=$(date "+%Y-%m%d-%H:%M-%S(JST)")
ipaddrlist2=$(dig ${elbname} |grep -v -E "^(;|$)" |awk '{print $5}' |sort -n -t'.' -k1,1 -k2,2 -k3,3 -k4,4 |awk -v 'RS=nothing!!!!' '{print $1,",",$2,",",$3,",",$4,",",$5,",",$6,",",$7,",",$8}')
number2=$(dig ${elbname} |grep -v -E "^(;|$)" | wc -l)
text2="${elbnickname}\t${datetime2}\t${number2}\t${ipaddrlist2}"
echo -e ${text2} |tee -a ${elbname}.txt
count=$(( count + 1 ))
countresult=$((${count} % ${sendcount}))
if [ ${countresult} -eq 0 ]; then
curl -X POST --data-urlencode "payload={\"username\": \"${username_watch}\", \"icon_emoji\": \"${icon_watch}\", \"channel\": \"${channel_watch}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"略称\t時間\tノード数\tIPアドレス\n${text2}\"}]}" ${url} >/dev/null 2>&1
fi
# ノード数に変更あった際の処理
if [ ${number1} -ne ${number2} ]; then
# ログにchangedと出力
echo "changed" |tee -a ${elbname}.txt
# Slackに通知
curl -X POST --data-urlencode "payload={\"username\": \"${username_change}\", \"icon_emoji\": \"${icon_change}\", \"channel\": \"${channel_change}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"${datetime2}\n*ノード数に変更あり*\n${elbnickname}\n変更前:${number1}\n変更後:${number2}\nノード数は下記のチャンネルにおいても確認できます\n#作成中\"}], \"link_names\": 1}" ${url} >/dev/null 2>&1
fi
# 無限ループ終了
done
# 適当なEC2を使いバックグラウンド実行しておく
sh elbdig.sh xxxx.ap-northeast-1.elb.amazonaws.com testelb &
#!/bin/bash -
# ELBのIPアドレスとノード数をdigコマンドから取得しSlackに通知します
# 第一引数=ELBのDNS名
elbname=$1
# 第二引数=ELBの略称 (WEB,APなど)
elbnickname=$2
# hook URL
url=https://hooks.slack.com/services/xxxx/xxxx/xxxx
# 通知チャンネル設定
channel_watch="elb-node-watch"
icon_watch=":elb_icon:"
username_watch="ELBのIPアドレス・ノード数確認bot"
# ノード数に変更あった際の通知チャンネル設定
channel_change="elb-node-watch"
icon_change=":elb_icon:"
username_change="ELBのノード数変更を通知するbot"
# 何分に1回Slackに送るか (1=1分)
sendcount=15
count=0
# TTL (DNSレコードのTTL)
ttl=60
# ノード数初期化 (ありえない数値にしておく)
number1=1000
number2=1000
# 無限ループ開始
while :
do
# 1回目
# sleep 60 (TTL=60)
sleep ${ttl}
datetime1=$(date "+%Y-%m%d-%H:%M-%S(JST)")
ipaddrlist1=$(dig ${elbname} |grep -v -E "^(;|$)" |awk '{print $5}' |sort -n -t'.' -k1,1 -k2,2 -k3,3 -k4,4 |awk -v 'RS=nothing!!!!' '{print $1,",",$2,",",$3,",",$4,",",$5,",",$6,",",$7,",",$8}')
number1=$(dig ${elbname} |grep -v -E "^(;|$)" | wc -l)
text1="${elbnickname}\t${datetime1}\t${number1}\t${ipaddrlist1}"
echo -e ${text1} |tee -a ${elbname}.txt
count=$(( count + 1 ))
countresult=$((${count} % ${sendcount}))
if [ ${countresult} -eq 0 ]; then
curl -X POST --data-urlencode "payload={\"username\": \"${username_watch}\", \"icon_emoji\": \"${icon_watch}\", \"channel\": \"${channel_watch}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"略称\t時間\tノード数\tIPアドレス\n${text1}\"}]}" ${url} >/dev/null 2>&1
fi
# 前回の値ある場合のみ実行
if [ ${number2} -ne 1000 ]; then
# ノード数に変更あった際の処理
if [ ${number1} -ne ${number2} ]; then
# ログにchangedと出力
echo "changed" |tee -a ${elbname}.txt
# Slackに通知
curl -X POST --data-urlencode "payload={\"username\": \"${username_change}\", \"icon_emoji\": \"${icon_change}\", \"channel\": \"${channel_change}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"${datetime1}\n*ノード数に変更あり*\n${elbnickname}\n変更前:${number2}\n変更後:${number1}\nノード数は下記のチャンネルにおいても確認できます\n#作成中\"}], \"link_names\": 1}" ${url} >/dev/null 2>&1
fi
fi
# 2回目
# sleep 60 (TTL=60)
sleep ${ttl}
datetime2=$(date "+%Y-%m%d-%H:%M-%S(JST)")
ipaddrlist2=$(dig ${elbname} |grep -v -E "^(;|$)" |awk '{print $5}' |sort -n -t'.' -k1,1 -k2,2 -k3,3 -k4,4 |awk -v 'RS=nothing!!!!' '{print $1,",",$2,",",$3,",",$4,",",$5,",",$6,",",$7,",",$8}')
number2=$(dig ${elbname} |grep -v -E "^(;|$)" | wc -l)
text2="${elbnickname}\t${datetime2}\t${number2}\t${ipaddrlist2}"
echo -e ${text2} |tee -a ${elbname}.txt
count=$(( count + 1 ))
countresult=$((${count} % ${sendcount}))
if [ ${countresult} -eq 0 ]; then
curl -X POST --data-urlencode "payload={\"username\": \"${username_watch}\", \"icon_emoji\": \"${icon_watch}\", \"channel\": \"${channel_watch}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"略称\t時間\tノード数\tIPアドレス\n${text2}\"}]}" ${url} >/dev/null 2>&1
fi
# ノード数に変更あった際の処理
if [ ${number1} -ne ${number2} ]; then
# ログにchangedと出力
echo "changed" |tee -a ${elbname}.txt
# Slackに通知
curl -X POST --data-urlencode "payload={\"username\": \"${username_change}\", \"icon_emoji\": \"${icon_change}\", \"channel\": \"${channel_change}\", \"attachments\": [{\"title\": \"ELB名\n${elbname}\",\"text\": \"${datetime2}\n*ノード数に変更あり*\n${elbnickname}\n変更前:${number1}\n変更後:${number2}\nノード数は下記のチャンネルにおいても確認できます\n#作成中\"}], \"link_names\": 1}" ${url} >/dev/null 2>&1
fi
# 無限ループ終了
done
Author And Source
この問題について(ELBの持つIPとノード数を1分おきに取得(dig)し、ノード数に変更ある場合にはSlack通知する), 我々は、より多くの情報をここで見つけました https://qiita.com/yamazon/items/79241fc70cf5b4150ce2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .