AWS Lambda サーバーレスモニタリングの概要
概要
サーバーレスとは、開発者が自分でインフラストラクチャーを管理するのではなく、クラウドプロバイダーを使ってアプリケーションやサービスを構築し、実行するモデルです。Datadog サーバーレスモニタリングは、サーバーレスインフラクチャーからメトリクス、ログ、トレースを収集し、アプリケーションの健全性とパフォーマンスを監視することを可能にします。
このガイドでは、サーバーレスのサンプルアプリを使用します。このサンプルアプリは、使い慣れたプログラミング言語と IaC (Infrastructure as Code) ツールを使って起動できます。アプリにはあらかじめ Serverless Monitoring が設定されているため、このガイドに沿ってサンプルアプリの問題をトラブルシューティングする方法や、Serverless Monitoring が提供する可視性の種類を確認してください。
サンプルアプリをデプロイする
- サンプルアプリのリポジトリをローカルマシンに複製します。
- 任意のランタイムおよび IaC ツールを選択し、該当するデプロイ手順のリンクを参照します。
- Datadog API キーと Datadog サイト (
) を確認し、次の手順で使用します。 - 選択したランタイムと IaC の手順に従い、サンプルアプリケーションをデプロイします。
- デプロイが完了したら、リポジトリのルートにある Postman コレクションを使用するか、負荷テストを実行します。
Serverless View でサンプルアプリの関数を確認できます。
サーバーレスビュー
サーバーレスビューは、AWS 環境内のすべてのサーバーレスリソースからのテレメトリーを表示します。このページは、アプリケーションの監視、デバッグ、最適化のための出発点として使用できます。
サーバーレスビューでは、リソースは SERVICE_NAME
ごとにグループ化されます。関数を少なくとも一度呼び出していれば、それぞれのバックエンドサービスが別々のサービスグループとして表示されます。
サーバーレスインサイト
サーバーレスビューの最も右側の列は Insights と呼ばれ、高いエラー率や高い処理時間など、サーバーレスアプリケーションの潜在的な問題を Datadog が自動的にハイライトして表示します。
サーバーレスのサンプルアプリケーションでは、コールドスタートが検出されている可能性があります。コールドスタートは、サーバーレスアプリケーションが突然の大量トラフィックを受け取った場合などに発生します。これは、以前はリクエスト数が比較的一定だった関数が急に多くのリクエストを受け取った場合や、このように関数が非アクティブの状態から初めて呼び出された場合などに起こります。
エラーを調査する
サンプルアプリケーションは定期的にエラーを発生させ、応答が遅くなるように設計されています。その結果、product pricing service (製品価格サービス) で Lambda タイムアウトが発生します。
product-pricing-service
下の 2 つのサービスでエラーが起こっていることに注目してください。サーバーレスビュー上部の Issues & Insights セクションでも、タイムアウトが発生しているサービスがあることが示されています。
関数の詳細
関数をクリックすると、呼び出しや最近のデプロイメントに関する詳細が表示されます。
詳細ビューには 3 つのグラフが含まれ、利用可能な任意のメトリクスを設定できます。デフォルトでは 3 つの拡張 Lambda メトリクス (invocations、errors、duration) が表示されます。
Datadog は、拡張 Lambda メトリクスを低レイテンシーかつ数秒単位の粒度で収集し、コールドスタートやカスタムタグに関する詳細なメタデータを付与した状態で提供します。デフォルトの拡張 Lambda メトリクスダッシュボードもあわせてご確認ください。
Invocations
Invocations タブには、関数の最新の呼び出しが表示されます。
各呼び出しは、トレースと関連付けられています。Open Trace をクリックすると、各呼び出しのトレースが表示されます。
Flame Graph タブでは、呼び出しの期間中にどのサービスが全体の実行時間のうち最大の割合を占めていたかなどが正確に分かります。Flame Graph では、API Gateway を経由して create-product-function
に至るリクエストの流れを可視化します。
ズームアウトすると、下流のすべてのサービスを含むエンドツーエンドのトレース全体を確認できます。
Trace Map タブでは、サービスの流れや相互の接続を視覚化することができます。
エラーを含むトレースを表示している場合、詳細ビューの下部にエラーの内容が表示されます。
Error: Failure generating prices
at PricingService.calculate (/var/task/index.js:94382:13)
at ProductUpdatedEventHandler.handle (/var/task/index.js:95826:51)
at handler (/var/task/index.js:95854:34)
その下で、Lambda のリクエストとレスポンスのペイロードを調べることもできます。Datadog は、Lambda の起動ごとにイベントペイロードを収集します。
ログ
サーバーレスのサンプルアプリは、デフォルトでログが有効になっています。各関数のログは、その Logs タブで見ることができます。
これらのログは、エラーのみを表示するようにフィルタリングしたり、Log Explorer で閲覧したりできます。