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.durationやhttp_request_duration_seconds) に従います。 -
ラベルのカーディナリティを適切に保つ – リクエスト ID または UUID をラベル値として使用することは避けてください。
-
適切なエクスポート間隔を設定する – 60 秒が標準設定です。間隔を短くするほどコストが増加します。
-
リソース属性を使用する – データポイントごとのラベルではなく、リソース属性を使用して静的メタデータ (サービス名、バージョン、環境) を指定します。