python x 死活監視 | ping実行とLINE通知

python x 死活監視 | ping実行とLINE通知

みなさん、こんにちは!

今回はサーバの死活監視プログラムとして ping実行のプログラムを書いてみました。

サンプル

先ずは対象システムへpingを飛ばすプログラムを作成します。

今回は ping3モジュールを利用します。

pip install ping3

プログラムは以下の通りです。

import datetime
import ping3

ping3.EXCEPTIONS = True

def ip_check(ipadd):
    try:
        pi = ping3.ping(ipadd)
        pi_message = \
        str(datetime.datetime.now()) +"\n" \
        + "宛先:" + ipadd + "\n" \
        + "応答時間:" + '{:.5f}'.format(pi) + "sec" + "\n" \
        + "/*****/"

    except ping3.errors.HostUnknown:  
        pi_message = \
        str(datetime.datetime.now()) + "\n" \
        + "宛先:" + ipadd + "\n" \
        + "宛先が見つかりません" + "\n" \
        + "/*****/"

    except ping3.errors.PingError:
        pi_message = \
        str(datetime.datetime.now()) + "\n" \
        + "宛先:" + ipadd + "\n" \
        + "不明なエラー" + "\n" \
        + "/*****/"

    return pi_message


if __name__ == "__main__":
            
    print(ip_check("AAAABBBB"))
    print(ip_check("miseruit.com"))
    print(ip_check("yahoo.co.jp"))

結果は以下のようになります。

Lineへ通知する

pingの結果を通知します。

別記事でLINE Notifyの使い方を学んだため、そちらを活用します。

サンプルコードは以下になります。

import datetime
import ping3

ping3.EXCEPTIONS = True

def ip_check(ipadd):
    try:
        pi = ping3.ping(ipadd)
        pi_message = \
        str(datetime.datetime.now()) +"\n" \
        + "宛先:" + ipadd + "\n" \
        + "応答時間:" + '{:.5f}'.format(pi) + "sec"

    except ping3.errors.HostUnknown:  
        pi_message = \
        str(datetime.datetime.now()) + "\n" \
        + "宛先:" + ipadd + "\n" \
        + "宛先が見つかりません"

    except ping3.errors.PingError:
        pi_message = \
        str(datetime.datetime.now()) + "\n" \
        + "宛先:" + ipadd + "\n" \
        + "不明なエラー"

    return pi_message


def line_notify(message):
    
    import requests

    token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ token}
    payload = {"message" : message}
    r = requests.post(url ,headers = headers ,params=payload)


if __name__ == "__main__":
            
    line_notify(ip_check("AAAABBBB"))
    line_notify(ip_check("miseruit.com"))
    line_notify(ip_check("yahoo.co.jp"))

実行結果は以下のような感じです。

今回は以上です!

ではまた。

エラー: データの取得に失敗しました。