使用 Application Signals 自訂指標 - Amazon CloudWatch

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

使用 Application Signals 自訂指標

為了監控應用程式效能和可用性,Application Signals 會在您啟用應用程式之後,從探索的應用程式收集標準指標 (故障、錯誤和延遲) 和執行時間指標。

自訂指標為您的應用程式監控新增寶貴的內容,並協助加速故障診斷。您可以使用它們來:

  • 自訂遙測資料的分析

  • 識別問題的根本原因

  • 快速做出精確的業務和營運決策

Application Signals 可讓您檢視從服務產生的自訂指標,並將其與標準指標和執行時間指標建立關聯。例如,應用程式可能會發出請求大小和快取遺漏計數的指標。這些自訂指標可更深入了解效能問題,協助您診斷和解決可用性下降和延遲遽增的速度。

設定 Application Signals 的自訂指標

您可以使用兩種方法來從應用程式產生自訂指標:OpenTelemetry 指標跨度指標

OpenTelemetry 指標

若要搭配 Application Signals 使用自訂 OpenTelemetry 指標,您必須使用 CloudWatch Agent 或 OpenTelemetry Collector。自訂 OpenTelemetry 指標可讓您使用 OpenTelemetry 指標 SDK,直接從應用程式程式碼建立和匯出指標。

  1. 加入服務至 Application Signals。

  2. 設定代理程式或收集器。

    • 使用 CloudWatch 代理程式時,您必須metrics_collected使用 設定 otlp。例如 cloudwatch-config.json

      { "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {}, "otlp": { "grpc_endpoint": "0.0.0.0:4317", "http_endpoint": "0.0.0.0:4318" } } } }
    • 使用 OpenTelemetry Collector 時,請設定指標管道。您必須使用適用於 OpenTelemetry Collector 的 CloudWatch EMF Exporter,並啟用指標標籤的資源屬性。建議設定 dimension_rollup_option: NoDimensionRollup以避免發出許多指標彙總。例如,config.yaml

      receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: awsemf: region: $REGION namespace: $NAMESPACE log_group_name:$LOG_GROUP_NAME resource_to_telemetry_conversion: enabled: true dimension_rollup_option: "NoDimensionRollup" otlphttp/traces: compression: gzip traces_endpoint: https://xray.$REGION.amazonaws.com/v1/traces auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "$REGION" service: "logs" sigv4auth/traces: region: "$REGION" service: "xray" processors: batch: service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [awsemf] traces: receivers: [otlp] processors: [batch] exporters: [otlphttp/traces]
  3. 設定環境。當有多個服務具有相同的服務名稱,並且要準確將 Application Signals 指標與正確的服務名稱關聯時,建議設定資源屬性 deployment.environment.name。通常透過環境變數設定此資源屬性。

    OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,deployment.environment.name=$YOUR_ENV_NAME"
  4. 設定指標匯出至 CloudWatch 代理程式或 OpenTelemetry Collector。您可以使用下列其中一種方法:

    • (建議) 自訂匯出管道 – 在應用程式程式碼中,建立專用 MeterProvider 匯出至設定的代理程式或收集器端點。例如:

      Resource resource = Resource.getDefault().toBuilder() .put(AttributeKey.stringKey("service.name"), serviceName) .put(AttributeKey.stringKey("deployment.environment.name"), environment) .build(); MetricExporter metricExporter = OtlpHttpMetricExporter.builder() .setEndpoint("http://localhost:4318/v1/metrics") .build(); MetricReader metricReader = PeriodicMetricReader.builder(metricExporter) .setInterval(Duration.ofSeconds(10)) .build() SdkMeterProvider meterProvider = SdkMeterProvider.builder() .setResource(resource) .registerMetricReader() .build(); Meter meter = meterProvider.get("myMeter");
    • 代理程式型匯出 – 設定代理程式環境變數 OTEL_METRICS_EXPORTEROTEL_EXPORTER_OTLP_METRICS_ENDPOINT。例如:

      OTEL_METRICS_EXPORTER=otlp OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318/v1/metrics

      在應用程式程式碼中,依賴 代理程式建立的全域 MeterProvider。例如:

      Meter meter = GlobalOpenTelemetry.getMeter("myMeter");
  5. 使用應用程式程式碼中的 OTEL 指標 SDK,新增 OTEL 指標。例如,若要在 Python 中新增 OTEL 指標:

    counter = meter.counterBuilder("myCounter").build(); counter.add(value); counter.add(value, Attributes.of(AttributeKey.stringKey("Operation"), "myOperation"));

    新增操作屬性並非必要項目,但有助於將 Application Signals 服務操作與自訂 OpenTelemetry 指標建立關聯。

跨度指標

自訂跨度指標目前僅適用於交易搜尋。使用自訂跨度指標,您可以:

  • 使用指標篩選條件建立指標

  • 在應用程式程式碼中新增的程序跨度屬性

  • 使用 OpenTelemetry Traces SDK 實作

  1. 使用交易搜尋啟用 Application Signals 監控。如需詳細資訊,請參閱交易搜尋

    為了確保 100% 指標取樣,建議將 100% 的跨度傳送至端點。

  2. 使用 OTEL Traces SDK 新增跨度屬性。有兩種方式:

    • 【建議】 新增屬性至自動產生的範圍。例如:

      Span.current().setAttribute("myattribute", value);
    • 將屬性新增至手動產生的跨度。例如:

      Span span = tracer.spanBuilder("myspan").startSpan(); try (Scope scope = span.makeCurrent()) { span.setAttribute("myattribute", value); }
  3. 使用下列值建立指標篩選條件。如需如何建立指標篩選條件的資訊,請參閱建立日誌群組的指標篩選條件

    • 日誌群組 – aws/spans

    • 篩選條件模式 – { $.attributes.【'myattribute'】 = * }

    • 指標名稱 – myattribute (值必須完全相符,否則跨度相互關聯將無法運作

    • 指標值 – $.attributes.【'myattribute'】

    • 維度 – 欄位名稱:服務、欄位值:$.attributes.【'aws.local.service'】、欄位名稱:環境、欄位值:$.attributes.【'aws.local.environment'】 和欄位名稱:操作、欄位值:$.attributes.【'aws.local.operation'】

      注意

      當您將屬性新增至手動產生的範圍時,您無法設定 ,Operation因為 aws.local.operation不會出現在範圍資料中。

在 Application Signals 中檢視自訂指標

您現在可以在 Application Signals 主控台中檢視服務和操作的自訂指標:

  • 從服務清單中選擇服務,以查看新的相關指標索引標籤

  • 檢視所選服務的標準指標、執行時間指標和相關指標

  • 從清單中篩選和選取多個指標

  • 繪製選取的指標,以識別問題的相關性和根本原因

如需相關指標的詳細資訊,請參閱 檢視相關指標

常見問答集 (FAQ)

不為自訂指標的環境新增組態有何影響?

Application Signals 會設定deployment.environment.name資源屬性來消除應用程式模糊。Application Signals 無法將兩個不同服務產生的自訂指標與具有相同名稱的正確服務建立關聯,而不會造成歧義。

若要將環境組態新增至應用程式,請參閱 OpenTelemetry 指標

指標篩選條件是否有任何限制?

每個 CloudWatch Logs 日誌群組最多只能建立 100 個指標篩選條件。每個定義的指標最多可有 3 個維度。您可以在此檢視指標篩選條件的限制OpenTelemetry 指標

為什麼指標圖表不會顯示在指標資料表中?

解決方案取決於您的指標類型: