Python アプリケーションのインスツルメンテーション
Dash が新機能を発表!インシデントマネジメント、Continuous Profiler など多数の機能が追加されました! Dash イベントで発表された新機能!

Python アプリケーションのインスツルメンテーション

AWS インテグレーションDatadog Forwarder をインストールしたら、以下のいずれかの方法を選択してアプリケーションをインスツルメントし、Datadog にメトリクス、ログ、トレースを送信します。

構成

Datadog Serverless Plugin は、レイヤーを使用して Datadog Lambda ライブラリを関数に自動的に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。

Datadog サーバーレスプラグインをインストールして構成するには、次の手順に従います。

  1. Datadog サーバーレスプラグインをインストールします。

    yarn add --dev serverless-plugin-datadog
  2. serverless.yml に以下を追加します。

    plugins:
      - serverless-plugin-datadog
  3. serverless.yml に、以下のセクションも追加します。

    custom:
      datadog:
        flushMetricsToLogs: true
        forwarder: # The Datadog Forwarder ARN goes here.

    Datadog Forwarder ARN またはインストールの詳細については、こちらを参照してください。追加の設定については、プラグインのドキュメントを参照してください。

このサービスは公開ベータ版です。フィードバックがございましたら、Datadog サポートチームまでお寄せください。

Datadog CloudFormation マクロは、SAM アプリケーションテンプレートを自動的に変換して、レイヤーを使用して Datadog Lambda ライブラリを関数に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。

Datadog CloudFormation マクロのインストール

AWS 認証情報で次のコマンドを実行して、マクロ AWS リソースをインストールする CloudFormation スタックをデプロイします。アカウントの特定のリージョンに一度だけマクロをインストールする必要があります。マクロを最新バージョンに更新するには、create-stackupdate-stack に置き換えます。

aws cloudformation create-stack \
  --stack-name datadog-serverless-macro \
  --template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
  --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM

マクロが表示され、使用を開始できます。

関数をインスツルメントする

template.yml で、SAM の AWS::Serverless 変換の後にTransform セクションの下に以下を追加します。

Transform:
  - AWS::Serverless-2016-10-31
  - Name: DatadogServerless
    Parameters:
      pythonLayerVersion: "<LAYER_VERSION>"
      stackName: !Ref "AWS::StackName"
      forwarderArn: "<FORWARDER_ARN>"
      service: "<SERVICE>" # オプション
      env: "<ENV>" # オプション

<SERVICE><ENV> を適切な値に置き換え、<LAYER_VERSION> を目的のバージョンの Datadog Lambda レイヤーに置き換え (最新リリースを参照)、<FORWARDER_ARN> を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。

マクロのドキュメントに詳細と追加のパラメーターがあります。

このサービスは公開ベータ版です。フィードバックがございましたら、Datadog サポートチームまでお寄せください。

Datadog CloudFormation マクロは、AWS CDK によって生成された CloudFormation テンプレートを自動的に変換して、レイヤーを使用して Datadog Lambda ライブラリを関数に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。

Datadog CloudFormation マクロのインストール

AWS 認証情報で次のコマンドを実行して、マクロ AWS リソースをインストールする CloudFormation スタックをデプロイします。アカウントの特定の地域に一度だけマクロをインストールする必要があります。マクロを最新バージョンに更新するには、create-stackupdate-stack に置き換えます。

aws cloudformation create-stack \
  --stack-name datadog-serverless-macro \
  --template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
  --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM

マクロが表示され、使用を開始できます。

関数をインスツルメントする

AWS CDK アプリの Stack オブジェクトに DatadogServerless 変換と CfnMapping を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。

from aws_cdk import core

class CdkStack(core.Stack):
  def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
    super().__init__(scope, id, **kwargs)
    self.add_transform("DatadogServerless")

    mapping = core.CfnMapping(self, "Datadog",
      mapping={
        "Parameters": {
          "pythonLayerVersion": "<LAYER_VERSION>",
          "forwarderArn": "<FORWARDER_ARN>",
          "stackName": self.stackName,
          "service": "<SERVICE>",  # オプション
          "env": "<ENV>",  # オプション
        }
      })

<SERVICE><ENV> を適切な値に置き換え、<LAYER_VERSION> を目的のバージョンの Datadog Lambda レイヤーに置き換え (最新リリースを参照)、<FORWARDER_ARN> を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。

マクロのドキュメントに詳細と追加のパラメーターがあります。

Zappa 設定の更新

  1. zappa_settings.json に下記の設定を追加します。

    {
        "dev": {
            "layers": ["arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>"],
            "lambda_handler": "datadog_lambda.handler.handler",
            "aws_environment_variables": {
                "DD_LAMBDA_HANDLER": "handler.lambda_handler",
                "DD_TRACE_ENABLED": "true",
                "DD_FLUSH_TO_LOG": "true",
            },
        }
    }
  2. レイヤー ARN のプレースホルダー <AWS_REGION><RUNTIME><VERSION> に適切な値を挿入します。RUNTIME には Python27Python36Python37Python38 のいずれかを使用できます。VERSION については、最新リリースをご確認ください。例:

    # For regular regions
    arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:19
    
    # For us-gov regions
    arn:aws-us-gov:lambda:us-gov-east-1:002406178527:layer:Datadog-Python37:19

Datadog Forwarder をロググループにサブスクライブ

メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブする必要があります。

  1. まだの場合は、Datadog Forwarder をインストールします
  2. DdFetchLambdaTags のオプションが有効であることを確認します
  3. Datadog Forwarder を関数のロググループにサブスクライブします
このサービスは公開ベータ版です。フィードバックがございましたら、Datadog サポートチームまでお寄せください。

Datadog CLI を使用して、CI/CD パイプラインの Lambda 関数にインスツルメンテーションを設定します。CLI コマンドは、レイヤーを使用して Datadog Lambda ライブラリを関数に自動的に追加し、メトリクス、トレース、ログを Datadog に送信するように関数を構成します。

Datadog CLI のインストール

NPM または Yarn を使用して Datadog CLI をインストールします。

# NPM
npm install -g @datadog/datadog-ci

# Yarn
yarn global add @datadog/datadog-ci

関数をインスツルメントする

AWS 認証情報を使用して次のコマンドを実行します。<functionname><another_functionname> を Lambda 関数名に置き換え、<aws_region> を AWS リージョン名に置き換え、<layer_version> を目的のバージョンの Datadog Lambda レイヤーに置き換え (最新リリースを参照)、<forwarder_arn> を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。

datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -v <layer_version> --forwarder <forwarder_arn>

例:

datadog-ci lambda instrument -f my-function -f another-function -r us-east-1 -v 19 --forwarder arn:aws:lambda:us-east-1:000000000000:function:datadog-forwarder

CLI のドキュメントに詳細と追加のパラメーターがあります。

Datadog Lambda ライブラリのインストール

Datadog Lambda ライブラリをレイヤーまたは Python パッケージとしてインポートすることができます。

datadog-lambda パッケージのマイナーバージョンは、常にレイヤーのバージョンに一致します。例: datadog-lambda v0.5.0 は、レイヤーバージョン 5 のコンテンツに一致。

レイヤーの使用

以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

# 通常のリージョンの場合
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>

# 米国政府リージョンの場合
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:<VERSION>

使用できる RUNTIME オプションは、Python27Python36Python37Python38 です。VERSION については、最新リリースを参照してください。例:

arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:19

パッケージの使用

datadog-lambda とその依存関係を、ローカルで関数プロジェクトフォルダーにインストールします。詳しくは、関数デプロイメントパッケージに依存関係を追加する方法をご参照ください。

pip install datadog-lambda -t ./

最新リリースを参照。

関数の構成

  1. 関数のハンドラーを datadog_lambda.handler.handler に設定します。
  2. 元のハンドラーに、環境変数 DD_LAMBDA_HANDLER を設定します。例: myfunc.handler
  3. 環境変数 DD_TRACE_ENABLEDtrue に設定します。
  4. 環境変数 DD_FLUSH_TO_LOGtrue に設定します。
  5. オプションで、関数に service および env タグを適切な値とともに追加します。

Datadog Forwarder をロググループにサブスクライブ

メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブする必要があります。

  1. まだの場合は、Datadog Forwarder をインストールします
  2. DdFetchLambdaTags のオプションが有効であることを確認します
  3. Datadog Forwarder を関数のロググループにサブスクライブします

Datadog サーバーレスモニタリングの利用

以上の方法で関数を構成すると、Serverless Homepage でメトリクス、ログ、トレースを確認できるようになります。

カスタムメトリクスの送信または関数の手動インスツルメントをご希望の場合は、以下のコード例をご参照ください。

from ddtrace import tracer
from datadog_lambda.metric import lambda_metric

def lambda_handler(event, context):
    # カスタムメトリクスを送信する
    lambda_metric(
        "coffee_house.order_value",  # メトリクス名
        12.45,  # メトリクス値
        tags=['product:latte', 'order:online']  # タグ
    )
    return {
        "statusCode": 200,
        "body": get_message()
    }

# カスタムスパンを送信する
@tracer.wrap()
def get_message():
    return "Hello from serverless!"