Unsupported-Field-Workshops

Auto-Instrumentation

3 min

Auto-Instrumentation

自動計装コードが含まれる auto ディレクトリに移動します。

text
cd ~/o11y-lambda-lab/auto

このディレクトリ内のファイルの内容を確認します。serverless.yml テンプレートを見てみましょう。

text
cat serverless.yml

Workshop Question

  • このテンプレートによって作成される AWS エンティティを特定できますか?
  • OpenTelemetry の計装がどこで設定されているか特定できますか?
  • 環境変数によって提供されている計装情報を判別できますか?

各関数に Splunk OpenTelemetry Lambda レイヤーが追加されていることが確認できるはずです。

text
layers:
      - arn:aws:lambda:us-east-1:254067382080:layer:splunk-apm:70

各 AWS リージョンの関連するレイヤー ARN(Amazon Resource Name)と最新バージョンはこちらで確認できます: https://github.com/signalfx/lambda-layer-versions/blob/main/splunk-apm/splunk-apm.md

環境変数が設定されているセクションも確認できるはずです。

text
environment:
  AWS_LAMBDA_EXEC_WRAPPER: /opt/nodejs-otel-handler
  OTEL_RESOURCE_ATTRIBUTES: deployment.environment=${self:custom.prefix}-apm-lambda
  OTEL_SERVICE_NAME: consumer-lambda
  SPLUNK_ACCESS_TOKEN: ${self:custom.accessToken}
  SPLUNK_REALM: ${self:custom.realm}

環境変数を使用して、自動計装の設定とエンリッチメントを行っています。

ここでは、Splunk APM Layer 内の NodeJS ラッパーの場所、環境名、サービス名、Splunk Org の認証情報など、最小限の情報を提供しています。トレースデータは Splunk Observability Cloud に直接送信しています。代わりに、Gateway モードで設定された OpenTelemetry Collector にトレースをエクスポートすることもできます。

関数コードを確認してみましょう。

text
cat handler.js

Workshop Question

  • producer 関数のコードを特定できますか?
  • consumer 関数のコードを特定できますか?

コード内に Splunk や OpenTelemetry への言及がないことに注目してください。計装は Lambda レイヤーと環境変数のみを使用して追加しています。

Lambda のデプロイ

以下のコマンドを実行して Lambda Functions をデプロイします:

text
sls deploy

このコマンドは serverless.yml テンプレートの指示に従って、Lambda 関数と Kinesis ストリームを作成します。実行には1〜2分かかる場合があります。

Note

serverless.yml は実際には CloudFormation テンプレートです。CloudFormation は AWS の Infrastructure as Code サービスです。詳細はこちらをご覧ください - https://aws.amazon.com/cloudformation/

サーバーレス関数の詳細を確認します:

text
sls info

エンドポイントの値をメモしてください:

2-auto-1-endpoint-value

トラフィックの送信

curl コマンドを使用して producer 関数にペイロードを送信します。コマンドオプション -d の後にメッセージペイロードを指定します。

name の値をあなたの名前に変更し、Lambda 関数にあなたの超能力を伝えてみてください。YOUR_ENDPOINT を前のステップで取得したエンドポイントに置き換えてください。

text
curl -d '{ "name": "CHANGE_ME", "superpower": "CHANGE_ME" }' YOUR_ENDPOINT

例:

text
curl -d '{ "name": "Kate", "superpower": "Distributed Tracing" }' https://xvq043lj45.execute-api.us-east-1.amazonaws.com/dev/producer

メッセージが正常に送信された場合、以下の出力が表示されます:

text
{"message":"Message placed in the Event Stream: hostname-eventSteam"}

失敗した場合は、以下が表示されます:

text
{"message": "Internal server error"}

この場合は、ラボのファシリテーターに支援を依頼してください。

成功メッセージが表示されたら、さらに負荷を生成します: そのメッセージを5回以上再送信してください。送信するたびに成功メッセージが表示されるはずです。

Lambda のログ出力を確認します:

Producer 関数のログ:

text
sls logs -f producer

Consumer 関数のログ:

text
sls logs -f consumer

ログを注意深く確認してください。

Workshop Question

OpenTelemetry がロードされていることが確認できますか?splunk-extension-wrapper を含む行に注目してください。
Last Modified ·