はじめに
AWS Lambdaの関数からdatadogへカスタムメトリクスを送信する方法のメモです。今回の実装にはpythonを利用しました。
参考にした記事
- datadog自身のブログ
- https://www.datadoghq.com/ja/blog/datadog-lambda-layer/
- datadog社「カスタムメトリクス」
- https://docs.datadoghq.com/ja/serverless/custom_metrics/
実際にやったこと
関数の作成
まず関数を作成。ランタイムはpython3.8を作成
レイヤーを追加
オンプレサーバからpythonでカスタムメトリクスを送信するときはpipコマンドでdatadogライブラリを追加しますが、Lambdaなのでレイヤーを追加しておいてライブラリを使えるようにします。
datadog自身がレイヤーを用意してくれているので、それを使うことにします。
関数の概要画面の下部にスクロールして「レイヤーの追加」をクリック
中略
レイヤーの追加は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
Lambdaにて環境変数を設定する
datadogを利用するためには環境変数の設定も必要なので、設定しておきます。
datadog側でAPIキーを発行しておいて、下記の環境変数を設定します。
- DD_API_KEY:APIキー
関数の実装
あとは関数をpythonで実装するのみです。
以下はlambda.test_metricsという名称にて99.99というメトリクス値を送信するプログラムです
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に慣れている人ならご存知かと思いますが、メトリクスが反映されるまでに少しかかるので関数実行直後に見に行くとハマります。
課題
公式は非同期メトリクスを有効にすることを推奨(環境変数:DD_FLUSH_TO_LOGを参照)していますが、Datadog Forwarderを使う必要があるようです。ここらへんは試したらまた記事を執筆することにします。