Amazon Web Services ブログ

アプリケーションにおける遅延やエラー、失敗の増加を AWS X-Ray が検知した際に Amazon CloudWatch と Amazon SNS を利用して通知する

AWS X-Ray は、開発者がマイクロサービスやサーバレス・アーキテクチャで構築された本番環境のアプリケーションを分析及びデバッグすることを手助けし、顧客への影響を定量化します。AWS X-Ray を使うと、アプリケーション及びそのアプリケーションが依存しているサービスがどのように振る舞っているかを把握し、パフォーマンスの問題やエラーに対する根本原因の究明やトラブルシュートを行うことができます。これらの洞察を駆使してアプリケーションの問題点を見つけ出し最適化の機会を得ることができます。

このブログ記事では、X-Ray がアプリケーションにおける遅延やエラー、あるいは失敗の増加を検知したときに、どうすれば Amazon CloudWatchAmazon SNS を使って通知を受信することができるのかをお見せします。特に、エンドユーザがあなたのアプリケーションを利用していて遅延の増加やサーバサイドのエラーに遭遇した際にEメールや SMS メッセージを通して通知を受け取るためにはどうすればよいでしょうか。サンプルアプリケーションを使ってお見せしたいと思います。サンプルアプリケーションは、コードを修正することによってアラームやイベントをカスタマイズすることも可能です。

サンプルアプリケーションの全体像

このサンプルアプリケーションは、以下の情報を得るために X-Ray の GetServiceGraph API を使用します。

  • 集計されたレスポンス時間
  • ステータスコード 4xx (エラー)の失敗リクエスト
  • ステータスコード 429 (スロットリング)
  • ステータスコード 5xx (不具合)
サンプルアプリケーションアーキテクチャ

サンプルアプリケーションのアーキテクチャ全体像

Getting started

サンプルアプリケーションは、必要なリソースをデプロイするために AWS CloudFormation が使っています。サンプルアプリケーションをインストールするには、

  1. サンプルアプリケーションを取得するために git clone を実行
  2. Setup フォルダ内の JSON ファイルの閾値の制限と通知の詳細を修正
  3. install.py スクリプトを実行してサンプルアプリケーションをインストール

インストールの手順に関するより詳しい情報については、GitHub 上の readme ファイルを参照してください。
アプリケーションが、遅延やエラー、失敗の制限を超えてしまった場合に通知を受け取ることができます。そして電話番号やメールアドレスを通知先として設定することもできます。電話番号やEメールを書きたくない場合は、サンプルアプリケーションによってデプロイされる CloudWatch アラームを使用してあなたのアプリケーションを監視することもできます。

このサンプルアプリケーションでは、セットアップ時に与えるサンプルアプリケーションの名前空間を使ってリソースをデプロイします。

CloudWatch ルール

サンプルアプリケーションでは、2つの CloudWatch ルールを使用します。

  1. SCHEDULEDLAMBDAFOR-sample_app_name は、GetServiceGraph API をクエリする AWS Lambda 関数を定期的に起動します。
  2. XRAYALERTSFOR-sample_app_name は、このルールで定義されたパターンと一致する、パブリッシュ済みの CloudWatch イベントを探します。
サンプルアプリケーション用 CloudWatch ルール

サンプルアプリケーションのために作成された CloudWatch ルール

CloudWatch アラーム

さっきの JSON ファイルに電話番号やEメールを書いていない場合、サンプルアプリケーションでは、モニタリングに使用できる CloudWatch イベントと組み合わせて XRayCloudWatchAlarm-sample_app_name という名前の CloudWath アラームが使用されます。

サンプルアプリケーション用の CloudWatch アラーム

サンプルアプリケーション用に作成された CloudWatch アラーム

Amazon SNS メッセージ

サンプルアプリケーションによって2つの SNS トピックが作成されます。

  • sample_app_name-cloudwatcheventsnstopic は、CloudWatch イベントが Lambda 関数からパブリッシュされたパターンと一致すると SMS メッセージを送信します。
  • sample_app_name-cloudwatchalarmsnstopic は、CloudWatch アラームが ALARM 状態になるとEメールでメッセージを送信します。
サンプルアプリケーション用の Amazon SNS

サンプルアプリケーション用に作成された Amazon SNS

通知の受信

CloudWatch イベントによって以下のパターンが探されます。

{
  "detail-type": [
    "XCW Notification for Alerts"
  ],
  "source": [
    "<sample_app_name>-xcw.alerts"
  ]
}

この CloudWatch イベントは、SMS メッセージを送信する SNS トピックを起動します。

サンプルアプリケーションのSMS

CloudWatch イベントによって Amazon SNS トピックが起動すると送信される SMS

この CloudWatch アラームは、CloudWatch イベントがパターンに一致すると発行された TriggeredRules メトリクスを探します。指定された期間 TriggeredRules > 0 になると、その都度 ALARM 状態になり、Eメールでメッセージを送信する SNS トピックを起動します。

サンプルアプリケーションで送信されるEメール

CloudWatch アラームが ALARM 状態になると送信されるEメール

通知の停止

電話番号やメールアドレスを登録したが通知の受け取りを停止したくなったとします。そのときは Lambda 関数内の SUBSCRIBE_TO_EMAIL_SMS 環境変数を No に変更し、そして Amazon SNS のコンソールを開いて subscriptions を削除します。上記の通知の受け取り停止をしたとしても、アプリケーションにおける遅延やエラー、そして失敗の増加は CloudWatch コンソールを使ってモニタリングすることができます。

サンプルアプリケーション内の Lambda の環境変数

Lambda の環境変数を変更する

サンプルアプリケーション用のSNSの subscription を削除

subscriptions を削除して通知の受け取りを停止する

サンプルアプリケーションのアンインストール

サンプルアプリケーションをアンインストールするには、Setup フォルダ内の uninstall.py スクリプトを実行します。

サンプルアプリケーションの拡張

このサンプルアプリケーションは、アプリケーション内の遅延やエラー、失敗の増加を X-Ray が検知すると、それが通知されるというシンプルなものですが、個別のユースケースにおいてより役立つように拡張することが可能です。

まとめると、このような構成をセットアップすれば、アプリケーション内における遅延やエラー、そして失敗の増加が X-Ray によって検知された際に Amazon SNS 経由で通知を受け取ることができます。

AWS X-Ray を活用してアプリケーションのためにアラームやアラートをセットアップすることについて記述したこの情報が、あなたのお役に立てば嬉しいです。質問やフィードバックは遠慮なくコメントに残してください。そして AWS X-RayAmazon SNSAmazon CloudWatch をもっと気軽に知ってもらえれば幸いです。

この記事の著者

Bharath Kumar は AWS X-Ray の Sr.Product Manager です。これまでにマイクロサービスとサーバレスアーキテクチャを活用したウェブアプリケーションやモバイルゲームの開発とリリースの経験があります。

 

翻訳は SA 畑史彦が担当しました。原文は AWS DevOps Blog の 『Using Amazon CloudWatch and Amazon SNS to Notify when AWS X-Ray Detects Elevated Levels of Latency, Errors, and Faults in Your Application』 です。