はじめに
サーバを複数台運用をしているが、先日サーバが落ちていたのを数日間気づかないことが起きました。そこで自作のping監視をシェルスクリプトで作成、cronに登録し、定期的に実行、異常があればSlackに通知するようにします。
シェルスクリプト作成
今回はホームディレクトリに ping_monitoring
ディレクトリを作成し、その下に3のファイルを作成します。
- server_list:宛先IPアドレス記入用
- log:ログ出力用
- ping.sh:pingを送信用
server_listには以下のように行ごとに宛先IPアドレスを記入します。
192.168.1.1
192.168.1.2
ping.shに以下のスクリプトを書きます。
#!/bin/bash
server_list=~/ping_monitoring/server_list
log=~/ping_monitoring/log
for server in $(cat $server_list)
do
ping $server -c 1 > /dev/null
case $(echo $?) in
0)
echo $(date +%F" "%T && echo $server && echo "OK") >> $log
;;
*)
echo $(date +%F" "%T && echo $server && echo "NG") >> $log
$(curl -d "text=$server NG" -d "channel={チャンネルID}" -H "Authorization: Bearer {Slackトークン}" -X POST https://slack.com/api/chat.postMessage)
;;
esac
done
最初にファイルを変数に代入しています。
server_listに書かれている宛先IPアドレスをfor文で回して、pingを飛ばします。出力先が /dev/null
なのでここでは特に何も起きません。
case文の $?
でpingの実行結果を取得します。ここで成功(サーバが正常)の場合は 0
の処理が、失敗(サーバが異常)の場合は *
の処理が実行されます。
pingの成功、失敗にかかわらず実行結果をlogファイルに追記します。失敗時のみSlackに通知がいくようにしています。
スクリプトを書き終えたファイルに実行権限を付与して、実行します。
chmod +x ping.sh
./ping.sh
正常に動作したら定期実行できるようにcronに登録します。
cronに登録
crontab -e
のコマンドを打ち以下のように書きます。
*/1 * * * * ~/ping_monitoring/ping.sh
crontab -l
で登録したcronを確認できます。登録したものが確認できれば1分ごとに実行されます。
おわりに
比較的、簡単に実装することができましたが、Zabbixを使用することになったのでこちらの使いみちはなくなりました。
参考文献