Help us understand the problem. What is going on with this article?

Datadog enhanced AWS Lambda metrics を試してみる

enhanced AWS Lambda metrics とは

image.png
DatadogにてAWSを連携すると出てくるデフォルトダッシュボードの中に存在する謎なやつ(図の下側)

image.png

とりあえず開いてみても情報なし、下側のInvocationsの値は入ってるのに、上側のInvocationsには値が入ってない :thinking:

参照元メトリクスを見てみると別物参照してますね
上側: aws.lambda.enhanced.invocations
下側: aws.lambda.invocations

enhanced はどこから取得するのか

Lambda の enhanced 情報の取得の仕方

ダッシュボードのトップに拡張Lambdaメトリクスを設定してとかかれてるので、設定方法がかかれたページへ移動します。

有効方法がかかれてますね(英語わからん)
image.png

英語わからんなりに読み解くと
1. Datadog Forwarder を設定する
2. メトリクスを取得したいLambdaのLambda LayerにDatadog Lambda Layerを入れる
3. LambdaのタグをDatadogのメトリクスに流用したければ Datadog Forwarder 側に DdFetchLambdaTags:true の変数を付与する
4. サンプルコードのようにDatadogのLibraryでラップする(pythonだとデコレータ付与するだけで良さそう)
5. ブラウザでさっきのダッシュボードを確認する

なのかな試してみます。

Datadog Forwarder を設定する

Datadog Forwarder を見に行くと、CloudFormationのテンプレート があったので利用します。

テンプレートには下記を設定(設定したもの以外はデフォルト値)

  • DdFetchLambdaTags : true
  • DdApiKey : 自身のDatadogのAPIキー

image.png
IAMとかのリソース作ってよいか聞かれるので、チェックして Create Stack

Datadog Layerを使ったサンプルコード作成

何でも良いかと思い、Python3のhello-worldのBlueprintを利用します。
image.png

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

これを使っていきます

image.png
サンプルのLambdaの Layers を選択すると Add a Layer があるのでクリック

image.png
先程のDatadog Layerを入力する

image.png

追加されました。

Datadog ライブラリでサンプルコードをラップ

コードにこの2行を追加
from datadog_lambda.wrapper import datadog_lambda_wrapper
@datadog_lambda_wrapper

全体像

lambda_function.py
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を紐付ける
image.png

動作確認

サンプルコード(test)を試しに3回連続で実行してみた

image.png

Invocations等に値が入るようになった、3連続のためか、Invocationsは3でCold Startsが1となった。

image.png

メモリの消費状況等も見れるようだ

まとめ

Datadog の enhanced AWS Lambda metrics を利用できるようにしてみました。
通常のLambdaのダッシュボードとは異なりCold_startの状況や、メモリの消費状況などが確認できるのでLambdaのスペックなどをチューニングする際などにやくだちそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした