Linux
AWS
shell

traceroute監視アラートShell作成

More than 1 year has passed since last update.

背景

tracerouteした際に、!Xが含まれてたらフィルタリングされているから問題ないけど、それが外れたらまずいんでアラート飛ばせるようにしてほしいと依頼を受けた。

作成

参考:http://calcabrina.net/archives/53/

作成したのは以下

#!/bin/sh
IP_ADDR_ARRAY=("***.***.***.***");

NUM=0
for IP in ${IP_ADDR_ARRAY[@]}
do
  log_file="/root/shell/tr_${IP}_`date +%Y%m%d%H%M`.txt"
  traceroute ${IP} > ${log_file}
  if grep -q !X ${log_file}

  then
    echo "${IP} : OK" > /dev/null 
    rm ${log_file}

  else
    echo "${IP} : NG" | mail -s "*** Alert: Filter error. ***" ***@xx.co.jp
  fi
  NUM=`expr ${NUM} + 1`

done

上から
IP_ADDR_ARRAY=("***.***.***.***");
ここで監視対象を指定。複数指定する場合は半角スペースを開けて記載する。

for IP in ${IP_ADDR_ARRAY[@]}
指定アドレスを配列として読み込む。

log_file="/root/shell/tr_${IP}_`date +%Y%m%d%H%M`.txt"
tracerouteの出力先を指定。IPごと、分ごとにリネームするよう設定してます。

traceroute ${IP} > ${log_file}
if grep -q !X ${log_file}

tracerouteの出力から"!X"という文字列を探す。!Xがあればフィルタリングされていると判断していい(らしい)

then
echo "${IP} : OK" > /dev/null
rm ${log_file}

else
echo "${IP} : NG" | mail -s "*** Alert: Filter error. ***" ***@xx.co.jp

!XがあればOKです、/dev/nullを外せば普通にOKと出力されます。
正常に出力されているのでログファイルは削除で。

!XがなければIP:NGという本文で指定したメアドに送るようにしています。

それをループするように指定してます。

その他

・実行権限を付けないとcronで実行されないのでchmod 755とかにしてください。
・IPの指定はtarget.listとかにした方がスマートよね。今回はIP指定が一つだけだったので直書きしてます。


2017/07/07 17:31追記
複数IP指定した際、最後のIPがNGの場合にしかログが残らないのでは?というご指摘を受けたのでlog_file指定をdoの中で実施するよう変更。