OpenTelemetry-Logs (OTLP) an UptimeEye senden

UptimeEye nimmt OTLP/HTTP-Logs unter /v1/ingest/otlp/v1/logs an. Läuft bei dir schon ein OpenTelemetry Collector, ergänzt du einen Exporter; nutzen deine Services ein OTel-SDK, setzt du drei Umgebungsvariablen. Resource-Attribute (service.name, deployment.environment, k8s.*) und die Attribute der Log-Records kommen als Felder an.

Endpunkt: https://logs.uptimeeye.com/v1/ingest/otlp/v1/logs

1.Collector: einen otlphttp-Exporter ergänzen

otel-collector.yaml
receivers:
  otlp:
    protocols:
      http:
      grpc:
  filelog:                       # optional: pick up files as well
    include: [/var/log/myapp/*.log]

exporters:
  otlphttp/uptimeeye:
    logs_endpoint: https://logs.uptimeeye.com/v1/ingest/otlp/v1/logs
    compression: gzip
    headers:
      Authorization: "Bearer ${env:UPTIMEEYE_KEY}"
      # optional: which attributes become stream fields (fast filters)
      VL-Stream-Fields: "service.name,deployment.environment"

processors:
  batch:
    timeout: 2s

service:
  pipelines:
    logs:
      receivers: [otlp, filelog]
      processors: [batch]
      exporters: [otlphttp/uptimeeye]

2.SDKs: direkt per Umgebungsvariablen exportieren

Jedes OpenTelemetry-SDK (und der Java Agent) beachtet diese Variablen; der Service-Name wird zum Feld service.name.

environment
OTEL_SERVICE_NAME=checkout
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=prod,team=payments
OTEL_LOGS_EXPORTER=otlp
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://logs.uptimeeye.com/v1/ingest/otlp/v1/logs
OTEL_EXPORTER_OTLP_LOGS_HEADERS=Authorization=Bearer%20ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Note: Der Header-Wert in OTEL_EXPORTER_OTLP_LOGS_HEADERS ist URL-kodiert, daher %20 für das Leerzeichen. Setz nur den _LOGS_-Endpoint, wenn Traces und Metriken woandershin gehen.

3.Suchen

Filtere auf service.name:=checkout oder severity_text:=ERROR. Der Body des Log-Records ist die Nachricht, Attribute sind Felder.

Felder, die du bekommst

Diese Felder erscheinen im Panel „Felder“ und funktionieren in jedem Filter:

  • service.name
  • deployment.environment und andere Resource-Attribute
  • severity_text / severity_number
  • trace_id, span_id, wenn vorhanden
  • jedes Log-Attribut

Tipps

  • Nimm http/protobuf. gRPC bietet der Ingest-Endpoint nicht an.
  • Stream-Felder aus dem Header VL-Stream-Fields müssen in den Records vorkommen; üblich sind service.name und deployment.environment.
  • Willst du neben service.name ein schlichtes Feld service, ergänz einen transform-Processor mit set(attributes["service"], resource.attributes["service.name"]).

FAQ

Kann ich denselben Endpoint für Traces und Metriken nutzen?

Nein – UptimeEye Logs nimmt nur Logs an. Richte OTEL_EXPORTER_OTLP_LOGS_* auf UptimeEye und lass Traces/Metriken bei ihrem bisherigen Backend.

Wo bekomme ich den Ingest-Key?

In der App unter API-Keys → Neuer API-Key → Typ „Log-Ingest“. Der Key beginnt mit ue_ingest_ und wird nur einmal angezeigt. Management-Keys (ue_live_) lehnt der Ingest-Endpoint ab.

Wie sehe ich, ob Logs ankommen?

Öffne Logs in der App, wähl den Zeitraum „15 Min.“ und such nach service:=<your service>. Neue Zeilen sind nach etwa einer Sekunde durchsuchbar; Live-Tail zeigt sie mit etwa 6 s Verzögerung.