NewRelicのSynthetic Monitorを利用した外形監視を実装する

# この記事について

NewRelicのSynthetic Monitorを利用すれば、WEBシステムへの外形監視を簡単に実装することが可能です。
https://docs.newrelic.com/jp/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring/

この記事では実際にSynthetic Monitorを利用してWEBサイトへの外形監視を行い、異常が発生した際にSlackに通知できるように実装します。

# 構成

今回外形監視の対象としてテスト対象サイトである「HOTEL PLANISPHERE」を利用します。
https://hotel.testplanisphere.dev/ja/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/46c10e67-8e26-8862-ed2a-364291f2f1ae.png)

外形監視はHTTPリクエストを送ってレスポンスコードが200であれば正常と判断するシンプルなものとします。(NewRelic SyntheticではPing Monitorと呼ばれています)

# 実装

## Synthetics Monitorの作成

NewRelicのウェブUIから「Synthetic Monitor」 => 「Create Monitor」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/d0bd399a-dffa-a3a8-7db5-c5e5528ec7ab.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/79c8e400-a9e8-e59b-2763-3e488302801b.png)

Monitorの種類を指定します。ここで「Availability Ping」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/2146ac31-c6ab-b8d9-c01e-928a4decbfed.png)

監視対象のURLなどを設定します。(ここではAdvanced optionsは設定しません)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/187a7aad-e2d6-7b69-c762-772682e34667.png)

外形監視の送信元ロケーションを指定します。
今回はあくまでテストなので、Tokyoのみとします。実際は3ロケーション以上指定することが推奨されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/c89e4d8e-185b-2f18-5c7d-1d4fee0e5503.png)

Success rateが100%になっており、Checks failedがカウントされていないため、正常に外形監視ができていそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/ab267c6a-ee14-d764-216c-a981414ca6ba.png)


## Condtionの作成

Synthetic Monitorを作成したため、外形監視自体は行えるようになりました。
次にこの外形監視を利用して、閾値を設けて、通知を行えるようにConditionを作成します。

「Alerts & AI」から「Alert condtions (Policies)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/69f799b2-7ac2-95a5-218a-26a18dc70bd8.png)

「New alert policy」をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/d7f9abd1-60bc-ac4e-3fd2-9ba6df55ba84.png)

任意の名前を入力して、「One issue per incident」を選択してから、「Set up notifications」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/ec76e160-df36-7f65-dbe7-4b07cc563922.png)

「Slack」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/3adbebb0-3d86-bbf3-ba5b-80dce19054a4.png)

destinationは「Create new destination」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/7b54b19b-3ac0-999c-6d29-e75c1f567b63.png)

「Authenticate in one click」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/32f7daa3-b8d2-7315-9868-37376413c9fa.png)

Slackの認証サイトへリダイレクトされるため、「許可する」をクリックします。(利用しているSlackの環境によってこの辺の挙動は変わるので、ご注意ください)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/cb95ce31-c9fd-dbca-c90f-7fc2a5f8a1ba.png)

認証に成功するとワークスペースが登録されるので、destinationに登録されたワークスペースを追加します。そして通知を飛ばしたいチャンネルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/1530d031-b2c8-c6ba-fbf4-e24ed4acc17b.png)

「Send test notification」を選択して、Slackにテスト通知を行います。
「Test notification sent successfully」と表示されたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/a7e53e72-0b74-03f7-5b4b-2b31195c56dd.png)

Slackにて通知されているか確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/460e09ea-314d-481c-2efe-4f2934f0032b.png)

「Activate workflow」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/dec46e8c-96c5-054e-da6e-0eb2f2c74a1b.png)

「Create a conditon」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/d7af9b8a-a7a8-fdcf-b3ad-6262130d7567.png)

「Synthetics」 -> 「Single failure」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/6ee570a8-4136-f5bf-423d-e159bc1d4789.png)

作成したSynthetic Monitorを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/8bdfeffd-f8e3-037d-eeb7-07301907de78.png)

Condtion名を入力して、「Create condition」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/6ffd3c00-d469-dc98-a729-4b2c42fe55fc.png)

Condtionが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/15c0c449-b9fe-375d-5a68-cdab08a7570f.png)

## 動作確認

HOTELPLANISPHERE(https://hotel.testplanisphere.dev)を停止することはできないので、Synthetic Monitorの設定を一時的に変更して、疑似的な障害を発生させます。

Synthetic Monitorから「Settings」 -> 「General」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/b0c0fcc4-9c99-6ead-ae77-82e5eb8a2b6a.png)

URLにダミーのパスを追加して、外形監視が失敗するようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/647ec44e-6223-027a-83c7-8b5ddc67bcae.png)

外形監視が失敗していることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/9811a510-c767-0d4b-9037-7a23be5cd7fe.png)

数分待って、Condtionを確認すると「open incident」と表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/09dcc059-d22a-23e6-64a0-38284e0eb62a.png)

「open incident」を選択すると、インシデントの詳細を確認することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/3cb7c4a6-2eb7-347d-07db-2c8bcfd5d8df.png)

Slackに通知がきていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/85e9294c-0f6e-40b3-bb4b-132cd1e15039.png)

# 最後に

外形監視の実装手順は以上になります。
簡単に実装できることを理解いただけたかと思います。

今回はPing Monitorというステータスコードが200であることを成功判断とする、最も簡単なSynthetic Monitorで実装を行いました。他にも複雑な外形監視を実装する機能がありますので、以下の記事も併せてご確認ください。

https://qiita.com/K5K/items/2f69ff1e631f8bd325d1