🩺
【Healthchecks.io】爆速で作る自宅ネット死活監視
自宅のネットが死んだらDiscordに通知が来る便利システムを組んだので備忘録。
必要なのは監視に使うサーバと、Discordアカウントだけ。仕組みとしてはローカルサーバがHealthchecks.ioにcronでPOST通信を投げ続け、一定間隔不通になると発報する。
ポイントとしては検知と発報をインターネット側で行うので、ルータやONUが死んで監視サーバの通信が外に出られない状態でもリアルタイムで通知が来る。
Helthchecks.ioの登録と監視設定
- Healchecks.ioのサイトにアクセスして、[Start Monitoring] > [Log In] から自身のメールアドレスを登録する。
https://healthchecks.io/
- 画面右上の [Account] > [Account Settings] > [Account] > [Email and Password] から、アカウントのパスワードを設定する。
- プロジェクトを作成していく。今回は例として新規で「ネット監視」というプロジェクトを作ったが、初期では監視項目がなにもないので、 [Add Check] から追加する。
[Slug] とか [Tags] はとりあえず無視で、名前だけ入れればOK。
- 作成が完了したら、追加された監視項目の [Period Grace] 欄を押下し監視間隔を設定する。
今回はチェックを1分ごとに行い、3回のロスで発報させるため 「Periodを1minutes、Grace Timeを3minutes」 に設定した。
Discord連携
-
[サーバーを追加] から、アラート受信用サーバーを作成する。
- Healthchecks.io側にて [INTEGRATIONS] > [DiscordのAdd Integration] > [Connect Discord] を押下するとDiscordの画面が開くので、先ほど作成したサーバー・チャンネルを選択する。
- INTEGRATIONSにDiscordの項目が追加されればOK
サーバ側設定
- 【参考】Shell Scripts
https://healthchecks.io/docs/bash/
- 自宅ネットワーク内部にサーバを設置する。今回はMilk-v DuoSで作った手のひらサーバを使うが、ぶっちゃけcronでcurlを投げられれば何でもいい。
- cronを仕込む。なお PING_URL には、[CHECKS] タブの監視項目に表示されている [Ping URL] の値を使用する。
/usr/local/bin/healthcheck.sh
#!/bin/bash
PING_URL=https://hc-ping.com/your-uuid-here
curl -fsS -m 10 --retry 3 $PING_URL
echo " * * * * * root /usr/local/bin/healthcheck.sh" >> /etc/crontab
chmod a+x /usr/local/bin/healthcheck.sh
ls -l /usr/local/bin/healthcheck.sh
apt install curl -y
- サーバをインターネットに接続し、問題なく監視がスタートしたことを確認する。
- サーバをダウンさせ、通知が届くことを確認する。
おまけ
POSTには任意の文字列(100KBまで)を含めることができる。
例えば下のようにコマンド出力結果やメッセージをスクリプトに仕込めば、インターネット上で内容を確認できる。
/usr/local/bin/healthcheck.sh
#!/bin/bash
PING_URL=https://hc-ping.com/your-uuid-here
PING_DATA="$(date +"%Y-%m-%d %H:%M:%S") UNCHI PURI"
curl -fsS -m 10 --retry 3 --data-raw "$PING_DATA" $PING_URL
もっと複雑なスクリプトを組めば死活以外の条件による発報もできるっぽいけど、今回はここまで。
Discussion