View a markdown version of this page

OpenTelemetry を使用してメトリクスを送信する - Amazon CloudWatch

OpenTelemetry を使用してメトリクスを送信する

OpenTelemetry Protocol (OTLP) を使用して、カスタムメトリクスを CloudWatch に発行できます。OTel SDK (Java、Python、Go、.NET、Node.js)、OTel Collector、または OTLP 互換クライアントを使用できます。

CloudWatch OTLP エンドポイント

リージョンの CloudWatch OTLP エンドポイントにメトリクスを送信します。

https://monitoring.region.amazonaws.com/v1/metrics

認証には、標準の AWS SigV4 署名が使用されます。サービス名は monitoring です。エンドポイント、認証オプション、および制限事項の詳細については、「OTLP エンドポイント」を参照してください。

クイックスタート: 最初のメトリクスを発行する

オプション 1: OTel Collector (本番環境での使用を推奨)

OTLP HTTP エクスポーターと SigV4 認証を使用して OTel Collector を設定します。

receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false metrics_endpoint: "https://monitoring.us-east-1.amazonaws.com/v1/metrics" auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "us-east-1" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]

詳細なセットアップ手順については、「開始方法」を参照してください。

オプション 2: OTel SDK (Python の例)

from opentelemetry import metrics from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter # Point at the CloudWatch OTLP endpoint exporter = OTLPMetricExporter( endpoint="https://monitoring.us-east-1.amazonaws.com:443/v1/metrics" ) reader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000) provider = MeterProvider(metric_readers=[reader]) metrics.set_meter_provider(provider) # Create and record a metric meter = metrics.get_meter("my-app") counter = meter.create_counter("http_requests_total", description="Total HTTP requests") counter.add(1, {"method": "GET", "path": "/api/users", "status": "200"})

オプション 3: OTel SDK (Java の例)

import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.LongCounter; Meter meter = GlobalOpenTelemetry.getMeter("my-app"); LongCounter counter = meter.counterBuilder("http_requests_total") .setDescription("Total HTTP requests") .build(); counter.add(1, Attributes.of( AttributeKey.stringKey("method"), "GET", AttributeKey.stringKey("path"), "/api/users", AttributeKey.stringKey("status"), "200" ));

必要な IAM アクセス許可

メトリクスを送信する ID には cloudwatch:PutMetricData アクセス許可が必要です。SigV4 認証の場合は、次のポリシーをアタッチします。

{ "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" }

ベアラートークン認証については、「メトリクスのベアラートークン認証の設定」を参照してください。

メトリクスが到着していることを確認する

CloudWatch コンソールを開き、[Query Studio] に移動して、以下を実行します。

http_requests_total

メトリクスは通常、最初のデータポイントが送信されてから 1~2 分以内に表示されます。

サポートされているメトリクスタイプ

次の表は、CloudWatch がサポートする OTel メトリクスタイプと、それらに対して PromQL でクエリを実行する方法を示しています。

OTel メトリクスタイプ PromQL の動作
Counter rate() または increase() を使用してクエリを実行する
ゲージ 直接クエリを実行する (現在の値)
ヒストグラム パーセンタイルに histogram_quantile() を使用する

ベストプラクティス

OTLP 経由でメトリクスを送信するときは、以下の推奨事項に従ってください。

  • 意味のあるメトリクス名を使用する – OTel 命名規則 (例: http.server.request.durationhttp_request_duration_seconds) に従います。

  • ラベルのカーディナリティを適切に保つ – リクエスト ID または UUID をラベル値として使用することは避けてください。

  • 適切なエクスポート間隔を設定する – 60 秒が標準設定です。間隔を短くするほどコストが増加します。

  • リソース属性を使用する – データポイントごとのラベルではなく、リソース属性を使用して静的メタデータ (サービス名、バージョン、環境) を指定します。