LoginSignup
1
0

More than 3 years have passed since last update.

ELBの持つIPとノード数を1分おきに取得(dig)し、ノード数に変更ある場合にはSlack通知する

Last updated at Posted at 2019-08-03

前回「ELBのIPと台数をひたすらdigしておく」の進化版です
Slackに通知してみました

  • elb-node-watch チャンネル

    • ELBの持つIPとノード数を1分おきにdigした結果を通知 image.png
  • elb-node-change チャンネル

    • ELBの持つIPとノード数を1分おきにdigし、ノード数に変更ある場合に通知 image.png

実行例


# 適当な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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0