

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Konfigurieren Sie die Sichtbarkeit von HTTP-Endpunkten
<a name="Application-Signals-EndpointVisibility"></a>

Diese Seite bietet Anleitungen für Application Signals-Kunden, die erwarten, dass ihre HTTP-Dienstvorgänge durch bestimmte Endpunktnamen getrennt werden, stattdessen aber mehrere Endpunkte in derselben Metrik gruppiert werden. Standardmäßig kürzt Application Signals die `Operation` Metrikdimension auf das erste URL-Pfadsegment für HTTP-Dienste (z. B. `/api/v1/users` wird`GET /api`), um Metriken mit niedriger Kardinalität beizubehalten. Infolgedessen stellen Benutzer möglicherweise fest, dass Dienste mit mehreren Endpunkten, die dasselbe Präfix verwenden, nur begrenzten Einblick in den Betriebszustand einzelner Endpunkte haben. Sie können die folgenden Schritte ausführen, um die Endpunkte für den Servicebetrieb mit der gewünschten Granularität zu konfigurieren.

**Wichtig**  
Die Änderung der Endpunktsichtbarkeit ist eine bahnbrechende Änderung, da sie sich auf die metrischen Dimensionen von Application Signals für den Servicebetrieb auswirkt. Denken Sie daran, Ihre SLO-Schwellenwerte, Alarme und and/or Dashboards entsprechend zu aktualisieren.

## AWS Distribution für die (ADOT- OpenTelemetry ) Lösung
<a name="Application-Signals-EndpointVisibility-ADOT"></a>

Für Kunden, die AWS Distro for OpenTelemetry (ADOT) verwenden, legen Sie die `OTEL_AWS_HTTP_OPERATION_PATHS` Umgebungsvariable mit einer kommagetrennten Liste von URL-Pfadvorlagen für den HTTP-Dienst fest:

```
export OTEL_AWS_HTTP_OPERATION_PATHS="/path/to/endpoint, /another/{placeholder}/endpoint"
```

Diese Variable verwendet das Präfix, das am längsten mit dem `url.path` Attribut des HTTP-Servers übereinstimmt, um den Operationsnamen zu bestimmen. Platzhaltermuster entsprechen einem beliebigen URL-Segment und können mit`{placeholder}`, `:placeholder` oder gekennzeichnet werden. `*` Nachdem Sie die Variable festgelegt haben, starten Sie Ihre Anwendung neu, damit die neuen Endpunktgruppierungen wirksam werden.

Diese Variable wird in ADOT für Java Node.js, Python und.NET unterstützt.

**Beispiel**

Stellen Sie sich einen API-Dienst vor, der den folgenden Datenverkehr empfängt:

```
GET  /api/users
GET  /api/users/42
GET  /api/users/42/orders
POST /api/users/99/orders
POST /api/users/42/orders
GET  /api/users/42/orders/7/items
GET  /api/products
```

Standardmäßig gruppiert Application Signals all diese Daten in `GET /api` oder `POST /api` Servicemetriken, sodass es unmöglich ist, die Leistung zwischen den Endpunkten zu unterscheiden.

Um dieses Problem zu beheben, legen Sie die Umgebungsvariable mit den gewünschten Pfadvorlagen fest:

```
export OTEL_AWS_HTTP_OPERATION_PATHS="/api/users/{userId}/orders/{orderId}/items, /api/users/{userId}/orders, /api/users/{userId}, /api/users, /api/products"
```

Bei dieser Konfiguration zeigt Application Signals unterschiedliche Operationen. Mehrere Anfragen können zu derselben konfigurierten Vorlage führen:


**Beispiel für Ergebnisse der Konfiguration der Endpunktsichtbarkeit**  

| Eingehende Anfragen | Standardvorgang | Mit Konfiguration | 
| --- | --- | --- | 
| GET /api/users | GET /api | GET /api/users | 
| GET /api/users/42 | GET /api | GET /api/users/{userId} | 
| GET /api/users/42/orders | GET /api | GET /api/users/{userId}/orders | 
| POST /api/users/99/orders | POST /api | POST /api/users/{userId}/orders | 
| POST /api/users/42/orders | POST /api | POST /api/users/{userId}/orders | 
| GET /api/users/42/orders/7/items | GET /api | GET /api/users/{userId}/orders/{orderId}/items | 
| GET /api/products | GET /api | GET /api/products | 

## Native OpenTelemetry Lösung
<a name="Application-Signals-EndpointVisibility-NativeOTel"></a>

Wenn Sie das native OpenTelemetry SDK (ohne ADOT) verwenden, können Sie den Span-Namen entweder mithilfe des Transformationsprozessors in Ihrem OpenTelemetry Collector oder direkt im Anwendungscode überschreiben.

**Anmerkung**  
Sie müssen Ihren Collector mit einem OTLP-Exporter konfigurieren, um den OpenTelemetry Span-Namen beizubehalten, sodass er nach dem Operationsnamen von Application Signals analysiert werden CloudWatch kann. Weitere Informationen finden Sie unter [OTLP-Daten senden an](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPSimplesetup.html). CloudWatch

**Option 1 (empfohlen): Transformation Collector-side **

Verwenden Sie den [Transformationsprozessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor), um Span-Namen auf der Grundlage von URL-Mustern festzulegen. Der Transformationsprozessor verwendet OTTL (OpenTelemetry Transformation Language) und kann das `name` Span-Feld direkt ändern.

Ordnen Sie die Regeln von den flachsten bis zu den tiefsten an — Anweisungen werden sequentiell ausgeführt, sodass spezifischere Treffer an späterer Stelle in der Liste die allgemeinen Treffer überschreiben, die zuvor festgelegt wurden. Im folgenden Beispiel `url.path` wird der Wert des span-Attributs abgeglichen und der resultierende Span-Name wird auf die Anforderungsmethode gefolgt vom gewünschten URL-Muster gesetzt.

```
processors:
  transform/operation_names:
    trace_statements:
      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests(/|$)")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests"], " "))

      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests/[^/]+$")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}"], " "))

      - context: span
        conditions:
          - IsMatch(attributes["url.path"], "^/api/contests/[^/]+/leaderboard(/|$)")
        statements:
          - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}/leaderboard"], " "))

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [resourcedetection, transform/operation_names, batch]
      exporters: [otlphttp/xray]
```

**Option 2: Den Span-Namen im Anwendungscode festlegen**

Sie können den Span-Namen für Server-Spans in Ihrem Anwendungscode mithilfe der OpenTelemetry API manuell festlegen. Legen Sie den Namen so fest, `{HTTP_METHOD} {route_template}` dass die Routenvorlage parametrisierte Platzhalter verwendet. Beachten Sie, dass dies eine fest codierte Fallback-Option ist und Sie den Span-Namen in jedem HTTP-Request-Handler manuell aktualisieren müssen, um diese Änderung zu übernehmen.

**Java**

```
import io.opentelemetry.api.trace.Span;

// Inside your request handler
Span.current().updateName("GET /api/contests/{id}/leaderboard");
```

**Python**

```
from opentelemetry import trace

# Inside your request handler
span = trace.get_current_span()
span.update_name("GET /api/contests/{id}/leaderboard")
```

**Go**

```
import "go.opentelemetry.io/otel/trace"

// Inside your request handler
span := trace.SpanFromContext(ctx)
span.SetName("GET /api/contests/{id}/leaderboard")
```

**Node.js**

```
import { trace } from '@opentelemetry/api';

// Inside your request handler
const span = trace.getActiveSpan();
if (span) {
  span.updateName('GET /api/contests/{id}/leaderboard');
}
```