BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 監視システムを効果的に監視する - ヴィジランス・コントロールを使ったMiedwar Meshbesher氏の例

監視システムを効果的に監視する - ヴィジランス・コントロールを使ったMiedwar Meshbesher氏の例

ブックマーク

原文(投稿日:2022/05/19)へのリンク

オンライン・ベビーモニタ企業のNanitが、自社の監視システムの適切な動作を保証するVigilance Controlを開発した。システムの実装方法について述べたブログ記事の中で、同社は、AWSサービスの統合によって効果的なツールを容易に構築できることを説明している。InfoQは今回、開発者のひとりであるMiedwar Mashbesher氏から、実装の詳細について聞くことができた。

システムが正常に監視されていることを保証するのは、そのためのオープンソースや有償のツールも数多くあるため、それほど難しいことではない。しかしながら、これらのシステムが能書き通りに機能していることを確認したり、監視しているはずのシステムに問題がある場合にそれを効果的に伝えたりするには、どうすればよいのだろうか?

Nanitには以前、監視システムを監視するシステムがあった。オープンソースツールのGradanaPrometheusを中心に構築されたシステムだったが、設計上の問題によって引退した。以前のステータスチェックに関する履歴を保持していなかったため、NatisのSRE/DevOpsチームが障害の内容を定義する上での柔軟性に欠けていた上に、設計上の単一障害点(single point of failure)も存在したためだ。

代わりとしてNanitは、ヴィジランス・コントロール(Vigilance Control、警戒による制御)(同社のブログでは"デッドマン・スイッチ(Dead Man's Switch)"と呼んでいる)を実装した。これは監視されるシステムが別の監視システムにハートビートを送り続け、それが途切れると警告を送信する、という概念だ。

関連するコードスニペットをすべて含んだ詳細な記事の中で、Miedwar Meshbesher氏 — SRE/DevOpsを担当するシニア・バックエンドエンジニア — が、設計全体について説明している。スイッチはTerraformリソースで実装されていて、AWSサービスとインテグレーションを使用して完全な監視-監視システムを形成する。コントロールを実装するためのプロセスは、大きく6つのステップで説明されている。

  1. GrafanaがAPI Gatewayにハートビートを送信する
  2. API GatewayがLambda関数をトリガする
  3. CloudWatchでその関数の起動率を監視する
  4. ハートビートが停止すれば、CloudWatchが警告をトリガする
  5. SNSインテグレーションを使ってPagerDutyに通知を送信する
  6. オンコール担当者が警報を受け取り、監視システムを修正する

このシステムでポイントなのは、常に故障値を持つ(constantly-failing)メトリクスをひとつ、Prometheus内に意図的に作ってあることだ — その上で、これをwebhookによってGrafana経由でLambda関数に接続し、警告が有効であることを確認するチェックをそのLambda関数が起動する。

Nanitはコンピュータによる画像処理を使用したスマートなベビーモニタで、赤ん坊の睡眠と呼吸動作を分析し、睡眠改善のための洞察とヒントを提供することにより、赤ん坊と両親の快適な睡眠をサポートする。Miedwar氏にNaintと、デッドマン・スイッチ開発における氏の役割について聞いた。

InfoQ:ヴィジランス・コントロールを開発したきっかけは何だったのでしょうか?

Miedwar Meshbesher: 当社はヴィジランス・コントロールを、監視システムを監視する手段として使用しています。PrometheusとGrafanaを警報に使用しているのですが、これらがダウンした時に通知を受け取ることで、誤った安心感を得ることのないようにしたかったのです。その一方で、ネットワークトポロジの変更は行いたくなかったので、簡単に成果が得られるようにしたいとも思っていました。この実装の優れた部分は、一般的に使用可能なLambda関数をコールしていることです。

InfoQ: ヴィジランス・コントロールの実装から学んだことは何ですか?

Miedwar: 今回のシステムは、さまざまなAWSサービスをたくさん組み合わせるだけで簡単に作ることができる、という一例です。Lambda関数がCloudWatchで監視されるという事実を使えば、それとSNSを組み合わせてPagerDutyへのHTTP要求を起動することができるのです。実際に、Terraformスクリプトを書くよりも、ブログ記事を書く時間の方が長かったくらいです。

InfoQ: もう一度ゼロからスイッチを実装する必要があるとすれば、どの部分を変更したいですか?新たな技術で変更したいところはありますか?

Miedwar: 実装からそれほど経っていないので、大きくは変わっていませんが、API Gatewayの代わりにALB(Application Load Balancer)を使えば、Terraformコードが多少は減るかも知れません。

ヴィジランス・コントロールの実装について包括的に説明したMiedwar氏のブログ記事は、"Nanit Engineering's Medium"ブログで読むことができる。

 

作者について

この記事に星をつける

おすすめ度
スタイル

BT