New Relic のようなグローバルなオブザーバビリティプラットフォームを運用する上で、何よりもまず重要なことはそのインフラストラクチャが停止してはならないということです。何千もの顧客のアプリケーションを24時間365日監視する責任を担っている場合、ネットワーク障害は単に不便なだけでなく、存在そのものを脅かす脅威となります。

New Relicでは、複数のクラウドやリージョンにまたがって、数百のクラスタが稼働しています。これらのクラスタは、リージョンのトランジットゲートウェイ、リージョン間ハブ、クラウド間リンクなどの複雑なネットワーク接続に依存しています。当社は単一障害点を回避するための回復力を備えていますが、接続障害が多すぎると、リアルタイムのオブザーバビリティを提供する能力が損なわれます。

このためアベーラビリティゾーン(AZ)内、リージョン間、クラウドプロバイダー間のいずれのレイヤーで接続障害が発生した場合でも、即座に問題を把握する必要がありました。

そこで当社は、最も得意とするNew Relic独自のプラットフォームを使用して、ネットワーク全体を監視するソリューションを構築しました。その結果生まれたのが、社内ネットワーク監視システム「Weather Station」です。これは、マルチクラウドインフラストラクチャ全体で1時間あたり10万回以上の接続チェックを実行しています。この記事では、Weather Stationの構築方法と、その過程で学んだことをご紹介します。

大規模な環境におけるネットワーク可視性の課題

大規模で複雑な環境では、ネットワークの完全な停止自体を検出することが課題ではありませんでした。それは明らかな事実だからです。真の課題は、特定の診断の後で次の質問に迅速に答えることでした。同じリージョン内のクラスタは、リージョンのトランジットゲートウェイを介して通信できているか?ハブゲートウェイはリージョン間のトラフィックを適切にルーティングしているか?クラウド間のクロスクラウド接続は機能しているか?トラフィックのピーク時にパケット損失が発生していないか?

これらのパスを継続的に検証しなければ、エンジニアは手動での接続テスト、インスタンスへのSSH接続、pingコマンドとtracerouteコマンドの実行、複数のクラウドプロバイダーコンソール間のルートテーブルの確認、タイムスタンプの相関関係の検証など、多くの時間を費やして、潜在的な障害発生のタイミングを特定することになります。

すべての重要なネットワークパスを継続的に検証し、障害を迅速に検出し、どのネットワークセグメントに障害が発生したかについてのコンテキストを、エンジニアに即時に提供するための体系的なアプローチが必要でした。さらにそのソリューションは、インフラストラクチャに合わせて拡張し、新しいリージョンやセル、クラウドプロバイダーの追加にも自動的に適応できる必要がありました。

継続的なネットワーク検証システムの設計

当社は、継続的にネットワークを監視するシステムを「Weather Station」と名付けました。これは、気象学者が分散センサーを使用して大気の状態を監視する方法にヒントを得た名前です。気象観測所が地理的リージョン全体の気温、気圧、風の変化を検出するのと同様に、当社のWeather Stationはネットワークのリージョン、AZ、クラウドプロバイダー全体の接続状態の変化を検出します。

中核となる考え方は簡単です。実稼働ネットワークトポロジーを反映した監視インスタンスを導入すれば、それらのインスタンス間での接続を継続的にチェックできるようになります。これらのsyntheticチェックで何らかの障害が発生すると、顧客データに影響が出る前に、実際のネットワークの問題が直ちに通知されます。

Weather Stationは、次の3つのコアアーキテクチャー原則に基づいて設計された自己完結型のGoアプリケーションです。

  1. 実稼働トポロジーのミラーリング

    実稼働環境で使用されているネットワークアーキテクチャーを正確に複製した専用の監視ネットワークを作成しました。これらの監視VPCは、実稼働環境のトラフィックが流れる同じ共有インフラストラクチャに接続されます。つまり、実稼働環境を迂回する擬似ルートではなく、実際のインフラストラクチャコンポーネントを通る実際のネットワークパスをテストしていることになります。

    セットアップには、各リージョンにプライマリVPCとセカンダリVPCを配置し、さまざまな構成をエミュレートし、AZごとに1つの監視インスタンスを配置します。マルチクラウドインフラストラクチャ全体で合計88個の専用監視インスタンスを導入し、さらに実稼働セル内にもコンテナ化された監視インスタンスを配置しました。

  2. 多様な監視視点

    当社では補完的な2つの視点から監視を行っています。専用の監視ネットワークは、共有インフラストラクチャ(リージョンゲートウェイ、リージョン間ハブ、クラウドプロバイダー間の接続)を検証します。これらのインスタンスは監視のみを目的として存在し、実稼働環境のワークロードの変更による影響を受けません。一方、Weather Stationは実稼働ワークロード内でもKubernetesポッドとして実行されるため、実際のワークロードの観点から接続を詳細に把握できます。

  3. 動的設定とオブザーバビリティ

    Weather Stationは階層型の設定システムを使用しています。インスタンスが起動すると、そのロケーション、クラウドプロバイダー、リージョン、AZ、環境変数を記述するパラメーターを受け取ります。これらのパラメーターに基づいて、適切なYAML設定ファイルを読み込み、実行すべき接続チェックを指定します。

    たとえば、インスタンスは、同じAZ内の他のインスタンスにpingを送信してリージョンの接続性を検証し、他のリージョンのインスタンスにpingを送信してリージョン間ルーティングをテストし、他のクラウドプロバイダーのインスタンスにpingを送信してクラウド間の接続を確認します。インスタンスが実行される場所に応じて、設定が自動的に適応されます。

    すべてのチェック結果は、weather_stationというプレフィックス付きのメトリクスとしてNew Relicに送られ、クラウドプロバイダー、リージョン、AZ、環境変数、クラスタ名などのソースインスタンスに関する豊富なメタデータがタグ付けされます。つまり、NRQLクエリを使用して、ネットワークの健全性をクエリ、可視化、アラート生成を行うことができるのです。アラート条件に違反すると、New Relicは自動的に問題をオープンし、適切なチームに直ちに通知します。

Weather Stationは、ネットワークアーキテクチャーの異なるレイヤーを対象とした4種類の接続チェックを実行します。

  • リージョンのチェック:同一リージョン内のホストが、リージョンのトランジットゲートウェイまたは仮想ハブを介して通信できることを検証します。
  • リージョン間チェック:ピアリングトランジットゲートウェイがリージョン間のトラフィックを適切にルーティングしていることを確認します。
  • クロスクラウドチェック:クラウド間の通信を検証します。
  • 管理ネットワークチェック:すべてのインスタンスがコンテナレジストリやVaultなどの重要な内部サービスにアクセスできることを確認します。

各チェックはシンプルで、主にICMP pingテストと特定のサービスのTCPポートチェックがを行いますが、1時間あたり10万回以上のチェックを合計することで、プラットフォームが依存するすべてのネットワークパスを包括的にカバーします。

リージョンやクラウド全体へのWeather Stationの拡張

私たちはWeather Stationを導入するに際し、単一のステージングセルでの概念実証から始め、体系的に広げていくアプローチを採用しました。目標はシンプルでした。アプリケーションが安定して動作し、メトリクスが正しく送信され、設定システムが期待どおりに機能することを検証することです。わずか数日で、最初の潜在的なネットワークの問題、つまり実稼働環境でのリージョン間トラフィックをブロックする可能性のある、セキュリティグループルールの設定ミスを発見しました。この早期発見により、導入拡大への自信を得ることができました。

次に、専用監視インフラストラクチャ全体にWeather Stationを体系的に展開し、各リージョンで反復的にデプロイを行い、各ステップでメトリクスとアラートを検証しました。この段階では、ピーク時のクラウド間接続での断続的なパケット損失、AZ間の非対称ルーティングの問題、リージョンハブでのBGPフラッピングが明らかになりました。これらの発見により、顧客に影響を及ぼす前にインフラストラクチャを修正することが出来ました。

最終フェーズでは、一貫したロールアウトを実現するために標準の自動化ツールを使用して、Weather Stationを本番環境セル内にKubernetesポッドとして導入しました。当社は、すべての接続データを視覚化し、Terraformを使用してアラートを構成する包括的なネットワークステータスダッシュボードを構築し、それらのバージョン管理と一貫した導入を実現しました。各アラートには、サービスタグやインシデントのグループ分けなどの関連コンテキストが含まれており、障害が発生したネットワークセグメントに関する完全な情報に基づいて、適切なチームに即座にルーティングできます。

ネットワークの問題検出を90%高速化

Weather Stationにより、ネットワークインフラストラクチャの運用方法が変わりました。その影響は即座に現れ、以下のように測定可能でした。

  • MTTDの改善:ネットワーク障害の平均検出時間が90%短縮されました
  • MTTRの改善:アラートに潜在的な問題に関する正確なコンテキストが含まれるようになったため、インシデントを解決する平均復旧時間が50%改善されました。
  • 即時の根本原因特定:ダッシュボードには、接続に失敗しただけでなく、ネットワークトポロジーのどこで障害が発生したかが正確に表示されます。
  • 実稼働前にステージング環境で設定上の問題を検出:セキュリティグループの設定ミス、ルーティングテーブルの誤ったエントリ、BGP設定エラーなどが本番環境に到達する前にステージング環境で検出されるようになりました。
  • インフラストラクチャ変更時の運用の信頼性:本番環境のトラフィックを新規に追加したセル(処理機能)にルーティングする前に、すべてのWeather Stationチェックに合格したことを検証し、プロバイダーのフェールオーバーシナリオを即座にテストできます。
  • コストの回避:Weather Stationはインフラストラクチャへの投資を必要としますが、さらにコストのかかるシステム停止を未然に防止します。ネットワークのダウンタイムが1時間続くごとに、複数セルでの顧客データ取り込みに影響が出ます。ステージング環境で問題を検出することで、顧客への影響、緊急ロールバック、大規模なインシデント対応などの本番環境でのインシデントコストを回避できます。
  • 運用ビューの統合:もはや複数のクラウドプロバイダーコンソール、VPN設定やゲートウェイのルートテーブルを個別に確認する必要はなく、信頼できる唯一のソースとしてネットワークステータスダッシュボードで、現在のステータス、過去の傾向、詳細な調査機能を1か所の統合ビューで確認できます。次の画像は、New RelicのWeather Stationダッシュボードを示しています。