ユーザーとして Opsgenie の利用を開始する
プロフィールの設定、Opsgenie からの通知の取得、オンコール スケジュールの表示に関するすべての方法を説明します。
これは Opsgenie アラートからステータス ページを生成するためのリファレンス実装です。このソリューションは、アラート アクション (Create、Close、AddTags、RemoveTags など) で Opsgenie Webhook インテグレーションを使用して、アラートの重大度に応じてサービスの状態を計算して更新するために使用されるコードをトリガーします。このようなソリューションを実装するには、次のコンポーネントが必要です。
コードを実行する環境
上記のようにコード実行をトリガーする環境
ストレージ — サービス データを保持する
ステータス ページをホストする Web サーバー
アラート データを渡すための Opsgenie における Webhook 統合
ここで説明するリファレンス実装では、AWS API ゲートウェイ、Lambda、S3 の各サービスを活用します。
このソリューションでは、ステータス ページを作成して更新する際に使用する必要があるアラートには、次があることを前提としています。
“statuspage”.このタグを持つアラートのみが処理されます。
サービスの名前影響を受けるサービスの名前は、“servicename:” プレフィックスが付いたタグとして含まれます。たとえば、“servicename:website” です
インシデントの重大度。ソリューションは、インシデントに対するさまざまな重大度のレベルをサポートします。アラートには重大度を示すタグを付ける必要があり、「安全」、「重大」、「致命的」がサポートされる重要度レベルです。
AWS Lambda はAWS の新しいコンピューティング サービスで、サーバーのプロビジョニングや管理を行わずに、実質的に管理ゼロの状態でコードを実行できます。使用した時間分のみを課金されるため、この種のアプリケーションとしては実質的に無料と言えます。コードをアップロードするだけで、Lambda がその高可用性によってコードを実行してスケーリングするために必要なすべての処理を行います。
Lambda サービスは、イベントによってトリガーされた「関数」と呼ばれるコードを実行します。この関数はトリガーされるたびに実行されて、スケジュールされたイベントや API Gateway などの異なるソースによってトリガーできます。
この実装では、Opsgenie でアラートが作成されて更新されると、AWS API Gateway を介して Opsgenie によって Lambda 関数がトリガーされます。Lambda 関数は Opsgenie Webhook インテグレーションを介して Opsgenie アラート更新 (Create、Close、AddTags、RemoveTags など) を受け取って、以下に説明するロジックで状態を計算します。
Opsgenie で実行されたアラート アクションが “Create” または “AddTags” の場合:
サービスの現在の状態を取得する
アラートの重大度と比較する
アラートの重大度が現在のサービス状態よりも高い場合は、サービス状態をアップデートする
Opsgenie で実行されたアラート アクションが “Close” または “RemoveTags” の場合:
Alert API を使用して、残りのサービス アラートを取得します。
すべてのアラートの重大度タグを確認して、サービスの状態として重大度を最高に設定します。
サービスの状態を更新します。
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
};
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 ヘッダーで送信する必要があります。
AWS S3 は、安全でスケーラブルなオブジェクト ストレージ サービスです。Service State Calculator Lambda 関数が API ゲートウェイを介してトリガーされると、Lambda 関数は新しいサービス状態を計算してサービス データを AWS S3 バケットに保存します。
サービス データは、次の形式のサービス情報を含む JSON ファイルです。
テキスト
1
2
3
4
{
"state": "critical",
"message": " API Outage."
}
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 関数は、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 統合を介してカスタム URL エンドポイントにアラート データを送信します。統合では、Service State Calculator Lambda 関数の API ゲートウェイ URL を Webhook URL として使用します。この場合も、エンドポイントの API キーはカスタム ヘッダーで定義する必要がありますが、無関係なアラート データを Lambda 関数に送信しないでください (非インシデント アラート)。Opsgenie Webhook インテグレーションには、フィルターが含まれている必要があります。この実装では、Create、Close、AddTags、RemoveTags の各アクションで、インシデント アラートのデータを Service State Calculator Lambda 関数に送信します。これを行うには、次の条件で 2 つの Webhook インテグレーションが必要でした (どちらも同じ URL を使用します)。
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 サービスの [ステータス] ページには、ページの上部にサービスの状態が表示されてすべてのインシデント アラートがリストされます。クローズされたアラートは解決済みとして表示されます。
3 つすべての Lambda 関数と Web アプリケーションのソース コードは、GitHub で入手できます。
この内容はお役に立ちましたか?