[初心者向け] New RelicのSynthetic Monitoringを自宅のサーバに使ってみよう

みなさんご機嫌よう！むらさめです。
そろそろ寒くもなって自宅のサーバが程よく冷える時期になっている中いかがお過ごしでしょうか？
私の場合は部屋が寒くなってもサーバが温かい限り快適に過ごせています。
### ただそのサーバ、ちゃんと動いてる保障ありますか？
自宅に限らずサーバが止まると起こる不都合多いと思います。
- シンクライアント環境で開発ができない
- デプロイしたサービスが落ちる
- 部屋が寒くなる

いち早くサーバの停止を知りたいそんなあなたの為に、やりましょう合成監視

## Synthetic Monitoringとは？
システムが稼働するネットワークの外側からユーザ視点で監視することでユーザーが体感している表示速度や応答時間などのパフォーマンスを、リアルタイムで計測・把握することができるというもの。
詳しいことは下のリンクで説明されてるので見てみてください！

https://newrelic.com/jp/blog/best-practices/what-is-synthetics

## New Relicでの実装

### 準備
今回の環境は次のようになってます
| machine | CPU | MEM | storage | IP | 
| -- | -- | -- | -- | -- |
| nr-cpm-agent | 1vCPU | 4GB | 50Gi | 192.168.100.55/24 | 
| vm-1 | 4vCPU | 8GB | 30Gi | 192.168.100.54/24|

nr-cpm-agentというマシンをprivate locationにする予定です。
マシンのスペックは [公式のドキュメント](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/install-job-manager/#system-requirements)を参考に推奨値に設定をしてます。
vm-1が監視対象のVMになってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/5f9f36e5-4956-3760-a419-6328da84536a.png)
nr-cpm-agentからしっかりと疎通は取れる状態になってます。

### private locationの作成
今回ホームラボ用に作るため、できるだけエンドポイントを外部に公開したくないため自宅にAgentを配置して監視しようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/e9235157-f29f-07b7-d01e-d84bac868f88.png)
New Relic ダッシュボードのナビゲーションから Synthetic Monitoring > Private locationsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/1ebec6db-1cd8-4102-732a-81221cabde85.png)
Create private locationをクリックして作りましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/21450c64-ca77-7568-6564-777f90018363.png)

右側にホームがひょこっと出ると思うのでこいつにわかりやすい名前を付けて Generate Keyを押下…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/9e032cbf-348a-2c8f-d7a2-d9f92565d3c7.png)
すると kubernetesとDockerのhelmや起動コマンドが出ます。
今回はDocker上で動かしたいので下の方にある Docker run コマンドをコピーしておく。

private locationとして動作させたマシンにペーストしてあげる。
```bash
$ docker run \ 
-e PRIVATE_LOCATION_KEY=NRSP-******** \
-d --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock:rw \
newrelic/synthetics-job-manager

$ docker ps
CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS           NAMES
9ee39cde6ef2   newrelic/synthetics-ping-runtime:latest   "/data/synthetics-pi…"   41 seconds ago   Up 40 seconds   8080-8082/tcp   PING
c7f0946ea91d   newrelic/synthetics-job-manager           "/data/synthetics-jo…"   51 seconds ago   Up 50 seconds   8080-8082/tcp   youthful_bhabha
```
こんな感じになればprivate locationの設定はOK！

### monitor jobを作成する
ダッシュボードに戻り、 ナビゲーションから Synthetic Monitoring > Monitors > Create your fast monitorを選択しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/e380356c-58f7-d35d-8cf0-e4e7fccbd71b.png)

Select monitor typeがいくつか出てくるなかで **Endpoint availability**を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/f69ea9d6-0ae8-7596-f14b-6f1187ae31e7.png)

わかりやすい適当な名前を付ける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/621094ea-f963-9582-551a-64164a3f4e78.png)

Select locationsで先ほど作ったprivate locationを選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/6a122c28-cf55-521e-80a2-86dbfd0d5623.png)

Write Scriptはnew relicのQuick startを参考にICMPのスクリプトを貼り付けてください
この時、
```js
var checks = [
 { 'host': 'vm-1', 'ip': '192.168.100.54' },
]
```
のように変更して save monoitorを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/f35ce865-52d9-7599-d649-75e80bf04570.png)

https://github.com/newrelic/quickstarts-synthetics-library/blob/main/library/ICMP/script.js

するとMonitorが作られるので覗いていきましょ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/bf50c7c7-a763-3f33-5ffb-dc1ebbd8f0a7.png)

### ダッシュボードを覗いてみる

先ほど作ったjobのダッシュボードを覗いてみると、幾度か成功してるのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/1775a580-7842-e78a-0477-b2f32a25131e.png)

試しにVMを落として、 `Run check`を回してみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/0d2e624c-92ef-6a8d-f724-a407a2df6b00.png)
しっかり失敗してるのがわかります。

### アラートの設定
ここまで来たらあとは通知設定を済ませるだけです。

Alert Conditions > New alert Conditionsで新しいアラートのルールを作りましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/aaeadc0a-3faa-6ada-bb25-18e339608d20.png)

Use guided modeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/f5ac489c-6003-22cb-59f9-d1264079c1a9.png)

Synthetic monitorsを選択してNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/bcce261a-0bad-3af6-73f5-9af59d644061.png)

今回作ったvm-1(job)を対象にして、ICMPに失敗したときにアラートを出したいので、Failuresを選択
(NRQL吐き出してくれるの便利すぎる…)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/340f9225-2da8-9b20-8253-99364d85fe48.png)

今回はalertがこれだけなのでone issue per policyを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/4cd7d286-29f8-f186-b987-5c6e43570672.png)

Alert Conditionが作った後、VMを落とすと・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632123/f97c1473-88ac-7e56-948a-4f76a40453c3.png)
しっかりとCritical レベルでアラートが出てることがわかります。
後はPagerDutyやSlackと連携することでいつでも通知を飛ばせそうですね！
（PagerDutyのアカウント作ったら連携した記事も出そうと思います。)
## まとめ
自宅や非公開のサーバ群の死活監視等もNew RelicのSynthetic Monitoringを使えばできるので皆さんのご自宅で働いてるサーバも監視してみませんか？
他にもSynthetic Monitoringでは、Webページのロードパフォーマンスの監視やSSLの証明書チェックなど様々な事ができます。
皆さんも使ってみてください！