🌀

Syntheticモニタリング × Webhookで検索基盤を自動切替する仕組みを構築してみた

2024/12/15に公開

はじめに

この記事は、Datadog Advent Calendar 2024 の 15 日目の記事です。

こんにちは、助太刀バックエンドチームの datadog が大好きな市川(@inu_shunta)です!

弊社では、検索基盤として Amazon OpenSearch Service を利用しています。
この検索基盤はサービスの中核を担い、利便性やパフォーマンスに大きく影響するため、高い可用性が求められます。障害やパフォーマンス低下が発生した際には、迅速に対応できる仕組みが不可欠です。
そこで、Datadog の Synthetic モニタリングWebhook を組み合わせ、OpenSearch から代替基盤である RDS(Amazon Aurora) へ自動的に切り替える仕組みを構築しました。

本記事では、Synthetic モニタリングと Webhook を使った検索基盤の切り替え仕組みについて、具体的な設定手順を紹介したいと思います!

概要

弊社では、検索基盤としてもともと RDS(Amazon Aurora) を利用していましたが、検索パフォーマンスの向上を目指して OpenSearch へ移行しました。(この移行については、別途ブログ記事を執筆予定です)
移行にあたっては、OpenSearch と RDS の検索ロジックに互換性を持たせるように設計しました。そのため、OpenSearch に障害が発生した際にも、RDS に切り替えることで検索サービスの継続を実現できる仕組みを構築しています。

以下に、全体の構成を示す図を掲載します。

architecture
図 1. 検索基盤の切り替え構成

Datadog の Synthetic モニタリングを使い、OpenSearch の検索エンドポイントを定期的に監視しています。万が一、障害を検知した場合は Webhook を通じて検索ソース切り替えエンドポイントが呼び出され、検索ソースを OpenSearch から RDS に切り替える処理を実行します。

具体的な設定手順

2024/12/15 時点の情報を元に記載しています。

Webhook の設定

まず、Datadog の管理画面から Webhook の設定を行います。
左メニューの「Integrations」から「Webhooks」を選択し、インストールします。その後、設定画面で Webhook の URL に検索ソース切り替えエンドポイントの URL を指定します。この URL は、POST リクエストを受け付けるエンドポイントである必要があります。

以下は、設定画面の例です。

webhook
図 2. Webhook の設定画面

必要に応じて、Payload や Header の設定を追加してください。

Synthetic モニタリングの設定

次に、Datadog の Synthetic モニタリングを設定します。
Datadog 管理画面の左メニュー「Digital Experience」から Synthetic モニタリングを作成できます。こちらの API テストから、OpenSearch のヘルスチェックを行うモニタリングを新規作成します。URL に OpenSearch のヘルスチェック用のエンドポイントを指定し、必要に応じてヘッダーや認証情報を設定します。

api_test
図 3. API テストの設定画面

「Monitor」項目設定時、通知設定として 先ほど設定した Webhook を指定します。
以下の「図 4」の設定例では、障害が発生した場合({{#is_alert}}true になる場合)に Webhook が呼び出されるように設定しています。また同時に Slack 通知も行うように設定しています。

synthetic
図 4. Synthetic モニタリングの設定画面

{{#is_alert}} は、条件付き変数と呼ばれる機能で、Synthetic モニタリングの結果に応じて値を変更できます。

まとめ

Synthetic モニタリングと Webhook を組み合わせることで、検索基盤の障害を検知し、自動的に代替基盤へ切り替える仕組みを構築しました。この仕組みにより、OpenSearch の障害によるサービス停止を防ぎ、ユーザに安定したサービス提供を実現できるようになりました!

助太刀テックブログ

Discussion