AWS Lambda サーバーレスモニタリングの概要

概要

サーバーレスとは、開発者が自分でインフラストラクチャーを管理するのではなく、クラウドプロバイダーを使ってアプリケーションやサービスを構築し、実行するモデルです。Datadog サーバーレスモニタリングは、サーバーレスインフラクチャーからメトリクス、ログ、トレースを収集し、アプリケーションの健全性とパフォーマンスを監視することを可能にします。

このガイドでは、ワンクリックで起動できるサーバーレスのサンプルアプリを利用します。このアプリには、サーバーレスモニタリングがあらかじめ構成されています。このガイドに従って、サンプルアプリの問題をどのようにトラブルシューティングするか、また、サーバーレスモニタリングがどのような可視性を提供できるかを確認します。

サンプルアプリをインストールする

  1. CloudFormation Stack を起動します。このリンクから Create stack ページが表示されます。
  2. Datadog API キーDatadog サイトを入力します ()。
2 つの関数のクローズアップ

次に、IAM 機能を確認し、Create Stack をクリックします。

  1. スタック作成後、Outputs タブを開きます。
2 つの関数のクローズアップ

ApiGatewayInvokeURL にアクセスして、サンプルアプリを数回起動します。すると、“Sent message to SNS” という成功メッセージが返ってきます。

各呼び出しは以下のように実行されます。

import boto3, os

def handler(event, context):
    sns = boto3.client('sns')

    sns.publish(
        TopicArn=os.environ.get("SNS_TOPIC_ARN"),
        Message='Message sent to SNS'
        )

    return {
        "body": "Sent message to SNS",
        "statusCode": 200
    }

サーバーレスビューでサンプルアプリの関数を見ることができます。

サーバーレスモニタリング: エクスプローラーページ「サーバーレスビュー」

サーバーレスビュー

サーバーレスビューは、AWS 環境内のすべてのサーバーレスリソースからのテレメトリーを表示します。このページは、アプリケーションの監視、デバッグ、最適化のための出発点として使用できます。

サンプルアプリを一度でも起動したことがあれば、datadog-sample-entry-functiondatadog-sample-sqs-consumer-function が表示されるはずです。

2 つの関数のクローズアップ

サーバーレスインサイト

サーバーレスビューでは、一番右の列に ** Insights** というタイトルがあります。Datadog は、サーバーレスアプリケーションの高エラー高継続時間などの潜在的な問題を自動的にハイライトし、これらの問題は Insights 列に表示されます。

サーバーレスサンプルアプリケーションについて、Datadog はコールドスタートを検出した可能性が高いです。コールドスタートは、サーバーレスアプリケーションがトラフィックの急激な増加を受け取ったときに発生します。これは、関数が以前は比較的一定の数のリクエストを受け取っていたのに、突然、より多くのリクエストを受け取るようになった場合や、このケースのように、関数が以前は非アクティブで、初めて呼び出された場合に発生する可能性があります。

調査するためのエラーを作成する

サンプルアプリのスタックにある datadog-sample-entry-function を編集することで、意図的にエラーを発生させることができます。

  # エントリー Lambda 関数コード
  def handler(event, context):

    raise Exception('Throw an error.')
2 つの関数のクローズアップ

この変更をデプロイして、サンプルアプリを再度起動し、Datadog でこのエラーを調査する方法を確認します。

2 つの関数のクローズアップ

datadog-sample-entry-function には 5 つのエラーがあることに注意してください。

関数の詳細

関数をクリックすると、呼び出しや最近のデプロイメントに関する詳細が表示されます。

2 つの関数のクローズアップ

上図のように、詳細ビューには3つのグラフが表示されます。これらは、利用可能な任意のメトリクスを表示するように設定できます。デフォルトでは、3 つの拡張 Lambda メトリクス : 呼び出し、エラー、継続時間が表示されます。

Datadog は、低レイテンシー、数秒単位の粒度、コールドスタートやカスタムタグの詳細なメタデータを備えた拡張 Lambda メトリクスをすぐに生成します。また、デフォルトの拡張 Lambda メトリクスダッシュボードを表示することができます。

Invocations

Invocations タブには、関数の最新の呼び出しが表示されます。

各呼び出しは、トレースと関連付けられています。Open Trace をクリックすると、各呼び出しのトレースが表示されます。

2 つの関数のクローズアップ

Flame Graph タブには、実行時間全体の中で最も高い割合を占めたサービスを含め、この呼び出しの間に何が起こったかを正確に表示します。フレームグラフは、リクエストが APIGateway から datadog-sample-entry-function を経て、SNS、SQS、そして最後に datadog-sample-sqs-function を通過したときの様子を表示します。

2 つの関数のクローズアップ

Trace Map タブでは、サービスの流れや相互の接続を視覚化することができます。

詳細トレースビューの下半分には、スタックトレースが表示され、エラーをスローしたコードの行が明らかにされます。

Traceback (most recent call last):
  File /opt/python/lib/python3.9/site-packages/datadog_lambda/wrapper.py, line 142, in __call__
    self.response = self.func(event, context, **kwargs)
File /var/task/index.py, line 17, in handler
    raise Exception('Throw an error.')
Exception: Throw an error.

その下で、Lambda のリクエストとレスポンスのペイロードを調べることもできます。Datadog は、Lambda の起動ごとにイベントペイロードを収集します。

ログ管理

サーバーレスのサンプルアプリは、デフォルトでログが有効になっています。各関数のログは、その Logs タブで見ることができます。

2 つの関数のクローズアップ

これらのログをフィルタリングしてエラーだけを表示したり、ログエクスプローラーで表示したりすることができます。