LoginSignup
1
0

More than 1 year has passed since last update.

Ping監視サーバを作る

Posted at

はじめに

サーバを複数台運用をしているが、先日サーバが落ちていたのを数日間気づかないことが起きました。そこで自作の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分ごとに実行されます。

crontabのガイドライン

おわりに

比較的、簡単に実装することができましたが、Zabbixを使用することになったのでこちらの使いみちはなくなりました。

参考文献

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