View a markdown version of this page

使用 OpenTelemetry 傳送指標 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 OpenTelemetry 傳送指標

您可以使用 OpenTelemetry Protocol (OTLP) 將自訂指標發佈至 CloudWatch。您可以使用 OTel SDKs(Java、Python、Go、.NET、Node.js)、OTel Collector 或任何與 OTLP 相容的用戶端。

CloudWatch OTLP 端點

將指標傳送至您區域中的 CloudWatch OTLP 端點:

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

身分驗證使用 standard AWS SigV4 簽署。服務名稱為 monitoring。如需端點、身分驗證選項和限制的詳細資訊,請參閱 OTLP 端點

快速入門:發佈您的第一個指標

選項 1:OTel 收集器 (建議用於生產)

使用 OTLP HTTP 匯出器和 SigV4 身分驗證設定 OTel 收集器:

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 許可

身分傳送指標需要 cloudwatch:PutMetricData許可。對於 SigV4 身分驗證,請連接下列政策:

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

如需承載字符身分驗證,請參閱 設定指標的承載字符身分驗證

驗證指標是否到達

開啟 CloudWatch 主控台,導覽至 Query Studio,然後執行:

http_requests_total

指標通常會在傳送第一個資料點的 1-2 分鐘內顯示。

支援的指標類型

下表說明 CloudWatch 支援的 OTel 指標類型,以及如何使用 PromQL 查詢它們。

OTel 指標類型 PromQL 行為
計數器 使用 rate()increase() 查詢
量測計 直接查詢 (目前值)
直方圖 histogram_quantile() 用於百分位數

最佳實務

透過 OTLP 傳送指標時,請遵循下列建議:

  • 使用有意義的指標名稱 — 遵循 OTel 命名慣例 (例如 http.server.request.durationhttp_request_duration_seconds)。

  • 保持標籤基數合理 - 避免將請求 IDs或 UUIDs作為標籤值。

  • 設定適當的匯出間隔 — 標準為 60 秒。較短的間隔會增加成本。

  • 使用資源屬性 — 使用靜態中繼資料 (服務名稱、版本、環境) 的資源屬性,而非per-data-point標籤。