Logdateien im Klartext an UptimeEye hochladen

Nicht alles loggt JSON. Für Services mit klassischem Pattern-Layout und für einmalige Uploads nimmt /v1/ingest/text den Rohtext an: Jede Zeile wird ein Eintrag, und die ganze Zeile bleibt die Nachricht. Ein Zeitstempel am Zeilenanfang wird zur Zeit des Events, ein Level-Wort (INFO, WARN, ERROR …) wird zum Feld level, und Zeilen, die nicht mit einem Zeitstempel beginnen – Stacktraces –, kommen zu dem Eintrag, zu dem sie gehören.

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

1.Eine Datei hochladen

Die Felder kommen aus dem Query-String: Jeder Parameter ohne führenden Unterstrich wird zu einem Feld an jedem Eintrag.

shell
curl -sS -X POST "https://logs.uptimeeye.com/v1/ingest/text?service=orders&env=prod&_stream_fields=service,env" \
  -H "Authorization: Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: text/plain" \
  --data-binary @/var/log/orders/application.log
# → {"entries": 1834}

2.Was aus einer Spring-Boot-Datei wird

application.log
2026-09-04 11:55:01,123 ERROR 1 --- [nio-8080-exec-3] c.e.orders.OrderController : Order 4711 failed
java.lang.IllegalStateException: payment declined
	at com.example.orders.OrderService.place(OrderService.java:88)
Caused by: com.example.PaymentException: card_declined
2026-09-04 11:55:02,000  INFO 1 --- [nio-8080-exec-3] c.e.orders.OrderController : retry scheduled
Note: Zwei Einträge: Der erste hat level=error, _time=2026-09-04T11:55:01.123Z und eine vierzeilige Nachricht samt Stacktrace; der zweite ist die INFO-Zeile.

3.Einen Prozess oder ein Journal per Pipe senden

shell
# stdout of a process, one request per 5-second batch
java -jar orders.jar 2>&1 | while chunk=$(timeout 5 cat) || [ -n "$chunk" ]; do
  printf '%s\n' "$chunk" | curl -sS -X POST "https://logs.uptimeeye.com/v1/ingest/text?service=orders&env=prod" \
    -H "Authorization: Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -H "Content-Type: text/plain" --data-binary @-
done

# the last hour of a systemd unit
journalctl -u nginx --since -1h -o short-iso --no-pager | curl -sS -X POST \
  "https://logs.uptimeeye.com/v1/ingest/text?service=nginx&host=$(hostname)" \
  -H "Authorization: Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -H "Content-Type: text/plain" --data-binary @-

4.Optionen

  • _time_source=ingest – Zeitstempel in den Zeilen ignorieren und die Ankunftszeit nehmen.
  • _multiline=off – nie Zeilen zusammenfassen; jede Zeile ist ein eigener Eintrag.
  • _stream_fields=service,env – welche deiner Query-Felder zu Stream-Feldern werden (schnelle Filter).

Felder, die du bekommst

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

  • level, wenn ein Level-Wort gefunden wird
  • die Felder aus deinem Query-String
  • _time aus der Zeile, sonst die Ankunftszeit

Tipps

  • Erkannte Zeitstempel: 2026-09-04T11:42:08.877Z, 2026-09-04 11:42:08,877, 2026-09-04T11:42:08+02:00, [2026-09-04 11:42:08]. Ohne Zone wird die Zeit als UTC gelesen – lass deine JVM oder deinen Logger in UTC loggen oder nimm den Offset ins Pattern auf (%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}).
  • Zeilen wie die von nginx, 10.0.0.1 - - [04/Sep/2026:11:42:08 +0000] "GET /" 200, haben keinen ISO-Zeitstempel am Anfang und bekommen deshalb die Ankunftszeit. Für Uploads von Live-Ausgaben ist das in Ordnung; für ältere Logs nimm lieber einen Agent mit Parser.
  • Für alles, was dauerhaft läuft, nimm einen Agent (Vector, Fluent Bit, Alloy): Er liest mit, bündelt, versucht es bei Fehlern erneut und merkt sich, wo er aufgehört hat.

FAQ

Ist die Größe pro Anfrage begrenzt?

16 MiB pro Anfrage, unkomprimiert. Teil größere Dateien mit split -l 20000 oder komprimier sie mit gzip und sende Content-Encoding: gzip.

Werden meine Logs als Text oder als umgewandeltes JSON abgerechnet?

So, wie sie ankommen – die Bytes des Texts, den du sendest.

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.