AWS

DatadogのCloud FunctionsでLambdaのパフォーマンスを確認するまで。X-Ray経由ですけどね。

はじめに

DatadogでLambdaを監視する方法を紹介します。
最初はインテグレーションして簡単にできると思っていましたが、思った以上に面倒でした。
DatadogはLambdaから直接、パフォーマンスなどを取得することはできません。X-Rayから間接的に取得します。
また、メトリックスはLAYERの設定を行ったり、Logに関しては新たに関数を作成して別途取得する必要があります。

今回はサンプルとしてAPI Gateway + DynamoDB + Lambda(Python)で動作する環境を監視してみたいと思います。

環境構築は下記を参考に作成してください(ありがたしクラスメソッド)。
初めてのサーバーレスアプリケーション開発 ~DynamoDBにテーブルを作成する~
初めてのサーバーレスアプリケーション開発 ~LambdaでDynamoDBの値を取得する~
初めてのサーバーレスアプリケーション開発 ~API GatewayからLambdaを呼び出す~

他の前提として
・DatadogでAWSのインテグレーション済み

X-Ray SDKをLambdaに仕込んでX-Ray、Datadogで監視する

一番手っ取り早い方法として、SDK(今回はPython)をアップロードするZIPに梱包する方法です。

開発環境、といってもAmazon Linux2を立ち上げてPython(2.7)を使える環境を整えただけです。
pipを利用するのでインストールしておきます。

まず最初に、作業用ディレクトリを作成、移動します。

次にX-Ray SDKを作業用ディレクトリにインストールします。

Python2.7の場合(だけ?)、X-Ray SDK以外にも依存関係がありsetuptools も必要です。

X-Ray SDKを利用するには、下記の行を挿入するだけです。

lambda_function.py を作業用ディレクトリに作成する。

ZIPで保存。

保存したZIPをLambdaにUploadし、保存します。
AWSで行っている場合は、一度クライアント側にSCPで持ってくるなど必要です。
RuntimeをPython2.7に変更します。

LambdaがX-Rayで見れるよう、Debugging and error handlingのactive tracingを有効にします。

API GatewayをX-Rayでトレースできるよう設定します。
Logs/Tracing からX-Ray Tracingを有効化します。
実行ロールに「AWSXrayWriteOnlyAccess」を付与。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/enabling-x-ray.html

あとはAPI Gateway経由でアクセスしfunctionを動作させます。
その後 しばらくするとX-Rayで表示されることを確認します。

Service Map

Trace

Details

ではX-Rayで表示を確認できたためDatadog側の表示を確認します。
Cloud functionsで確認を行います。

上記の画像ではLogの収集が行われていないことが分かります。
ログの取得は下記の手順通りです。
https://docs.datadoghq.com/integrations/amazon_web_services/?tab=allpermissions#set-up-the-datadog-lambda-function

設定を行うことで、Logの取得が行われDatadog側にも反映されます。

また、メトリックスを取得したい場合は下記を参考にしLAYERを設定します。
https://docs.datadoghq.com/integrations/amazon_lambda/#custom-metrics

下記はサンプルですが、バージョンに合わせてPython36の箇所を変更します。Python27、Python37。

サンプルコード

以上で基本的な設定は完了です。
あとは頑張って分析してください。

あと残念ながらDatadog APMでService Mapは表示されません。

まとめ

パフォーマンスが上がらないのはインフラが悪いからと言わずにX-Rayを利用して原因(ボトルネック)を探してみましょう。APM系な話はインフラ屋だけでも出来ないし、デベロッパーだけでも出来ません。一緒になって頑張りましょう。

APMってあまり日本で使われている感じがしないのは気のせいだろうか?

関連記事

  1. AWS

    AzureとAWSを接続してみようと思うけどどうやるの?

    はじめにくどうです。2015年初投稿です。クラウド間で接続して…

  2. AWS

    CloudMonixをちょっとだけ試してみた。

    はじめにくどうです管理運用面倒ですね・・・そこで、楽に…

  3. Azure

    Deep Security User Night #3 に参加してきました。

    はじめにくどうですDeep Security User N…

  4. AWS

    超メモ:cloud-initでgrowpartを利用する場合の注意

    はじめにくどうです。超メモです。これは、ハマリました。だってc…

  5. AWS

    マネージドサービスだけでAzureとAWSを接続する方法。

    はじめに2019/2/6 AWSでサイト対サイト VPNでIK…

  1. dev

    私はVS CodeでGithubにpullしたいだけなんです。
  2. Azure

    Azure Application Gateway で Let’s Encryp…
  3. 未分類

    National Information Security Center
  4. 未分類

    Windows7にWindows SharePoint Services 3.0…
  5. Azure

    リリース前にリソースはLockしようぜ。間違って削除したらおバカです。
PAGE TOP