みなさんご機嫌よう!むらさめです。
そろそろ寒くもなって自宅のサーバが程よく冷える時期になっている中いかがお過ごしでしょうか?
私の場合は部屋が寒くなってもサーバが温かい限り快適に過ごせています。
ただそのサーバ、ちゃんと動いてる保障ありますか?
自宅に限らずサーバが止まると起こる不都合多いと思います。
- シンクライアント環境で開発ができない
- デプロイしたサービスが落ちる
- 部屋が寒くなる
いち早くサーバの停止を知りたいそんなあなたの為に、やりましょう合成監視
Synthetic Monitoringとは?
システムが稼働するネットワークの外側からユーザ視点で監視することでユーザーが体感している表示速度や応答時間などのパフォーマンスを、リアルタイムで計測・把握することができるというもの。
詳しいことは下のリンクで説明されてるので見てみてください!
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にする予定です。
マシンのスペックは 公式のドキュメントを参考に推奨値に設定をしてます。
vm-1が監視対象のVMになってます。
nr-cpm-agentからしっかりと疎通は取れる状態になってます。
private locationの作成
今回ホームラボ用に作るため、できるだけエンドポイントを外部に公開したくないため自宅にAgentを配置して監視しようと思います。
New Relic ダッシュボードのナビゲーションから Synthetic Monitoring > Private locationsを選択
Create private locationをクリックして作りましょう!
右側にホームがひょこっと出ると思うのでこいつにわかりやすい名前を付けて Generate Keyを押下…
すると kubernetesとDockerのhelmや起動コマンドが出ます。
今回はDocker上で動かしたいので下の方にある Docker run コマンドをコピーしておく。
private locationとして動作させたマシンにペーストしてあげる。
$ 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を選択しましょう
Select monitor typeがいくつか出てくるなかで Endpoint availabilityを選択
Select locationsで先ほど作ったprivate locationを選択してください
Write Scriptはnew relicのQuick startを参考にICMPのスクリプトを貼り付けてください
この時、
var checks = [
{ 'host': 'vm-1', 'ip': '192.168.100.54' },
]
ダッシュボードを覗いてみる
先ほど作ったjobのダッシュボードを覗いてみると、幾度か成功してるのがわかります。
試しにVMを落として、 Run check
を回してみると
しっかり失敗してるのがわかります。
アラートの設定
ここまで来たらあとは通知設定を済ませるだけです。
Alert Conditions > New alert Conditionsで新しいアラートのルールを作りましょう
今回作ったvm-1(job)を対象にして、ICMPに失敗したときにアラートを出したいので、Failuresを選択
(NRQL吐き出してくれるの便利すぎる…)
今回はalertがこれだけなのでone issue per policyを選択
Alert Conditionが作った後、VMを落とすと・・・
しっかりとCritical レベルでアラートが出てることがわかります。
後はPagerDutyやSlackと連携することでいつでも通知を飛ばせそうですね!
(PagerDutyのアカウント作ったら連携した記事も出そうと思います。)
まとめ
自宅や非公開のサーバ群の死活監視等もNew RelicのSynthetic Monitoringを使えばできるので皆さんのご自宅で働いてるサーバも監視してみませんか?
他にもSynthetic Monitoringでは、Webページのロードパフォーマンスの監視やSSLの証明書チェックなど様々な事ができます。
皆さんも使ってみてください!