Pythonのコードを実行するLambdaのトレースを、ADOT(AWS Distro for OpenTelemetry)を使用してMackerelに送信するための手順です。
Lambda関数の作成
簡単なPythonのコードを実行する関数を作成する。すでにある場合は不要。

関数を作成したら、設定画面のコードタブに適当なコードを貼り付けてDeployする。コードの内容は省くがGeminiに作ってもらった。
ADOTレイヤーの追加
トレースを送信するためのADOTレイヤーを関数に追加する。コードタブの下の方にレイヤーを追加する箇所がある。

レイヤーの追加をクリックし、ARNを指定する。

ここに指定するARNは AWS Distro for OpenTelemetry Lambda Support For Python で確認できる。arn:aws:lambda:ap-northeast-1:901920570463:layer:aws-otel-python-amd64-ver-1-29-0:2 という名前からわかるように、ap-northeast-1かつPython向けのものになっている。リージョンが違う場合はリージョンを置き換える。他の言語のものを使用する場合は Getting Started with AWS Lambda layers にあるリンクを参照すればよさそう。
Lambda サービストレースの有効化
AWS Distro for OpenTelemetry Lambda Support For Python の Enable auto-instrumentation for your Lambda function に記載の通り、アクティブトレースを有効にする。
設定タブ > モニタリングおよび運用ツール > その他の監視ツールの編集ボタンをクリックする。

CloudWatch アプリケーションシグナルと AWS X-RayのLambda サービストレースの有効化にチェックを入れて保存する。

環境変数の設定
トレースの送信先やMackerle APIキーなどを環境変数で設定する。設定タブの環境変数をクリックする。
ここで以下の環境変数を設定する。
| キー | 値 |
|---|---|
AWS_LAMBDA_EXEC_WRAPPER |
/opt/otel-instrument |
OTEL_EXPORTER_OTLP_PROTOCOL |
http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
https://otlp-vaxila.mackerelio.com/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
Accept=*/*,Mackerel-Api-Key=<Mackerel APIキー> |
OTEL_RESOURCE_ATTRIBUTES(任意) |
service.namespace=<サービスネームスペース名> |
AWS_LAMBDA_EXEC_WRAPPERは言語によって異なる模様。Enable auto-instrumentation for your Lambda function に記載の通り、Pythonの場合は/opt/otel-instrumentになる。
なお、スパンに含まれるservice.nameはLambdaの関数名になる。OTEL_RESOURCE_ATTRIBUTESにservice.nameを指定しても変わらなかったが、別の方法で変更できるのかもしれない。service.namespaceはちゃんと反映される。
テスト実行
テストタブでテストを実行する。
トレースを確認する
Mackerelにトレースが送信されていることを確認した。

おまけ
同じVPC内のRDSにSELECTクエリを投げるだけのコードを実行した時のトレースの様子。SELECTのスパンが表示されているし、データベースパフォーマンス画面にもクエリが表示されている。


