Send OpenTelemetry logs (OTLP) to UptimeEye

UptimeEye accepts OTLP/HTTP logs at /v1/ingest/otlp/v1/logs. If you already run an OpenTelemetry Collector, add one exporter; if your services use an OTel SDK, set three environment variables. Resource attributes (service.name, deployment.environment, k8s.*) and log record attributes arrive as fields.

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

1.Collector: add an otlphttp exporter

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: export directly with environment variables

Every OpenTelemetry SDK (and the Java agent) honours these variables; the service name becomes the service.name field.

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: The header value is URL-encoded in OTEL_EXPORTER_OTLP_LOGS_HEADERS, hence %20 for the space. Set only the _LOGS_ endpoint if traces and metrics go elsewhere.

3.Search

Filter on service.name:=checkout or severity_text:=ERROR. The body of the log record is the message; attributes are fields.

Fields you get

These show up in the fields panel and can be used in every filter:

  • service.name
  • deployment.environment and other resource attributes
  • severity_text / severity_number
  • trace_id, span_id when present
  • every log attribute

Tips

  • Use http/protobuf. gRPC is not exposed on the ingest endpoint.
  • Stream fields via the VL-Stream-Fields header must exist on the records; service.name and deployment.environment are the usual choice.
  • If you want a plain service field next to service.name, add a transform processor with set(attributes["service"], resource.attributes["service.name"]).

FAQ

Can I use the same endpoint for traces and metrics?
No — UptimeEye Logs ingests logs only. Point OTEL_EXPORTER_OTLP_LOGS_* at UptimeEye and keep traces/metrics on their existing backend.
Where do I get the ingest key?
In the app under API Keys → New API Key → type “Log ingest”. The key starts with ue_ingest_ and is shown once. Management keys (ue_live_) are refused by the ingest endpoint.
How do I check that logs arrive?
Open Logs in the app, pick the 15m range and search for service:=<your service>. New lines are searchable within about a second; Live tail shows them with a ~6 s delay.