概要
ラズベリーパイから監視対象(今回Android端末)へpingを送信してタイムアウトすれば障害発生、通れば正常という判定をします。
今回は5秒おきにpingを送信し、これが5回連続で失敗した場合は障害としてLINE NOTIFYに通知を送るようにします。
作成したきっかけ
とあるスマホゲームで自動操作をさせているときにたまにOSの再起動が発生して自動操作が止まってしまっていたため、そのときは携帯電話に通知がしたいなと思いました。
ラズベリーパイを選んだのは省電力で動作することやPythonがデフォルトで搭載されているのでこれが良いのかなという考えからです。
使った物品
- Raspberry Pi 3b
準備
- LINE NOTIFYのAPIアクセストークン発行
- Python用の必要なライブラリのインストール
sudo pip install pings
sudo pip install requests
コード
ping_monitoring.py
import pings
import requests
import time
import datetime
def line(message):
line_access_token = 'アクセストークン'
line_url = "https://notify-api.line.me/api/notify"
line_headers = {"Authorization" : "Bearer "+ line_access_token}
line_message = message
line_payload = {"message" : line_message}
requests.post(line_url ,headers = line_headers ,params=line_payload)
def send_ping(ipaddr):
p = pings.Ping()
res = p.ping(ipaddr)
if res.is_reached():
return True
else:
return False
if __name__ == '__main__':
ipaddr = "対象のIPアドレス"
ngcount = 0
while True:
if send_ping(ipaddr):
ngcount = 0
print(datetime.datetime.now(),"ping OK")
else:
ngcount += 1
print(datetime.datetime.now(),"ping NG",ngcount)
if ngcount >= 5:
line("ping失敗。送信先({})機器を確認してください。".format(ipaddr))
break
time.sleep(5)
つまづいたところ
pingsライブラリをインポートしてpingを送信しますが、プログラム実行はsudoコマンドでスーパーユーザ権限を持って実行しないとpingが通りませんでした。Linuxチョットワカラナイ
感想
簡単なpingのプログラムで死活監視をやってみました。死活監視はいろいろな方法があるのでやってみたいですね。