Die Logs-Seite
Von oben nach unten:
- Abfrage-Editor – tippe LogsQL und drück Enter, um zu suchen (Shift+Enter für eine neue Zeile). Solange er leer ist, siehst du die Beispiele unter „Schnellstart“; das
?öffnet die Suchsyntax. - Zeitraum – die Voreinstellungen 15 Min. / 1 Std. / 24 Std. / 7 Tage und ein eigener Zeitraum auf die Sekunde genau.
- Histogramm – das Volumen im gewählten Zeitraum. Die Statuszeile darunter zeigt die Zahl der geladenen Zeilen, die Aufbewahrungsdauer deines Plans und das in diesem Monat verbrauchte Volumen.
- Felder (links) – oben deine aktiven Filter, darunter die Stream-Felder und alle weiteren Felder des aktuellen Ergebnisses, mit Werten und Anzahl. Klick auf einen Wert, um danach zu filtern, und noch einmal (oder auf das × in der Liste der aktiven Filter), um den Filter wieder zu entfernen.
- Ergebnisliste – neueste zuerst, virtualisiert, lädt beim Scrollen nach. Klick auf eine Zeile für die Detailansicht.
- Werkzeugleiste – Download, Anzeige (Spalten, Gruppieren nach, Zeilen pro Seite) und Live-Tail.
Wörter und Phrasen
Tipp ein Wort, und du bekommst jede Zeile, die es enthält, in der Nachricht oder in einem beliebigen Feld. Wörter passen unabhängig von Groß- und Kleinschreibung und nur als ganze Wörter.
timeoutJede Zeile mit dem Wort timeout.timeout paymentsBeide Wörter, irgendwo in der Zeile (ein implizites AND)."upstream timeout"Genau diese Phrase, in dieser Reihenfolge.err*Präfix-Treffer: error, errno, errors …*Alles im Zeitraum.
Feldfilter
Jeder JSON-Key, den du sendest, wird zu einem Feld. Darauf filterst du mit field:value. Achte auf den Doppelpunkt – service=api ist kein LogsQL; das Suchfeld schlägt die korrigierte Form vor.
level:errorDas Feld level enthält das Wort error.service:=apiDas Feld service ist genau api (unterscheidet Groß- und Kleinschreibung).service:="checkout svc"Exakter Treffer mit Leerzeichen oder Sonderzeichen – setz den Wert in Anführungszeichen.host:node-*Präfix-Treffer auf einem Feld.path:~"^/api/v[12]/"Regulärer Ausdruck auf einem Feld.user_id:*Zeilen, die das Feld überhaupt haben, egal mit welchem Wert._msg:checkoutNur die Nachricht durchsuchen, nicht die anderen Felder.kubernetes.namespace_name:=paymentsVerschachtelte Keys sind Namen mit Punkten.
Abfrage und Filter
Gesucht wird mit zweierlei zusammen: dem LogsQL, das du in den Editor getippt hast, und den Feldfiltern, die du im Bereich „Felder“ gewählt hast. Die Filter werden nicht in den Editor geschrieben – sie stehen angehakt im Bereich und werden bei der Suche mit deiner Abfrage kombiniert. Die Regeln:
- Ein Klick auf einen Wert im Bereich „Felder“, auf ein Feld im Detail einer Zeile oder auf die Service-Spalte fügt einen Filter
field = valuehinzu und startet die Suche sofort neu. - Mehrere Werte desselben Felds werden mit OR verknüpft (intern
level:in(error, warn)); Filter auf verschiedenen Feldern schränken sich gegenseitig ein (AND); dein Freitext bleibt, wie er ist. - Der Bereich zeigt die aktiven Filter oben. Klick auf einen angehakten Wert oder auf das × in dieser Liste, um einen zu entfernen, oder auf Alle entfernen, um alle zu verwerfen.
- Der Bereich berechnet die Werte eines Felds ohne die Filter auf genau diesem Feld, damit die anderen Werte sichtbar bleiben und du die Auswahl erweitern kannst.
- Abfrage, Filter und Zeitraum stehen in der URL der Seite, also bleiben sie beim Neuladen erhalten, und du kannst den Link teilen. Alles, was ein Filter nicht ausdrücken kann – Ausschlüsse, reguläre Ausdrücke, Bereiche –, gehört in die Abfrage.
Ausschließen und kombinieren in der Abfrage
-level:debugAlles außer Debug-Zeilen.level:error OR level:warnEins von beiden.service:=api AND NOT path:/healthExplizites AND / NOT.(level:error OR level:warn) team:=paymentsKlammern gruppieren Bedingungen.level:in(error, fatal, critical)Einer von mehreren Werten._stream:{service="api",env="prod"}Der schnellste Filter: ein exakter Stream.
Zahlen und Bereiche
Numerische Felder (Dauern, Größen, Statuscodes) lassen sich vergleichen und auf Bereiche einschränken.
duration_ms:>500Größer als.status:>=500 status:<600Dazwischen – zwei Filter werden mit AND kombiniert.status:range(500, 599)Dasselbe als Bereich.bytes:>1MiBEinheiten werden verstanden: KiB, MiB, GiB und Dauern wie 1.5s oder 200ms.ip:ipv4_range(10.0.0.0/8)IP-Bereiche.
Zeiträume
Die Voreinstellungen 15 Min. / 1 Std. / 24 Std. / 7 Tage setzen das Fenster relativ zu jetzt. Eigener Zeitraum öffnet einen Kalender mit Zeitfeldern bis auf die Sekunde – der übliche Weg, wenn ein Alert einen Zeitpunkt nennt. Die Aufbewahrungsdauer deines Plans ist die äußere Grenze. Ergebnisse kommen immer neueste zuerst.
_time:5mNur die letzten 5 Minuten, unabhängig von der Voreinstellung._time:[2026-09-01, 2026-09-02]Ein expliziter Tagesbereich (UTC) in der Abfrage.
Zeilendetail und Kontext
Klick auf eine Zeile, um sie aufzuklappen. Das Detail zeigt jedes Feld des Eintrags mit zwei Aktionen pro Feld:
- Filter-Symbol – hängt
field:=valuean die Abfrage an. Ein Klick auf einen Service-Namen in der Liste tut dasselbe fürservice. - JSON kopieren – der Roh-Eintrag.
Kontext um eine Zeile
Die Kontext-Buttons (±1s, ±10s, ±1m, ±5m) ersetzen die aktuelle Suche durch denselben Stream – _stream:{...} dieser Zeile – und ein Zeitfenster um sie herum. Die Ankerzeile bleibt hervorgehoben, so liest du, was direkt davor und danach passiert ist, ohne die Abfrage dafür zu kennen. Mit der Zurück-Taste des Browsers oder den Voreinstellungen kommst du zurück.
Live-Tail
Live-Tail streamt neue Zeilen, die zu deiner Abfrage passen, sobald sie eintreffen. Er läuft etwa sechs Sekunden hinter der Echtzeit, damit Agents, die in Batches senden, in der richtigen Reihenfolge liefern können, folgt den Zeitstempeln der Ereignisse und behält die neuesten 500 Zeilen im Blick. Eine Zeile mit einem Zeitstempel in der Vergangenheit – nachgeliefert, aus einer erneut eingespielten Datei – erscheint in der Suche, nicht im Tail.
Anzeige, Gruppierung, Download
- Anzeige (Regler-Symbol): Zeilen pro Seite 50/100/200/500, welche Spalten zu sehen sind, zusätzliche Felder, die als
key=valueneben der Nachricht stehen, und Gruppieren nach einem Feld – die Liste bekommt dann eine Kopfzeile pro Wert, praktisch fürserviceoderhost. - Diese Einstellungen gehören dir und werden im Browser gespeichert; sie sind nicht Teil eines geteilten Links.
- Download exportiert die gerade geladenen Zeilen als NDJSON oder CSV – schränk zuerst die Abfrage ein und lade dann, was du brauchst.
- Klartext-Einträge (aus
/v1/ingest/text) behalten die ganze ursprüngliche Zeile als Nachricht; mehrzeilige Stacktraces erscheinen als ein Block.
Eine Suche teilen
Der Suchzustand steht in der URL, also bleibt er beim Neuladen erhalten, und ein kopierter Link zeigt deinen Kolleg:innen genau dieselbe Suche:
| Parameter | Bedeutung |
|---|---|
| q | die Freitext-Abfrage |
| range | eine Voreinstellung (15m, 24h, 7d); fehlt beim Standard 1h |
| from / to | ein eigener Zeitraum als ISO-Zeitstempel; wird statt range verwendet |
https://app.uptimeeye.com/<org>/logs?q=timeout+service%3A%3Dcheckout+level%3A%3Derror&range=24hVoreinstellungen bleiben relativ („die letzten 24 Std.“, wenn der Link geöffnet wird); ein eigener Zeitraum ist absolut – genau richtig für Links während eines Incidents.
Woher Felder kommen
Es gibt kein Schema. Jedes JSON, das du sendest, wird unverändert gespeichert: {"_msg":"…","service":"api","env":"prod","user_id":"u_42"} ergibt die Felder service, env und user_id. Drei Felder sind besonders:
_msg– die Nachricht. Agents legen mit_msg_fieldfest, welcher ihrer Keys die Nachricht ist._time– die Ereigniszeit; standardmäßig der Zeitpunkt des Ingests._stream– die mit_stream_fieldsgewählten Stream-Labels (zum Beispielservice,env). Filter auf Stream-Feldern sind die schnellsten Filter überhaupt, wähl also Felder mit wenigen verschiedenen Werten.
Wie du Felder schon beim Senden formst, steht in Logs senden.
Aggregationen mit Pipes
Das Suchfeld akzeptiert die komplette Sprache LogsQL, auch Pipes. Die Logs-Seite ist für Zeilen gebaut, deshalb kommen Aggregationen als Zeilen zurück, deren Felder die berechneten Werte sind – öffne eine Zeile, um sie zu sehen, oder lade das Ergebnis herunter.
level:error | stats by (service) count()Fehler pro Service im Zeitraum._stream:{service="api"} | stats quantile(0.99, duration_ms) p99Ein Perzentil über ein numerisches Feld.* | top 10 by (path)Die häufigsten Werte eines Felds._msg:~"order=(?P<order>\d+)" | extract "order=<order>" | stats by (order) count()Einen Wert aus der Nachricht extrahieren und danach zählen.
Die vollständige Referenz ist die LogsQL-Doku.
Kurzreferenz
| Abfrage | Bedeutung |
|---|---|
| word | Zeile enthält das Wort |
| "exact phrase" | Phrase in dieser Reihenfolge |
| field:value | Feld enthält das Wort |
| field:=value | Feld ist gleich dem Wert |
| field:prefix* | Feld beginnt mit |
| -field:value | ausschließen |
| a OR b | eins von beiden |
| field:>10 | numerischer Vergleich |
| field:range(1, 9) | numerischer Bereich |
| field:in(a, b) | einer von mehreren |
| field:* | Feld vorhanden |
| _stream:{k="v"} | exakter Stream |
| _time:15m | letzte 15 Minuten |
| … | stats by (f) count() | aggregieren |
FAQ
Unterscheidet die Suche Groß- und Kleinschreibung?
timeout, level:error) ignoriert Groß- und Kleinschreibung. Exakte Treffer (service:=API) und reguläre Ausdrücke unterscheiden sie.Warum funktioniert service=api nicht?
service=api nicht?service:api (enthält das Wort) oder service:=api (ist gleich). Das Suchfeld erkennt die Form mit = und schlägt die korrigierte Abfrage vor.Wie weit zurück kann ich suchen?
Kann ich über mehrere Organisationen hinweg suchen?
Warum erscheinen nachgelieferte Zeilen nicht im Live-Tail?
_time). Eine Zeile, deren Zeitstempel beim Eintreffen schon älter als ein paar Sekunden ist – eine erneut eingespielte Datei, ein verspäteter Batch –, ist sofort durchsuchbar, wird aber nicht in den Tail gestreamt.Begriffe von oben: Ein Filter ist eine Auswahl field = value aus dem Bereich „Felder“; ein Stream ist die Menge der Zeilen mit denselben Werten der Stream-Felder.