AWS Lambda関数の分散トレーシング

自動計装

7 min

ワークショップの最初の部分では、OpenTelemetryによる自動計装がどのようにしてOpenTelemetry Collectorに関数がどの言語で書かれているかを自動検出させ、それらの関数のトレースの取得を開始させるかを示します。

自動計装ワークショップディレクトリとコンテンツ

まず、o11y-lambda-workshop/auto ディレクトリとそのファイルの一部を見てみましょう。ここにはワークショップの自動計装部分のすべてのコンテンツがあります。

auto ディレクトリ

main.tf ファイル

ワークショップの質問

  • このテンプレートによってどのAWSリソースが作成されているか特定できますか?
  • OpenTelemetry計装がどこでセットアップされているか特定できますか?
    • ヒント: Lambda 関数の定義を調べてください
  • 以前に設定した環境変数によってどの計装情報が提供されているか判断できますか?

各Lambda関数の環境変数が設定されているセクションが見つかるはずです。

bash
environment {
  variables = {
    SPLUNK_ACCESS_TOKEN = var.o11y_access_token
    SPLUNK_REALM = var.o11y_realm
    OTEL_SERVICE_NAME = "producer-lambda"
    OTEL_RESOURCE_ATTRIBUTES = "deployment.environment=${var.prefix}-lambda-shop"
    AWS_LAMBDA_EXEC_WRAPPER = "/opt/nodejs-otel-handler"
    KINESIS_STREAM = aws_kinesis_stream.lambda_streamer.name
  }
}

これらの環境変数を使用することで、いくつかの方法で自動計装を構成しています

また、各関数にSplunk OpenTelemetry Lambda layerを設定する引数も確認できるはずです

bash
layers = var.otel_lambda_layer

producer.mjs ファイル

次に、producer-lambda 関数のコードを見てみましょう

Lambda 関数のデプロイとトレースデータの生成

auto ディレクトリの内容に慣れたところで、ワークショップ用のリソースをデプロイし、Lambda関数からトレースデータを生成していきます。

auto ディレクトリで Terraform を初期化する

main.tf ファイルで定義されたリソースをデプロイするには、まずTerraformがそのファイルと同じフォルダで初期化されていることを確認する必要があります。

Lambda 関数とその他の AWS リソースをデプロイする

このディレクトリでTerraformを初期化したら、リソースのデプロイに進むことができます。

producer-lambda URL (base_url) にトラフィックを送信する

デプロイしたLambda関数からトレースを取得し始めるには、トラフィックを生成する必要があります。producer-lambda 関数のエンドポイントにメッセージを送信し、それをKinesisストリームにレコードとして配置し、その後 consumer-lambda 関数によってストリームから取得されるようにします。

send_message.py スクリプトは、コマンドラインで入力を受け取り、JSONディクショナリに追加し、whileループの一部として producer-lambda 関数のエンドポイントに繰り返し送信するPythonスクリプトです。

Info

この場合は、ワークショップ進行役の一人に支援を求めてください。

Lambda 関数のログを表示する

次に、Lambda関数のログを確認しましょう。

ログを注意深く調べてください。

ワークショップの質問

  • OpenTelemetryが読み込まれているのが見えますか?splunk-extension-wrapper のある行に注目してください
      • splunk-extension-wrapperが読み込まれているのを見るために head -n 50 producer.logs または head -n 50 consumer.logs の実行を検討してください。
Last Modified ·