使用 Application Signals 自訂指標 - Amazon CloudWatch

使用 Application Signals 自訂指標

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

自訂指標可為應用程式監控新增重要內容,協助加速疑難排解。您可以使用它們來:

  • 自訂遙測資料的分析

  • 識別問題發生的根本原因

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

藉助 Application Signals,您可以檢視來自服務的自訂指標,並將其與標準指標和執行時期指標建立關聯。例如,應用程式可能發出請求大小和快取遺漏計數指標。這些自訂指標可協助更細緻地了解效能問題,更快地診斷並解決可用性下降與延遲飆升的問題。

設定 Application Signals 的自訂指標

可以透過兩種方法從應用程式產生自訂指標:OpenTelemetry 指標範圍指標

OpenTelemetry 指標

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

  1. 加入服務至 Application Signals。

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

    • 使用 CloudWatch 代理程式時,必須使用 otlp 設定 metrics_collected。例如 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 指標。

範圍指標

自訂範圍指標目前僅適用於 Transaction Search。使用自訂範圍指標,您可以:

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

  • 處理在應用程式程式碼中新增的範圍屬性

  • 使用 OpenTelemetry 追蹤 SDK 進行實作

  1. 使用 Transaction Search 啟用 Application Signals 監控。如需詳細資訊,請參閱 Transaction Search

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

  2. 使用 OTEL 追蹤 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 (The values must be an exact match or span correlation will not work

    • 指標值 – $.attributes.['myattribute']

    • 維度 – Field Name: Service, Field Value: $.attributes.['aws.local.service'], Field Name: Environment, Field Value: $.attributes.['aws.local.environment'], and Field Name: Operation, Field Value: $.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 指標

為何指標圖表未顯示於指標資料表中?

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