Quick start
Three steps, no agent required. Everything else builds on this.
1. Create an ingest key
In the app open API Keys → New API Key, choose the type “Log ingest” and copy the key. It starts with ue_ingest_ and is shown once.
2. Send a line
shell
curl -sS -X POST "https://logs.uptimeeye.com/v1/ingest/jsonline?_stream_fields=service,env" \
-H "Authorization: Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/x-ndjson" \
--data-binary @- <<'JSON'
{"_msg":"hello from the docs","service":"demo","env":"prod","level":"info","user_id":"u_42"}
JSON3. Search
Open Logs, type service:=demo and press Enter. Open the line, click the filter icon next to user_id — that is the whole workflow.
Plain-text logs? Send the file as text instead — see Log files / plain text.
Guides
GuideSearching logsQuery syntax, the fields panel that writes into the query, time ranges, context around a line, live tail, download and sharing.GuideIngesting logsKeys, endpoints, fields and stream fields, timestamps, options, limits and response codes — the reference behind every integration.
Integrations
Step-by-step guides with copy-paste configuration. Pick the one closest to how you run your services.
Platforms
KubernetesCollect stdout/stderr of every pod with a Vector DaemonSet and send it to UptimeEye Logs with namespace, container and node attached.DockerSend the logs of all containers on a Docker host to UptimeEye Logs: one Vector container on the Docker socket, or the Loki logging driver per container..
Agents
Fluent BitTail log files or container output with Fluent Bit and send JSON lines to UptimeEye Logs using the http output — on hosts, VMs and Kubernetes..VectorUse Vector to collect files, journald, Docker or Kubernetes logs, reshape them with VRL and send them to UptimeEye Logs with disk buffering..Grafana Alloy / PromtailAlready running Promtail or Grafana Alloy? Add a second Loki push target and your logs land in UptimeEye Logs with labels as stream fields..
Protocols
OpenTelemetryPoint an OpenTelemetry Collector or any OTel SDK at UptimeEye Logs over OTLP/HTTP.HTTP API / curlThe UptimeEye Logs ingest API: send JSON lines with curl or your own code, choose stream fields, compress with gzip and read the response codes..Log files / plain textSend plain-text logs — Spring, log4j, nginx, syslog, any pattern layout — to UptimeEye Logs without an agent.
Languages
Spring Boot / JavaFour ways to get Spring Boot and Logback logs into UptimeEye Logs: OpenTelemetry Java agent, Spring Boot structured logging, Logback JSON files with an agent, or plain-text upload..Node.jsShip Node.js logs to UptimeEye Logs: JSON to stdout with pino for containers, a dependency-free HTTP batcher, or the OpenTelemetry logs SDK..PythonSend Python logs to UptimeEye Logs: a logging.Handler that batches JSON lines over HTTP, structlog/JSON to stdout for containers, or the OpenTelemetry logging handler..GoShip Go logs to UptimeEye Logs: slog or zap JSON to stdout for containers, or a batching io.Writer that posts JSON lines directly...NETShip ASP.NET Core and .NET logs to UptimeEye Logs with Serilog's OpenTelemetry sink, the OpenTelemetry .NET SDK, or JSON console output for containers..
Key concepts
- No schema. Every JSON key you send is a field.
_msgis the message,_timethe event time; nested objects become dotted names. - Stream fields (
_stream_fields=service,env) are the labels of a log stream — the fastest filters and the backbone of the fields panel. Pick a few low-cardinality fields. - One query. Clicking a value in the fields panel or a row's detail writes
field:=valueinto the query; two values of the same field becomefield:in(a, b)(OR), different fields narrow each other (AND). - Quota and retention are per plan; the Logs page shows both. Over quota, the ingest endpoint answers
429withRetry-After— nothing is silently dropped. - Live tail follows event time with a ~6 s delay; backfilled lines show up in search, not in the tail.
FAQ
- What is UptimeEye Logs?
- Centralized log search that lives next to your uptime monitors. You ship logs over HTTP (JSON lines, Elasticsearch bulk, OpenTelemetry, Loki push or plain text), UptimeEye stores them per organization and you search them with words, field filters and a time range — from any alert straight to the cause.
- Which formats and agents are supported?
- Anything that speaks JSON lines, the Elasticsearch bulk API, OTLP/HTTP, the Loki push API or plain text: Vector, Fluent Bit, Filebeat, the OpenTelemetry Collector and SDKs, Promtail, Grafana Alloy, the Docker Loki driver, curl and your own code.
- Do I have to change my application?
- Usually not. Agents pick up stdout or files; if your app logs JSON, every key becomes a searchable field automatically. Plain-text logs are accepted as well.
- Where are logs stored and for how long?
- On UptimeEye's own infrastructure in Germany (Hetzner, Falkenstein), isolated per organization, with no third-party service touching the content. Retention is 3 days on Free, 7 on Pro and 15 on Agentur; the monthly volume is 1, 10 or 50 GB. Deleting your organization deletes its log tenant.
- How fast are logs searchable?
- Within about a second after ingest. Live tail follows new lines with a delay of roughly six seconds so batching agents can deliver in order.