Benutzerdefinierte Metriken mit Application Signals - Amazon CloudWatch

Benutzerdefinierte Metriken mit Application Signals

Um die Anwendungsleistung und -verfügbarkeit zu überwachen, erfasst Application Signals Standardmetriken (Störungen, Fehler und Latenz) und Laufzeitmetriken von erkannten Anwendungen, nachdem Sie es aktiviert haben.

Benutzerdefinierte Metriken ergänzen Ihre Anwendungsüberwachung um wertvollen Kontext und helfen dabei, die Fehlerbehebung zu beschleunigen. Dabei haben sie folgende Einsatzzwecke:

  • Die Analyse von Telemetriedaten individuell anpassen

  • Die Hauptursachen von Problemen ermitteln

  • Schnell präzise geschäftliche und betriebliche Entscheidungen treffen

Mit Application Signals zeigen Sie benutzerdefinierte Metriken an, die von einem Service generiert wurden und mit Standard- und Laufzeitmetriken korrelieren. Eine Anwendung könnte beispielsweise Metriken zur Anforderungsgröße und zur Cache-Fehleranzahl ausgeben. Diese benutzerdefinierten Metriken bieten detailliertere Einblicke in Leistungsprobleme und helfen Ihnen dabei, Verfügbarkeitseinbrüche und Latenzspitzen schneller zu diagnostizieren und zu beheben.

Konfiguration benutzerdefinierter Metriken für Application Signals

Sie können mithilfe von zwei Methoden benutzerdefinierte Metriken aus Ihrer Anwendung generieren: OpenTelemetry-Metriken und Span-Metriken.

OpenTelemetry-Metriken

Um benutzerdefinierte OpenTelemetry-Metriken mit Application Signals zu verwenden, müssen Sie entweder den CloudWatch-Agenten oder OpenTelemetry Collector verwenden. Mit benutzerdefinierten OpenTelemetry-Metriken können Sie mithilfe des OpenTelemetry Metrics SDK Metriken direkt aus Ihrem Anwendungscode erstellen und exportieren.

  1. Integrierter Service für Application Signals.

  2. Konfigurieren Sie den Agenten oder Kollektor.

    • Wenn Sie den CloudWatch-Agenten verwenden, müssen Sie metrics_collected mit einem otlp konfigurieren. Beispiel: 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" } } } }
    • Wenn Sie OpenTelemetry Collector nutzen, konfigurieren Sie eine Metrik-Pipeline. Sie müssen CloudWatch EMF Exporter for OpenTelemetry Collector verwenden und Ressourcenattribute für die Bezeichnungen der Metriken aktivieren. Es wird empfohlen, dimension_rollup_option: NoDimensionRollup so zu konfigurieren, dass nicht viele Metrikaggregationen ausgegeben werden. Zum Beispiel 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. Konfigurieren Sie die Umgebung. Wenn mehrere Services mit demselben Servicenamen vorhanden sind und Application-Signals-Metriken genau mit dem richtigen Servicenamen korreliert werden sollen, wird die Konfiguration des Ressourcenattributs deployment.environment.name empfohlen. Die Konfiguration dieses Ressourcenattributs erfolgt üblicherweise mithilfe von Umgebungsvariablen.

    OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,deployment.environment.name=$YOUR_ENV_NAME"
  4. Konfigurieren Sie den Metrikexport im CloudWatch-Agenten oder OpenTelemetry Collector. Sie können eine der folgenden Ansätze verwenden:

    • (Empfohlen) Benutzerdefinierte Exportpipeline – Erstellen Sie im Anwendungscode einen dedizierten MeterProvider, der zum konfigurierten Agenten- oder Collector-Endpunkt exportiert. Zum Beispiel:

      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");
    • Agentenbasierter Export – Konfigurieren Sie die Agentenumgebungsvariablen OTEL_METRICS_EXPORTER und OTEL_EXPORTER_OTLP_METRICS_ENDPOINT. Zum Beispiel:

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

      Verlassen Sie sich im Anwendungscode auf globalen MeterProvider, der vom Anwendungscode erstellt wurde. Zum Beispiel:

      Meter meter = GlobalOpenTelemetry.getMeter("myMeter");
  5. Fügen Sie mithilfe des OTEL Metrics SDK im Anwendungscode OTEL Metrics hinzu. So ergänzen Sie beispielsweise die OTEL-Metriken in Python:

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

    Das Ergänzen des Operationsattributs ist nicht erforderlich, kann aber nützlich sein, um die Operationen des Application-Signals-Service mit benutzerdefinierten OpenTelemetry-Metriken zu korrelieren.

Span-Metriken

Benutzerdefinierte Span-Metriken funktionieren aktuell nur mit der Transaktionssuche. Benutzerdefinierte Span-Metriken ermöglichen Ihnen Folgendes:

  • Metriken mithilfe von Metrikfiltern zu erstellen

  • Span-Attribute zu verarbeiten, die im Anwendungscode eingefügt wurden

  • Das OpenTelemetry Traces SDK für die Implementierung zu verwenden

  1. Aktivieren Sie die Überwachung von Application Signals mit der Transaktionssuche. Weitere Informationen finden Sie unter Transaktionssuche.

    Um für eine 100-prozentige Metrik-Stichprobenziehung zu sorgen, wird empfohlen, 100 % der Spans an den Endpunkt zu senden.

  2. Ergänzen Sie mithilfe des OTEL Traces SDK Span-Attribute. Es gibt dafür zwei Möglichkeiten:

    • [Empfohlen] Fügen Sie Attribute zu automatisch generierten Spans hinzu. Zum Beispiel:

      Span.current().setAttribute("myattribute", value);
    • Fügen Sie manuell generierten Spanns Attribute hinzu. Zum Beispiel:

      Span span = tracer.spanBuilder("myspan").startSpan(); try (Scope scope = span.makeCurrent()) { span.setAttribute("myattribute", value); }
  3. Erstellen Sie einen Metrikfilter mit folgenden Werten. Weitere Informationen zum Erstellen eines Metrikfilters finden Sie unter Erstellen eines Metrikfilters für eine Protokollgruppe.

    • Protokollgruppe – aws/spans

    • Filtermuster – { $.attributes.['myattribute'] = * }

    • Metrikname – myattribute (Die Werte müssen exakt übereinstimmen, sonst funktioniert die Span-Korrelation nicht

    • Metrikwert – $.attributes.['myattribute']

    • Dimensionen – Feldname: Service, Feldwert: $.attributes.['aws.local.service'], Feldname: Umgebung, Feldwert: $.attributes.['aws.local.environment'] und Feldname: Operation, Feldwert: $.attributes.['aws.local.operation']

      Anmerkung

      Wenn Sie manuell generierten Spans Attribute hinzufügen, können Sie Operation nicht festlegen, da aws.local.operation in den Span-Daten nicht enthalten ist.

Anzeigen benutzerdefinierter Metriken in Application Signals

Sie können jetzt benutzerdefinierte Metriken für Services und Operationen in der Konsole von Application Signals anzeigen:

  • Wählen Sie einen Service aus der Liste der Services aus, um die neue Registerkarte „Zugehörige Metriken zu öffnen

  • Sehen Sie sich Standardmetriken, Laufzeitmetriken und verwandte Metriken für den ausgewählten Service an

  • Filtern Sie mehrere Metriken und wählen Sie diese aus der Liste aus

  • Ausgewählte Metriken grafisch darstellen, um Korrelationen und Ursachen von Problemen zu ermitteln

Weitere Informationen zu zugehörigen Metriken finden Sie unter Zugehörige Metriken anzeigen.

Häufig gestellte Fragen (FAQ)

Welche Auswirkungen hat es, wenn die Umgebungskonfiguration für benutzerdefinierte Metriken nicht hinzugefügt wird?

Application Signals konfiguriert das deployment.environment.name-Ressourcenattribut so, dass Anwendungen eindeutig identifiziert werden. Application Signals kann benutzerdefinierte Metriken, die von zwei verschiedenen Services mit demselben Namen generiert wurden, nicht eindeutig mit dem richtigen Service korrelieren.

Informationen zum Ergänzen einer Umgebungskonfiguration für Ihre Anwendung finden Sie unter OpenTelemetry-Metriken.

Gibt es Einschränkungen für Metrikfilter?

Sie können nur bis zu 100 Metrikfilter pro CloudWatch-Logs-Protokollgruppe erstellen. Jede definierte Metrik kann bis zu 3 Dimensionen haben. Sie können die Grenzwerte für Metrikfilter hier OpenTelemetry-Metriken ansehen.

Weshalb werden in der Metriktabelle keine Metrikdiagramme angezeigt?

Die Lösung hängt vom Metriktyp ab: