このガイドでは以下を統合します:
| ✅ ログ | ✅ メトリクス | ✅ トレース |
OpenTelemetry Lambda レイヤーをインストールする
OpenTelemetry プロジェクトでは、次の目的に応じて個別の Lambda レイヤーが提供されています。
- OpenTelemetry の自動インストルメンテーションを使用して、Lambda 関数のコードを自動的にインストルメントする。
- 収集したログ、メトリクス、トレースを ClickStack に転送する。
言語別の自動インストルメンテーションレイヤーを追加する
言語別の自動インストルメンテーション Lambda レイヤーを使用すると、対象の言語向け OpenTelemetry 自動インストルメンテーションパッケージによって、Lambda 関数のコードが自動的にインストルメントされます。
各言語およびリージョンには、それぞれ専用のレイヤー ARN があります。
Lambda がすでに OpenTelemetry SDK でインストルメントされている場合は、この手順は省略できます。
開始するには:
- Layers セクションで "Add a layer" をクリックします
- ARN を指定するオプションを選択し、言語に応じた正しい ARN を選びます。
<region>は実際のリージョン (例:us-east-2) に置き換えてください:
arn:aws:lambda:<region>:184161586896:layer:opentelemetry-nodejs-0_7_0:1arn:aws:lambda:<region>:184161586896:layer:opentelemetry-python-0_7_0:1arn:aws:lambda:<region>:184161586896:layer:opentelemetry-javaagent-0_6_0:1arn:aws:lambda:<region>:184161586896:layer:opentelemetry-ruby-0_1_0:1レイヤーの最新リリースは、OpenTelemetry Lambda Layers GitHubリポジトリ で確認できます。
- Lambda 関数の "Configuration" > "Environment variables" で、以下の環境変数を設定します。
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
OTEL_PROPAGATORS=tracecontext
OTEL_TRACES_SAMPLER=always_onOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
OTEL_PROPAGATORS=tracecontext
OTEL_TRACES_SAMPLER=always_onOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
OTEL_PROPAGATORS=tracecontext
OTEL_TRACES_SAMPLER=always_onOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
OTEL_PROPAGATORS=tracecontext
OTEL_TRACES_SAMPLER=always_onOpenTelemetry collector Lambda レイヤーのインストール
collector Lambda レイヤーを使用すると、エクスポーターのレイテンシによる応答時間への影響を抑えながら、Lambda 関数から ClickStack にログ、メトリクス、トレースを転送できます。
collector レイヤーをインストールするには:
- [Layers] セクションで "Add a layer" をクリックします
- ARN を指定するオプションを選択し、アーキテクチャに応じた正しい ARN を選びます。
<region>はお使いのリージョン (例:us-east-2) に置き換えてください:
arn:aws:lambda:<region>:184161586896:layer:opentelemetry-collector-amd64-0_8_0:1arn:aws:lambda:<region>:184161586896:layer:opentelemetry-collector-arm64-0_8_0:1- collector が ClickStack に送信するように設定するため、以下の
collector.yamlファイルをプロジェクトに追加します:
# collector.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 'localhost:4317'
http:
endpoint: 'localhost:4318'
processors:
batch:
decouple:
exporters:
otlphttp:
endpoint: "<YOU_OTEL_COLLECTOR_HTTP_ENDPOINT>"
compression: gzip
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]
metrics:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]
logs:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]# collector.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 'localhost:4317'
http:
endpoint: 'localhost:4318'
processors:
batch:
decouple:
exporters:
otlphttp:
endpoint: "<YOU_OTEL_COLLECTOR_HTTP_ENDPOINT>"
headers:
authorization: <YOUR_INGESTION_API_KEY>
compression: gzip
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]
metrics:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]
logs:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp]- 以下の環境変数を追加します:
OPENTELEMETRY_COLLECTOR_CONFIG_FILE=/var/task/collector.yamlインストールの確認
レイヤーをデプロイすると、Lambda 関数から自動的に収集された
トレースが HyperDX に表示されるようになります。decouple と batching
プロセッサーによりテレメトリー収集に遅延が生じる可能性があるため、トレースの
表示に時間がかかることがあります。カスタムのログやメトリクスを出力するには、言語固有の
OpenTelemetry SDKs を使用してコードをインストルメントする必要があります。
トラブルシューティング
カスタムインストルメンテーションでデータが送信されない
手動で定義したトレースやその他のテレメトリーが表示されない場合は、 互換性のないバージョンのOpenTelemetry APIパッケージを使用している可能性があります。 OpenTelemetry APIパッケージのバージョンが、AWS Lambdaに含まれている バージョン以下であることを確認してください。
SDK のデバッグログを有効にする
OpenTelemetry SDK のデバッグログを有効にするには、OTEL_LOG_LEVEL 環境変数を DEBUG に設定します。これにより、自動インストルメンテーションレイヤーがアプリケーションを正しくインストルメントしているか確認しやすくなります。
collector のデバッグログを有効にする
collector の問題をデバッグするには、collector の
設定ファイルを変更して logging エクスポーター を追加し、テレメトリー の
ログレベルを debug に設定します。これにより、collector の Lambda レイヤー から、より詳細なログを出力できるようになります。
# collector.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 'localhost:4317'
http:
endpoint: 'localhost:4318'
exporters:
logging:
verbosity: detailed
otlphttp:
endpoint: "<YOU_OTEL_COLLECTOR_HTTP_ENDPOINT>"
compression: gzip
service:
telemetry:
logs:
level: "debug"
pipelines:
traces:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]
metrics:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]
logs:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]# collector.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 'localhost:4317'
http:
endpoint: 'localhost:4318'
exporters:
logging:
verbosity: detailed
otlphttp:
endpoint: "<YOU_OTEL_COLLECTOR_HTTP_ENDPOINT>"
headers:
authorization: <YOUR_INGESTION_API_KEY>
compression: gzip
service:
telemetry:
logs:
level: "debug"
pipelines:
traces:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]
metrics:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]
logs:
receivers: [otlp]
processors: [batch, decouple]
exporters: [otlphttp, logging]