Text size
Ausprobiert & getestet7 Min. Lesezeit

OpenTelemetry von Grund auf

Spuren, Kennzahlen und Logs mit einem Standard, und kein Lieferant-Lock-in.

OpenTelemetry from the ground up
KI-generierte Illustration

Jahrelang bedeutete Beobachtbarkeit, einen Anbieter auszuwählen und seinen Agenten überall zu installieren. Dann ihr SDK in deinem Code. Dann ihre Abfrage Sprache in Ihrem Kopf. Der Lieferantwechsel bedeutete, alles neu zu organisieren, also wechselte niemand, und die Preise stiegen.

OpenTelemetry hat das geändert. Es ist jetzt das zweitaktivste CNCF-Projekt nach Kubernetes und die Standardmethode zur Sammlung von Telemetrie. Wenn Sie heute mit der Beobachtbarkeit beginnen, beginnen Sie hier.

Warum OpenTelemetry

OpenTelemetry (oft kurz Hotel) ist eine Reihe offener Standards, SDKs und Tools zur Erstellung und Erhebung von Telemetrie-Daten. Die Schlüsselidee: Einmal ein Instrument, überall hin senden..

Ihr Code und Ihre Infrastruktur produzieren Daten in einem Standardformat. Wo diese Daten hingehen, Prometheus, Grafana, Jaeger, Datadog, Honeycomb, New Relic, Elastic oder was auch immer, ist nur Konfiguration. Das Backend wechseln, die Instrumente behalten.

Die vier Signale

Spuren Sie können eine einzige Anfrage durch Ihr System verfolgen. Eine Spur besteht aus Spannweite, eine pro Operation: die HTTP-Anfrage, die Datenbankabfrage, der Aufruf an einen anderen Dienst. Spuren beantworten "wo ist die Zeit hin?" und "wo ist sie versagt?"

Kennzahlen sind Zahlen im Laufe der Zeit: Anforderungsrate, Fehlerrate, Latenzperzentile, CPU-Nutzung, Warteschlange. Billig zu lagern, perfekt für Dashboards und Warnungen.

Holz sind zeitgestempelte Ereignisse. OpenTelemetry kann Spuren-IDs an Logs anbringen, so dass Sie von einer Logzeile zur vollständigen Spur der Anfrage springen können, die sie erzeugt hat.

Profile Zeigen Sie, welcher Code CPU und Speicher verwendet. Das ist das neueste Signal in der OpenTelemetry, das noch reif wird.

Die Magie geschieht, wenn sie verbunden sind: ein Anstieg der Latenzmetrik, verbunden mit Beispielspuren, verbunden zu den Protokollen der langsamen Anfragen.

Die Metriken sagen, dass etwas nicht stimmt. Spuren sagen, wo. Die Protokolle sagen, warum.

Die Bausteine

  • API und SDK für jede Sprache (Java, Go, Python, JavaScript, .NET, Ruby, PHP, Rust und mehr) zur Erstellung von Telemetrie aus Code.
  • Automatisierte Instrumentation die gemeinsame Bibliotheken (HTTP-Frameworks, Datenbankstreiber, Messaging-Clients) ohne Codeänderungen erfasst.
  • OTLP, das OpenTelemetry-Protokoll, das Standard-Drahtformat für das Senden von Daten.
  • Der Sammler, ein eigenständiger Dienst, der Telemetrie empfängt, verarbeitet und exportiert.
  • Semantische Konventionen: Standardnamen für Attribute wie http.request.method oder db.system, so dass Daten überall gleich aussehen.

Meine ersten Spuren

Der schnellste Weg, OpenTelemetry in Aktion zu sehen, ist die Autorinstrumentierung. Für eine Python-App:

pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install

export OTEL_SERVICE_NAME=shop-api
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
opentelemetry-instrument python app.py

Für Java ist der Agent mit -javaagent:opentelemetry-javaagent.jar- Ich weiß . Für Node.js laden Sie das Auto-Instrumentationspaket beim Starten. Auf Kubernetes wird die OpenTelemetry-Operator kann sogar die automatische Instrumentierung in die Kapseln mit einer einzigen Anmerkung einführen.

Innerhalb weniger Minuten wird jede eingehende Anfrage, jeder ausgehende HTTP-Aufruf und jede Datenbankabfrage zu einem Span.

Dann fügen Sie ein paar hinzu. Handlänge für wichtige Geschäftstätigkeiten:

from opentelemetry import trace

tracer = trace.get_tracer("shop")

def place_order(order):
    with tracer.start_as_current_span("place_order") as span:
        span.set_attribute("order.items", len(order.items))
        # ... business logic

Der Sammler: das Herzstück der Einrichtung

Ich schicke immer Telemetrie an einen Sammler Erstens, anstatt direkt von Apps zu einem Backend. Es löst Apps von Anbietern und ermöglicht es Ihnen, Daten zentral zu verarbeiten.

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  memory_limiter:
    check_interval: 1s
    limit_percentage: 80
  batch:
  attributes:
    actions:
      - key: user.email
        action: delete      # don't ship personal data

exporters:
  otlp/tempo:
    endpoint: tempo:4317
    tls:
      insecure: true
  prometheusremotewrite:
    endpoint: http://prometheus:9090/api/v1/write

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, attributes, batch]
      exporters: [otlp/tempo]
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [prometheusremotewrite]

Ein häufiges Muster auf Kubernetes: ein Sammler als DaemonSet Die Daten werden an jedem Knoten (der von lokalen Pods empfängt und die Daten an den Knoten sammelt) an einen zentralen Schnittstelle Sammler, der die Probenahme, Filterung und den Export erledigt.

Daten überallhin senden

Mit dem Collector in der Mitte ist das Ändern oder Hinzufügen eines Backends eine Konfigurationsänderung. Beliebte Open-Source-Destinationen:

  • - Prometheus . oder Mimir für Metriken
  • Tempo oder Jaeger für Spuren
  • Ich bin Loki. für Baumstämme
  • Grafana Und auf allen

Oder jeder kommerzielle Anbieter, der OTLP akzeptiert, was heute fast alle sind.

Tipps zum Einstieg

  • Ausgestattet service.name Ich habe alles. Ohne sie sind Ihre Daten ein Durcheinander.
  • Verwenden von Ressourcenattributen für Umgebung, Version und Cluster.
  • Beginnen Sie mit der automatischen Instrumentierung, dann manuelle Spannweiten hinzufügen, wo Geschäftslogik zählt.
  • Pass auf die Lautstärke auf.: die Verfolgung jeder Anfrage in einem vollen System ist teuer. Planen Sie frühzeitig die Probenahme.
  • Persönliche Daten nicht vorzubehalten, mit Hilfe von Collector-Prozessoren, um sensible Attribute zu löschen oder zu maskieren.

Also, ist es das wert?

- Das ist klar. Die ganze Industrie geht auf Open-Telemetry zu. Wenn man heute mit ihm arbeitet, muss man nie wieder arbeiten, nur weil man den Anbieter gewechselt hat. Man bekommt Spuren, Kennzahlen und Protokolle, die endlich miteinander sprechen.

Meine Meinung: ein Mal ein Instrument, mit einem offenen Standard, und die Freiheit behalten, über alles andere Ihre Meinung zu ändern.

Desly