• 製品
  • 使用を開始する
  • 関連ドキュメント
  • リソース

Opsgenie アラートからステータス ページを生成する

これは Opsgenie アラートからステータス ページを生成するためのリファレンス実装です。このソリューションは、アラート アクション (Create、Close、AddTags、RemoveTags など) で Opsgenie Webhook インテグレーションを使用して、アラートの重大度に応じてサービスの状態を計算して更新するために使用されるコードをトリガーします。このようなソリューションを実装するには、次のコンポーネントが必要です。

  • コードを実行する環境

  • 上記のようにコード実行をトリガーする環境

  • ストレージ — サービス データを保持する

  • ステータス ページをホストする Web サーバー

  • アラート データを渡すための Opsgenie における Webhook 統合

ここで説明するリファレンス実装では、AWS API ゲートウェイ、Lambda、S3 の各サービスを活用します。

連携

アラートの設計

このソリューションでは、ステータス ページを作成して更新する際に使用する必要があるアラートには、次があることを前提としています。

  • “statuspage”.このタグを持つアラートのみが処理されます。

  • サービスの名前影響を受けるサービスの名前は、“servicename:” プレフィックスが付いたタグとして含まれます。たとえば、“servicename:website” です

  • インシデントの重大度。ソリューションは、インシデントに対するさまざまな重大度のレベルをサポートします。アラートには重大度を示すタグを付ける必要があり、「安全」、「重大」、「致命的」がサポートされる重要度レベルです。

Service State Calculator Lambda 関数

AWS Lambda はAWS の新しいコンピューティング サービスで、サーバーのプロビジョニングや管理を行わずに、実質的に管理ゼロの状態でコードを実行できます。使用した時間分のみを課金されるため、この種のアプリケーションとしては実質的に無料と言えます。コードをアップロードするだけで、Lambda がその高可用性によってコードを実行してスケーリングするために必要なすべての処理を行います。

Lambda サービスは、イベントによってトリガーされた「関数」と呼ばれるコードを実行します。この関数はトリガーされるたびに実行されて、スケジュールされたイベントや API Gateway などの異なるソースによってトリガーできます。

この実装では、Opsgenie でアラートが作成されて更新されると、AWS API Gateway を介して Opsgenie によって Lambda 関数がトリガーされます。Lambda 関数は Opsgenie Webhook インテグレーションを介して Opsgenie アラート更新 (Create、Close、AddTags、RemoveTags など) を受け取って、以下に説明するロジックで状態を計算します。

Opsgenie で実行されたアラート アクションが “Create” または “AddTags” の場合:

  1. サービスの現在の状態を取得する

  2. アラートの重大度と比較する

  3. アラートの重大度が現在のサービス状態よりも高い場合は、サービス状態をアップデートする

Opsgenie で実行されたアラート アクションが “Close” または “RemoveTags” の場合:

  1. Alert API を使用して、残りのサービス アラートを取得します。

  2. すべてのアラートの重大度タグを確認して、サービスの状態として重大度を最高に設定します。

  3. サービスの状態を更新します。

Lambda 関数は config.js で次のように設定されます。

テキスト

1 2 3 4 5 6 7 8 9 10 var config = { "opsgenieApiKey": "", // the API key of the API Integration in Opsgenie, which will be used to retrieve service's incident alerts. "serviceObjectBucket" : "", // name of the S3 bucket that stores the service data "statusPageTag": "statuspage", // identifier tag for the statuspage incidents "accessKeyId": "", // accessKeyId of the user credentials which has fullAccessRight to S3 "secretAccessKey": "", // secretAccessKey of the user credentials which has fullAccessRight to S3 "serviceNameTagPrefix": "servicename:", // tag prefix for service names in statuspage alerts. // (ex: servicename:service1 -> service name will be extracted as service1) "serviceDataFolderNameInS3": "services" //folder of the service objects in S3 bucket };

Lambda 関数をトリガーする AWS API Gateway

AWS API ゲートウェイは、API を簡単に作成、公開、保守できるサービスです。また、Lambda 関数をトリガーする URL エンドポイントを提供できます。このソリューションでは、3 つの Lambda 関数を使用します。これらはそれぞれ、サービス状態の計算、Opsgenie からのインシデント アラートとアラート メモの取得、S3 からのサービス状態データの取得を実行します。Lambda 関数を作成したら、それぞれの API エンドポイントを作成します。各 API ソースで CORS を有効にしていることを確認してください。

これらの Lambda 関数を保護するには、API キーを API Gateway で使用する必要があります。API Gateway で API キーの使用が有効になったら、これらのエンドポイントに対して行われるすべての HTTP/HTTPS 呼び出しには、リクエストの一部として API キーを含める必要があります。また、X-Api-Key ヘッダーで送信する必要があります。

S3 へサービス データを保存する

AWS S3 は、安全でスケーラブルなオブジェクト ストレージ サービスです。Service State Calculator Lambda 関数が API ゲートウェイを介してトリガーされると、Lambda 関数は新しいサービス状態を計算してサービス データを AWS S3 バケットに保存します。

サービス データは、次の形式のサービス情報を含む JSON ファイルです。

テキスト

1 2 3 4 { "state": "critical", "message": " API Outage." }

S3 Lambda 関数の Service Data Getter

S3 から、サービスまたはすべてのサービスの特定のデータを取得します。その後、ステータス ページ Web アプリケーションによって API Gateway エンドポイント経由でトリガーされます。config.js から設定する必要があります

テキスト

1 2 3 4 5 6 var config = { "serviceObjectBucket" : "", // name of the S3 bucket that stores the service data "accessKeyId": "", // accessKeyId of the user credentials which has fullAccessRight to S3 "secretAccessKey": "", // secretAccessKey of the user credentials which has fullAccessRight to S3 "serviceDataFolderNameInS3": "services" //folder of the service objects in S3 bucket };

インシデント アラートとアラート メモ取得のための Lambda 関数

Lambda 関数は、Alert API を使用して Opsgenie から特定のサービスのアラートとアラート ノートを取得します。ステータス ページ Web アプリケーションで、その API Gateway エンドポイントによってトリガーされます。config.js から設定する必要があります

テキスト

1 2 3 4 5 6 var config = { "opsgenieApiKey": "", // the API key of the API Integration in Opsgenie, which will be used to retrieve service's incident alerts. "statusPageTag": "statuspage", // identifier tag for the statuspage incidents "serviceNameTagPrefix": "servicename:" // tag prefix for service names in statuspage alerts. //(ex: servicename:service1 -> service name will be extracted as service1) };

Opsgenie で Webhook インテグレーションを設定する

Opsgenie は、Webhook 統合を介してカスタム URL エンドポイントにアラート データを送信します。統合では、Service State Calculator Lambda 関数の API ゲートウェイ URL を Webhook URL として使用します。この場合も、エンドポイントの API キーはカスタム ヘッダーで定義する必要がありますが、無関係なアラート データを Lambda 関数に送信しないでください (非インシデント アラート)。Opsgenie Webhook インテグレーションには、フィルターが含まれている必要があります。この実装では、CreateCloseAddTagsRemoveTags の各アクションで、インシデント アラートのデータを Service State Calculator Lambda 関数に送信します。これを行うには、次の条件で 2 つの Webhook インテグレーションが必要でした (どちらも同じ URL を使用します)。

webhook
Webhook アクション

S3 のホスティング ステータス ページ

AWS S3 には公開 Web サイトをホスティングする機能があり、サービスのステータス ページは S3 でホストできます。ステータス ページ Web アプリケーションには、サービス名とその状態をリストするダッシュボードがあります。ダッシュボードから、[サービス] ステータス ページを開いて、インシデントとアップデート (アラートとアラート メモ) を表示できます。ステータス ページでは、サービス状態とサービス インシデント (アラート) が強調表示されます。Web アプリケーションは、API ゲートウェイ エンドポイントを介して 2 つの個別の Lambda 関数への AJAX コールによって、データを取得します。最初の Lambda 関数は S3 からサービス データを、2 番目の関数は Alert API を使用して Opsgenie からサービス アラートとアラート メモを、それぞれ取得します。app.js では、以下の設定を行う必要があります。

テキスト

1 2 3 4 5 .constant('cfg', { 'apiLambdaFunctionUrl': 'api_lambda_url', // API Gateway URL of the Lambda function that retrieves alerts and alert notes from OpsGenie. 'serviceLambdaFunctionUrl': 'service_lambda_url', // API Gateway URL of the Lambda function that retrieves service data from S3. 'apiKey': 'apiKey' // API Key to make secure calls to API Gateway (both API Gateway endpoint can use same API Key.) })

以下の画像は、Opsgenie と対応するステータス ページにあるインシデント アラートの例を示しています。

以下の例では、API サービスに関して 2 つのインシデント アラートがあります。どちらもインシデント アラート ID statuspage タグ、重大度 タグ、接頭辞として servicename:API というサービス名を含むタグがあります。

インシデント アラートの例

この例ではサービスが 1 つしかないため、ダッシュボードには API サービスのみが含まれています。Opsgenie にあるアラートの重大度は致命的であるため、サービスのステータスは致命的になって赤で表示されます。

API の停止

API サービスの [ステータス] ページには、ページの上部にサービスの状態が表示されてすべてのインシデント アラートがリストされます。クローズされたアラートは解決済みとして表示されます。

ステータス ページ API の停止

ソース コード

3 つすべての Lambda 関数と Web アプリケーションのソース コードは、GitHub で入手できます。

 

その他のヘルプ