LoginSignup
2
4

More than 1 year has passed since last update.

AWS Lambda+pythonからdatadogにカスタムメトリクスを送信

Posted at

はじめに

AWS Lambdaの関数からdatadogへカスタムメトリクスを送信する方法のメモです。今回の実装にはpythonを利用しました。

参考にした記事

実際にやったこと

関数の作成

まず関数を作成。ランタイムはpython3.8を作成

datadog1.png

レイヤーを追加

オンプレサーバからpythonでカスタムメトリクスを送信するときはpipコマンドでdatadogライブラリを追加しますが、Lambdaなのでレイヤーを追加しておいてライブラリを使えるようにします。
datadog自身がレイヤーを用意してくれているので、それを使うことにします。

関数の概要画面の下部にスクロールして「レイヤーの追加」をクリック
datadog2.png
中略
datadog3.png

レイヤーの追加はARNを指定して追加します。
datadogがレイヤーを公開しているので、ここから最新版を選ぶ必要があります。
https://github.com/DataDog/datadog-lambda-python/releases

今回の関数はpython3.8にて実装するため以下のARNを使います
- arn:aws:lambda::464622532012:layer:Datadog-Python38:42

私は東京リージョン(ap-northeast-1)で関数を実装したため、以下のARNを設定することにします
arn:aws:lambda:ap-northeast-1:464622532012:layer:Datadog-Python38:42
datadog4.png

Lambdaにて環境変数を設定する

datadogを利用するためには環境変数の設定も必要なので、設定しておきます。
datadog側でAPIキーを発行しておいて、下記の環境変数を設定します。
- DD_API_KEY:APIキー

関数の実装

あとは関数をpythonで実装するのみです。
以下はlambda.test_metricsという名称にて99.99というメトリクス値を送信するプログラムです

lambda_function.py
import json

from datadog_lambda.metric import lambda_metric
from datadog_lambda.wrapper import datadog_lambda_wrapper

@datadog_lambda_wrapper
def lambda_handler(event, context):
    tags = ['name:testapp']
    metric = "lambda.test_metrics"
    value = 99.99
    lambda_metric(metric, value, tags=tags)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

結果

datadogのMetrics Explorerで閲覧してみると送信されていることがわかります
datadogに慣れている人ならご存知かと思いますが、メトリクスが反映されるまでに少しかかるので関数実行直後に見に行くとハマります。

datadog6.png

課題

公式は非同期メトリクスを有効にすることを推奨(環境変数:DD_FLUSH_TO_LOGを参照)していますが、Datadog Forwarderを使う必要があるようです。ここらへんは試したらまた記事を執筆することにします。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4