New RelicでAWS Healthイベントを監視してみた

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス課の塩野です。

AWSを運用していると、サービスの障害やメンテナンス情報をいち早く把握したいですよね。AWS Healthは、AWSインフラの健全性に関するイベント情報を提供するサービスで、リソースに影響を与える障害やスケジュールされた変更を通知してくれます。

この記事では、AWS HealthのイベントをNew Relicに取り込んで一元的に監視する方法を紹介します。New Relicと統合することで、AWSの障害情報を他の監視データと合わせて可視化でき、アラート設定も柔軟に行えるようになります。

ただし、AWS Health統合を利用するにはAWS Business、Enterprise On-Ramp、または Enterprise サポートプランが必要です。これはAWS Health APIを使用するための要件となっています。また、New Relicのライセンスキーとクラウド統合に必要な権限も必要になります。

AWS Health統合についての制約は下記ドキュメントをご参照ください。

docs.aws.amazon.com

目次

AWS Health統合の仕組み

AWS HealthをNew Relicで監視するには、API Polling統合を使用します。API Pollingは定期的にAWS APIを呼び出してデータを取得する方式で、デフォルトでは5分間隔でポーリングされます。

AWS Healthは、New Relicの主要な統合方法であるCloudWatch Metric Streamsには対応していません。そのため、専用のAPI Polling設定が必要になります。設定にはIAMロールの作成とNew Relic側での統合設定が含まれますが、手順に従えば比較的簡単に完了します。

docs.newrelic.com

設定手順

AWS Health統合の設定は、IAMロールの作成とNew Relic側での統合設定の2ステップで完了します。 AWSコンソールの画面での作業中にNew Relic UIの情報を入力する必要がありますので、この作業は両方の画面を同時に開いて実施することをオススメいたします。

IAMロールの作成

まず、New RelicがAWS Health APIにアクセスするためのIAMロールを作成します。AWS IAMコンソールで アクセス管理/ロール > ロールを作成 > AWS アカウント > 別の AWS アカウント を選択しましょう。

アカウントIDには、New Relicが提供する専用のアカウントID(754728514883)を入力します。「Require external ID」にチェックを入れて、New Relic UIで表示される外部IDを入力してください。

次に、必要な権限をアタッチします。AWS Healthの情報を取得するには、最低限 health:Describe* の権限が必要です。簡単に設定するなら「ReadOnlyAccess」マネージドポリシーをアタッチすれば十分です。ロール名は「NewRelicInfrastructure-Integrations」として作成し、作成後のRole ARNをコピーしておきましょう。

New Relic UIでの統合設定

New Relicにログインして、Integrations & Agents > Integrate your AWS account に移動します。

Metrics > Manually integrate your AWS account > API Polling を開き、セットアップを開始します。

画面に表示されているAWSアカウント名とexternal IDを取得し、IAMロールの作成画面で入力してIAMロール作成まで終わらせます。

Add account details の画面でAWS account nameの欄に設定したAWSアカウントのIDを入力し、先ほど作成したIAMロールのARNを入力します。

次の画面で監視したいAWSサービスを選択できるので、「AWS Health」にチェックを入れましょう。他のサービスも同時に監視したい場合は、ここで追加できます。

最後に「Save」をクリックすれば設定完了です。数分後にはAWS HealthのイベントがNew Relicに取り込まれ始めます。

取得できるデータと活用方法

設定が完了すると、AWS HealthのイベントがNew Relicに取り込まれるようになります。データは one.newrelic.com > All capabilities > Infrastructure > AWS から確認できます。

イベントの種類

AWS Healthは主に3種類のイベントをレポートします。1つ目はIssueで、AWSインフラに影響を与える可能性のある問題です。2つ目はScheduled changeで、AWSサービスやリソースに影響を与える可能性のあるスケジュールされたアクティビティです。3つ目はAccount notificationで、追加の情報提供を目的としたものです。

これらのイベントは AwsHealthNotification というイベントタイプでNew Relicに保存されます。このイベントに基づいてクエリを作成したり、ダッシュボードのウィジェットを作ったり、NRQLアラートポリシーを定義したりできます。統合を有効化した後に発生したイベントのみが収集される点に注意してください。

主な属性

AwsHealthNotificationイベントには、影響を受けるリソースを特定するための属性が含まれています。

属性名 説明
affectedEntityArn 影響を受けるAWSリソースのARN
arn AWS Healthイベント自体のARN
affectedRegion 影響を受けるAWSリージョン
affectedResources 影響を受けるリソース数(アラート条件定義に使用可能な自動生成メトリクス)
description イベントの詳細説明
eventTypeCategory issue、scheduledChange、accountNotification、investigation
eventTypeCode イベントタイプの一意な識別子(例: AWS_EC2_SYSTEM_MAINTENANCE_EVENT、AWS_RDS_MAINTENANCE_SCHEDULED)
service EC2、RDSなど関連するAWSサービス
statusCode open、closed、upcoming
startTime イベント開始日時(文字列形式)
startTimestamp イベント開始日時(エポック秒)
endTime イベント終了日時(文字列形式)
endTimestamp イベント終了日時(エポック秒)
lastUpdatedTime 最終更新日時(文字列形式)
lastUpdatedTimestamp 最終更新日時(エポック秒)

これらの属性を使って、特定のサービスやリージョンに絞った監視が可能です。また、HealthイベントはEC2インスタンスなどのAWSリソースの既存エンティティにリンクされるため、リージョンやアベイラビリティゾーン、リソースタグなどのメタデータも継承されます。

ダッシュボードの作成

AWS Healthのイベントを可視化するダッシュボードを作成すると、AWSインフラの健全性を一目で把握できるようになります。ここでは、実用的なダッシュボードの作成手順と推奨するウィジェットを紹介します。

ダッシュボード作成手順

New Relicにログインして、Dashboards > Create a dashboard を選択します。ダッシュボード名を「AWS Health Monitor」などわかりやすい名前にして、Create をクリックしましょう。

ダッシュボードが作成されたら、Add widget をクリックして、Add a chart を選択します。ここでNRQLクエリを入力してウィジェットを追加していきます。

推奨するウィジェット

実際の運用で役立つウィジェットをいくつか紹介します。

1. オープンなイベント数の推移

現在オープンになっているイベント数を時系列で表示します。障害の発生状況を把握するのに便利です。

SELECT count(*) 
FROM AwsHealthNotification 
WHERE statusCode = 'open' 
TIMESERIES AUTO

チャートタイプは「Line」を選択すると、時系列の変化が見やすくなります。

2. サービス別のイベント数

どのAWSサービスでイベントが発生しているかを一覧表示します。

SELECT count(*) 
FROM AwsHealthNotification 
WHERE statusCode = 'open' 
FACET service

チャートタイプは「Bar」または「Pie」が適しています。どのサービスに問題が集中しているか一目でわかります。

3. イベントカテゴリ別の内訳

Issue、Scheduled change、Account notificationの内訳を表示します。

SELECT count(*) 
FROM AwsHealthNotification 
FACET eventTypeCategory

チャートタイプは「Pie」が見やすいでしょう。

4. リージョン別の影響状況

どのリージョンでイベントが発生しているかを確認できます。

SELECT count(*) 
FROM AwsHealthNotification 
WHERE statusCode = 'open' 
FACET affectedRegion

チャートタイプは「Bar」が適しています。

5. 最新のイベント一覧

直近のイベントを詳細情報とともに表示します。

SELECT service, eventTypeCategory, statusCode, affectedRegion, description 
FROM AwsHealthNotification 
SINCE 7 DAYS AGO 
LIMIT 10

チャートタイプは「Table」を選択します。イベントの詳細を確認するのに便利です。

6. 影響を受けるリソース数

現在影響を受けているリソースの総数を表示します。

SELECT sum(affectedResources) 
FROM AwsHealthNotification 
WHERE statusCode = 'open'

チャートタイプは「Billboard」を選択すると、大きな数字で表示されて目立ちます。

ダッシュボードの作成例

これらのウィジェットを配置する際は、重要度の高い情報を上部に配置すると良いでしょう。 例えば、影響を受けるリソース数やオープンなイベント数の推移を最上部に配置し、その下にサービス別やリージョン別の内訳、最下部に詳細なイベント一覧を配置する形です。

ウィジェットのサイズは、ダッシュボード編集画面でドラッグして調整できます。Billboardタイプは小さめに、Tableタイプは横幅を広めに取ると見やすくなります。

アラート設定の実例

ダッシュボードで可視化するだけでなく、重要なイベントに対してアラートを設定しておくと、問題を見逃さずに済みます。

Alerts & AI > Alert conditions (policies) から新しいアラートポリシーを作成します。例えば、EC2インスタンスに影響するオープンな問題を監視する場合、次のようなNRQLクエリが使えます。

SELECT uniqueCount(affectedEntityArn) 
FROM AwsHealthNotification 
WHERE statusCode = 'open' 
  AND eventTypeCategory = 'issue' 
  AND service = 'EC2'

このクエリは、現在オープンになっているEC2関連の問題で影響を受けているリソース数をカウントします。この値が0より大きくなったらアラートを発火させる設定にしておけば、EC2の障害を素早く検知できるでしょう。

特定のリージョンだけを監視したい場合は、WHERE句に affectedRegion = 'ap-northeast-1' のような条件を追加すればOKです。また、スケジュールされた変更を事前に把握したい場合は、eventTypeCategoryを'scheduledChange'に変更して、statusCodeを'upcoming'にすると良いでしょう。

まとめ

New RelicでAWS Healthを統合すると、AWSインフラの健全性情報を他の監視データと一緒に管理できるようになります。API Polling統合の設定は、IAMロールの作成とNew Relic側の設定だけなので、比較的シンプルに完了します。

AWS Business、Enterprise On-Ramp、または Enterprise サポートプランが必要という制約はありますが、すでにこれらのプランを利用している環境であれば、追加コストなしでAWS Healthの情報を活用できますので、AWSの障害情報を見逃さないためにぜひ設定してみてください。

この記事がどなたかのお役に立てれば幸いです。

宣伝

弊社では、お客様環境のオブザーバビリティを加速するためのNew Relicアカウント開設を含めた伴走型のNew Relic導入支援サービスをご提供しております。 もしご興味をお持ちの方は、こちらのお問合せフォームよりお問合せ頂けましたら幸いでございます。

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営