enhanced AWS Lambda metrics とは
DatadogにてAWSを連携すると出てくるデフォルトダッシュボードの中に存在する謎なやつ(図の下側)
とりあえず開いてみても情報なし、下側のInvocationsの値は入ってるのに、上側のInvocationsには値が入ってない
参照元メトリクスを見てみると別物参照してますね
上側: aws.lambda.enhanced.invocations
下側: aws.lambda.invocations
enhanced はどこから取得するのか
Lambda の enhanced 情報の取得の仕方
ダッシュボードのトップに拡張Lambdaメトリクスを設定してとかかれてるので、設定方法がかかれたページへ移動します。
英語わからんなりに読み解くと
- Datadog Forwarder を設定する
- メトリクスを取得したいLambdaのLambda LayerにDatadog Lambda Layerを入れる
- LambdaのタグをDatadogのメトリクスに流用したければ Datadog Forwarder 側に
DdFetchLambdaTags
:true
の変数を付与する - サンプルコードのようにDatadogのLibraryでラップする(pythonだとデコレータ付与するだけで良さそう)
- ブラウザでさっきのダッシュボードを確認する
なのかな試してみます。
Datadog Forwarder を設定する
Datadog Forwarder を見に行くと、CloudFormationのテンプレート があったので利用します。
テンプレートには下記を設定(設定したもの以外はデフォルト値)
-
DdFetchLambdaTags
:true
-
DdApiKey
:自身のDatadogのAPIキー
IAMとかのリソース作ってよいか聞かれるので、チェックして Create Stack
Datadog Layerを使ったサンプルコード作成
何でも良いかと思い、Python3のhello-worldのBlueprintを利用します。
function名だけ指定してCreate(今回はtestって名前)
Datadog Lambda Layer を作成したコードに追加
[Datadog Lambda Layer]https://docs.datadoghq.com/integrations/amazon_lambda/?tab=awsconsole#installing-and-using-the-datadog-lambda-layer
現時点のpython3.7用は arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:11
これを使っていきます
サンプルのLambdaの Layers
を選択すると Add a Layer
があるのでクリック
追加されました。
Datadog ライブラリでサンプルコードをラップ
コードにこの2行を追加
from datadog_lambda.wrapper import datadog_lambda_wrapper
@datadog_lambda_wrapper
全体像
import json
from datadog_lambda.wrapper import datadog_lambda_wrapper
print('Loading function')
@datadog_lambda_wrapper
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
print("value1 = " + event['key1'])
print("value2 = " + event['key2'])
print("value3 = " + event['key3'])
return event['key1'] # Echo back the first key value
#raise Exception('Something went wrong')
サンプルコードに環境変数を追加
前段の状態でテスト実行してもエラーになるので下記環境変数を追加
-
DD_API_KEY
:自分のDatadogのAPIキー
一応これだけで動くようになるのですが、結果これだけではやりたいことに足らなかったので以下の環境変数も追加します。
-
DD_ENHANCED_METRICS
:true
- Enhanced メトリクスを有効化
-
DD_FLUSH_TO_LOG
:true
- 設定されていないと有効化されたEnhanced メトリクスがCloudWatch Logsにながれない
CloudWatch LogsにEnhancedメトリクス用のデータが流れる
サンプルコードの設定が終わりテスト実行すると、以下のようなログが流れるようになる。
{
"m": "aws.lambda.enhanced.invocations",
"v": 1,
"e": 1590216872,
"t": [
"region:us-east-1",
"account_id:xxxxxxxx",
"functionname:test",
"cold_start:true",
"memorysize:128",
"runtime:python3.7",
"dd_lambda_layer:datadog-python37_0.11.0"
]
}
Datadog Forwarder に サンプルコードの Logs を紐付ける
とりあえず、前段の状態でテスト実行しても、aws.lambda.invocations
の値は増えるが
aws.lambda.enhanced.invocations
に変化は見られない。
Datadog ForwarderのReadmeを見ると
Set up triggers to the installed Forwarder either automatically or manually.
って書いてあるのでサンプルコードのLogsを紐付ける
動作確認
サンプルコード(test)を試しに3回連続で実行してみた
Invocations等に値が入るようになった、3連続のためか、Invocations
は3でCold Starts
が1となった。
メモリの消費状況等も見れるようだ
まとめ
Datadog の enhanced AWS Lambda metrics を利用できるようにしてみました。
通常のLambdaのダッシュボードとは異なりCold_startの状況や、メモリの消費状況などが確認できるのでLambdaのスペックなどをチューニングする際などにやくだちそうです。