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. Azure

    AKS ( Kubernetes ) のPod からログをFilebeat を使って収集してelas…

    はじめにくどうです。先日、fluentd によるKuber…

  2. AWS

    AWSのx86_64とarmのベンチマーク

    UnixBenchをとってみたt2.small …

  3. AWS

    Azure ADとAWS Directory Serviceで同期してみよう。

    はじめにどうも、くどうです。今回は、Microsoft Azure…

  4. AWS

    mackerelを使ってみたんだけど簡単だった。

    mackerelなるサービスがリリースされたので試してみました。クラ…

  5. Azure

    他社さんの、社内勉強会に行ってきた。

    はじめにくどうです。9/8にNTTPCコミュニケーションズさんの…

  6. AWS

    Deep Security as a Service (DSaaS)でProxyを利用する場合の注意…

    はじめにくどうです。DSaaSをProxyを使用する場合の…

  1. AlibabaCloud

    Alibaba Cloud Elastic Compute Service (E…
  2. セキュリティ

    OWASP Night 20th に行ってきた。
  3. Azure

    Cognitive ServicesでFace APIを使ってみる。これ面白い!…
  4. Azure

    Diagnosticsのログフォーマットが変わってた。だから・・・注意してね。
  5. AWS

    パソコン同士をVPNで接続する方法(お気に入りツールの紹介)
PAGE TOP