🎄
New Relicで実践する外形監視
はじめに
この記事は、以下アドベントカレンダーの14日目です。
2024年7月からASTにJoinしたSREチームの荒木(@butadora)です。
今回は以前公開した、NewRelicを用いた外形監視についてあらためて紹介しようと思います。
ASTにおける外形監視
これまでASTでは外形監視を専用のソリューションで行なっていました。
今回New Relicを用いた統合的な監視体制実現にむけて、外形監視の仕組みを構築します。
パターンとしては大きく2つで、死活監視と証明書監視を実現します。
死活監視
- 対象URIに対してリクエストを送り、レスポンスをチェックする監視
- ステータスコードが200であることを確認します
- リダイレクトがある場合はリダイレクト先を追跡し、200が返ることを確認します
証明書監視
- 対象ドメインのSSL証明書の有効期限をチェックする監視
- 有効期限までの残日数が30日以上であることを確認します
New Relicによる外形監視
アーキテクチャ
監視先の設定〜アラート発報に至るまでに登場するNew Relicの機能は大きく
- Synthetics Monitor
- Alert Condition
- Alert Policy
- Workflow
- Destination
の5つとなり、全体フローとしてはこのようになります。
Synthetic Monitor
- Selenium(Chromium)によるモニタリングをおこなうための外形監視ソリューション
- JavaScriptによるシナリオベースの監視を行うことも可能
- 今回は死活監視にSimple(Ping) Monitor、証明書監視にはCertificate Checkを使用しています
Alert Condition
- インシデント検出の条件やCritical/Warningの発生条件などの詳細を設定する機能
- NRQL(New Relic Query Language)で集計対象データを取得します
- Conditionの設定はハマりポイントがいくつかあるので後述していく
Alert Policy
- Alert Policy機能では、Conditionで検出されたインシデントを束ねる役割
- Issueの発行をCondition毎 or Policy毎なのかを設定する
Workflow
- Alert Policyによって発行されたIssueを拾ってDestinationに渡す機能
- 拾い上げるIssueの条件を発行元PolicyやIssueのPriority、 Tagなどでフィルタが可能
- 別Destinationで設定されていれば同一通知先サービスであっても設定可能
- 例: Slackの「#channel-A」と「#channel-B」に同時に通知
Destination
- 通知先サービスを定義する機能
- SlackやTeamsなどのチャットツールをはじめ、多くのサービスと連携可能
- ASTでは主にPagerDutyにインシデントを集約し、一部個別にSlack通知を行っている
実際のAlert Condition
Alert Conditionはきめ細やかなアラート検出条件を設定できる一方、
各種設定パラメーターを理解して設定する必要があります。
弊社のTocyukiも昨年戦っており、Aggregation WindowやStreaming Methodなどの基本項目はこちらをご覧ください。
今回は外形監視を設定する上でハマったポイントをいくつか紹介したいとおもいます。
共通設定
NRQL
SELECT count(result) FROM SyntheticCheck WHERE monitorName = 'NAME' and result = 'SUCCESS'
-
result = 'SUCCESS'
: 監視が失敗した時だけではなく、監視ができていなかった場合も検知できるようにするため、FAILではなくSUCCESSであるときで判定を行います
Loss of Signal Detection
- しきい値ベースの設定と別軸で実行されるインシデント検出機能
- 今回のNRQLでcountが0であると、NULL=Loss of Signalと判定される
- Loss of Signalとなった際、Incident発生/解決として扱う設定が可能
- アラートレベルはCriticalのみ(=Warningにはできない🙅)
死活監視
- Synthetic monitorの周期: 5分間隔
- Sliding windowsも利用することで、2振したタイミングで1分以内に通知
設定内容
アラートタイミングイメージ
証明書監視
- Synthetic monitorの周期: 1日間隔
- Window durationは最大値の6時間で設定
- Synthetic monitorの頻度がdailyとなるため、24時間に1度も成功しない場合に通知
設定内容
アラートタイミングイメージ
まとめ
- 今回はシンプルな外形監視として、死活監視と証明書監視をNew Relicで実践してみました
- もし間違いやより良い設定があればコメントいただけると助かります!🙏
- 外形監視以外にもメトリクスや各種指標に対するアラートは設定されていますが、その紹介はまたの機会に
参考資料
GitHubで編集を提案
Discussion