oracle notifications を使ってWeb監視結果を通知する

Oracle Cloud always free Advent Calendar 2019の24日目です。

今日は少し趣向を変えてoracle notifications を使ってみようかと思います。

 

oracle notificationsでは、以下のような流れになります。
トピックの作成
サブスクリプションの作成
トピックにメッセージを送信


今回は、トピックにメッセージを送信できる状態になった後、
Web監視の結果、異常があれば、メッセージ送信できるようにします。


トピックの作成
oci ons topic create --name web_monitor
{
・・・・・・
"topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXXXXXX"
},
"etag": "9374236b"
}

 

サブスクリプションの作成
oci ons subscription create --protocol email \
--subscription-endpoint xxxxx@xxx.com \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXX

以下のようなメールが届くので、メール本文のリンクを押下する。
タイトル:Oracle Cloud Infrastructure Notifications Service Subscription Confirmation
本文:You have chosen to subscribe to the topic: web_monitor (Topic OCID: ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtezXXXXXXXX).
To confirm this subscription, click or visit the link below. If this was in error, you can ignore this message.

 

リンクを押下すると、「Subscription confirmed」と表示される。

 

 

#メッセージの送信
oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez7XXXXXXXXXX \
--body "test message send"

 

Oracle Cloud Notification Message」というタイトルのメールが届くはずです。

 

#web監視用のシェル作成
cat << 'EOF' > web_monitor.sh
#!/bin/bash

target_url="http://yahoo.co.jp/"

## target_url へのアクセスを試みる
message=`curl -o /dev/null -s -w %{http_code} $target_url`

## curl 結果 http_code が 200/3xx だったらスクリプト終了
if [[ "$message" =~ 200 || "$message" =~ 3[0-9]{2} ]]; then
exit 0
fi

echo $message

oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez77chv4sii2y5XXXXXXX \
--body "target url $target_url is down"
EOF

 

#シェルへ実行権限付与

chmod +x web_monitor.sh

 

#シェルの実行
./web_monitor.sh

 

監視対象のWebホストにアクセスできなければ、メールが届きます。

 

このweb_moniter.shをcronか何かで登録すれば簡易Web監視ができます。

 

<参考>

www.s-style.co.jp

qiita.com