StackdriverMonitoringでURL外形監視をしてSlackにメンション付きで通知する

最近、StackdriverMonitoringの`稼働時間チェック`からURL指定で監視ができることに気づきました。

しかも料金:moneybag:が無料みたいです。
https://cloud.google.com/stackdriver/pricing?hl=ja#monitoring-costs
> 稼働時間チェック（稼働時間チェックの指標データを含む）、高度なアラート、通知は課金対象外で、すべてのユーザーが利用できます。

設定してみたので手順を書いて行きます。

# StackdriverMonitoringでURL外形監視をしてSlackにメンション付きで通知する手順

## slackアプリの準備
- Google Cloud Monitoring アプリを使いましょう
    - webhookでなくアプリを使うと、インシデントの発生と解決で色分けがされるので便利です。

## GCPで外形監視を設定する
https://sensy.ai/ を見守ってみたいと思います。

- Google Cloud Monitoringのworkspaceを立ち上げる
    - ![monitoring0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/27310df5-631b-7b54-ce05-c5cb73fb00e8.png)
- 通知チャネルにslackのチャンネルを追加
    - ![monitoring1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/81bfb6a3-4213-58f2-d548-769949b96899.png)
    - ![monitoring2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/137fab2a-f1db-9ef2-1f48-0bc636ffa6f9.png)
    - 設定したものは後で使います
- URL監視を設定
    - ![monitoring3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/ecbf0cb8-147c-a1bd-5461-60d58e763378.png)
    - レスポンスが200を返すかどうかであれば特にoptionを埋める必要はありませんでした
         - ![monitoring4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/2d3a32c9-91e2-f3e8-39ad-90f360936d7f.png)
    - APIサーバーのレスポンス内容を考慮する場合はoptionから設定できます
         - ![monitoring5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/0fbdba38-26db-3030-0a96-7206d60d8e83.png)
         - 参考: https://cloud.google.com/monitoring/uptime-checks?hl=ja の [Response content contains the text] の部分
         - 静的ファイルが存在するかどうかも同様に特定のテキストが含まれるかどうかをチェックすれば良さそうです。
- アラートポリシーを設定
    - URL監視設定を終えると続けてポリシーを設定するか問われるので、続けて設定しましょう
         - ![monitoring6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/c096746a-42b2-5055-ed4f-954c284ad5c6.png)
    - 稼働時間チェックのところからも追加できます
　　　　　 - ![monitoring7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/4692c6a1-5da1-602d-4c5a-d1763ddc0b4f.png)
    - アラート条件をシステムダウンが1分続いたらに設定します
         - ![monitoring8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/4ca381f0-34bb-3dbf-ad0f-9030b426e0d4.png)
    - (忘れがち)通知先でSlackを選択し、チャンネルを選びます
         - ![monitoring9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/fca475cc-aa7f-60a9-aa36-662d51180225.png)
    - ドキュメントにアラート文言を追加します
         - channelにメンション付きでアラートしたい場合は`<!channel>`とします
         - ![monitoring12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/3b80dcf1-5676-7f7b-8f5f-ed73a41f6b47.png)
         - こんな感じで通知されます
            - <img width="436" alt="monitoring15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/ab1969cc-fb16-1e2d-6a0b-dcfb3d36bd12.png">
- テスト
    - 監視設定をいじってテストしてみます。(存在しないパスを渡してみる)
        - ![monitoring13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/1b97390f-c60d-44bb-686f-1fe8fd5b9dae.png)
        - ![monitoring14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/f22eed9b-ea78-74b9-1787-c68ae088afe5.png)
    - 時間が経つとエラーが通知されます(設定を元に戻しましょう)
        - <img width="436" alt="monitoring15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/7f896641-7cf9-3f63-739b-799d33849648.png">
    - レスポンスが正常に戻ると解決を知らせる通知が来ます
        - <img width="718" alt="monitoring17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/c0a40e5b-056e-a859-ce94-fcee391e4681.png">
    - インシデントが解決されたことを確認しましょう
        - ![monitoring18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/138cd22e-2dc9-6359-3a93-4cf03530b8a0.png)
- その他
    - 監視のパス状況やレスポンス速度が見れます
       - ![monitoring19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/0c8aa3f4-77bb-34bc-6894-addc3e0c46a1.png)

監視設定は以上です。
pingdomに負けず劣らずの充実っぷりだったので、長く付き合って行けそうです。