はじめに
API GatewayでX-Rayによるパフォーマンスモニタリングが可能になりました。
これまでもLambdaの性能解析は可能でしたが、これによりAPI Gateway-Lambdaで構成されるような
典型的なサーバーレスアプリケーションが End to End でモニタリングできるようになりるました。
やってみる
エンドポイントタイプは、地域、エッジ最適化、プライベート全てに対応しています。
また2つのTraceモードが用意されています。
- Passive
Traceが有効になっていない場合のデフォルトの設定。
既にTraceされているサービスからAPIが呼び出された場合は記録する。
- Active
設定したサンプリングルールに基づき、APIの呼び出しを自動的にサンプリングする。
トレースの有効化
ステージエディターの ログ/トレース タブで X-Ray トレースの有効化 に
チェックを入れるだけです。
変更の保存で有効化されます。ステージの再デプロイは不要でした。
CLIで既存のAPIのトレースを有効化する場合は以下のような感じです。
$ aws apigateway update-stage --rest-api-id {rest-api-id} --stage-name {stage-name} \
--patch-operations op=replace,path=/tracingEnabled,value=true
必要に応じてサンプリングルールの設定を行います。
ここでは新たにルールを作成しませんので、
デフォルトで用意されているサンプリングルールが適用されます。
デフォルトのサンプリングアルゴリズムは
1秒あたり1リクエストを記録し(リザーバーサイズ)、リザーバーサイズを超えた分は
リクエスト全体の5パーセントがその制限を超えてサンプリングされます。(固定レート)
トレースの確認
DynamoDBに対してGetItemを行うシンプルなAPIを用意しました。
Lambda経由でGetItemを行うリソースとAWSサービスプロキシでAPI Gatewayから
直接DynamoDBにGetItemを行うリソースを追加しています。
(Lambda関数ではxray-sdk利用し、DynamoDBの処理時間を取得しています。)
Service Mapを確認すると、API Gatewayから始まる全体的なトレースが記録されています。
API Gatewayのトレースを確認すると、レスポンスステータスの割合が確認できます。
更にトレースの表示で個別のトレースを確認していきます。
レスポンスが403であるリクエストが確認できます。
個別のトレースでエラー原因が確認できます。
リソースポリシーで許可しているIPアドレスの範囲外からアクセスしたためです。
サービスプロキシによるDynamoDBアクセス。
API Gateway-Lambda-DynamoDBのトレースビュー
API~バックエンドサービスの全体のパフォーマンスやエラーを
より簡単に分析できるようになりましたね。
以上です。
参考になれば幸いです。