Diese Seite beschreibt Calíope 1.7, die Version, die ich gerade baue. Die 1.6 ist im App Store für Mac, iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro. Das Changelog sagt, in welcher Version jede Funktion kam.
Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.
Wie du in Query DSL, SQL, ES|QL oder PPL suchst, wie geblättert wird, was Aggregationen und „Erklären“ zeigen und warum die Abfrage nur liest.
Wo es zu finden ist: Workspace › Werkzeuge › Abfrage
Gilt für:ElasticsearchOpenSearch
Die Abfrage schickt, was du schreibst, über die offene Sitzung an den Cluster. Ausführen (⌘↩) führt sie aus, und Stoppen (⌘.) hört auf, auf die Antwort zu warten: Was der Server schon begonnen hat, kann trotzdem zu Ende laufen.
Die Sprache
Die Sprachauswahl in der Leiste zeigt nur die Sprachen des Produkts der Sitzung. Beide haben Query DSL – den JSON-Body von _search – und SQL.
Elasticsearch
Elasticsearch hat außerdem ES|QL, seine Pipe-Sprache: FROM demo_productos | WHERE precio > 40 | LIMIT 10.
OpenSearch
OpenSearch hat außerdem PPL, seine Pipe-Sprache: source=demo_productos | where precio > 40 | head 10.
Query DSL
Der ganze Body geht an _search der Indizes, die in Indizes stehen: leer heißt alle, mehrere werden durch Kommas getrennt. Index auswählen listet sie auf. Das Menü Seite: 50 sagt, wie viele Dokumente jede Seite bringt (50, wenn du es nicht änderst), außer der Body hat sein eigenes size, das dann gilt. Kaputtes JSON lehnt der Server ab, und der Fehler sagt, wo der Fehler steckt: Zeile und Spalte oder das Byte im Body.
Seiten und Gesamtzahl Nächste Seite holt die nächste. Sortiert die Suche (sort), geht es über search_after, das beim letzten empfangenen Dokument weitermacht und keine Grenze hat. Sortiert sie nicht, geht es über from, das der Server bei 10.000 Dokumenten abschneidet, und die Ansicht sagt das. Der Server hört bei 10.000 auf zu zählen, und die Gesamtzahl erscheint als „10.000 oder mehr“; Genaue Gesamtzahl lässt ihn alle zählen (track_total_hits), auf Kosten der Zeit.
Was du siehst Dokumente zeigt jedes Dokument in einer Zeile zusammengeklappt, mit seiner Bewertung; öffne es, um seinen ganzen _source zu sehen. Tabelle setzt die Felder in Spalten, verschachtelte Objekte flachgelegt. Hat der Body aggs, erscheinen die Aggregationen darunter als Baum. Erklären fragt bei jedem Dokument den Server, warum es zur Suche passt (_explain), und zeigt, wie er die Bewertung berechnet hat.
SQL, ES|QL und PPL
In diesen Sprachen steht der Index in der Abfrage (FROM, source=), und die Antwort ist eine Tabelle. Jeder Spaltenkopf trägt den Typ, den der Server angibt; er stimmt nicht immer zwischen Sprachen oder Produkten überein. Enthält die Lizenz des Clusters eine Sprache nicht, sagt das der Server; die Basislizenz von Elasticsearch enthält SQL und ES|QL.
Elasticsearch
In Query DSL übersetzen fragt in SQL Elasticsearch nach dem gleichwertigen Query DSL (_sql/translate) und öffnet es in Query DSL, mit dem Index aus dem FROM schon eingetragen.
OpenSearch
OpenSearch übersetzt SQL nicht in Query DSL: Es liefert nur den Plan seiner Engine. Deshalb hat die Leiste mit OpenSearch kein In Query DSL übersetzen.
Sie liest nur
Die Abfrage schreibt nicht: Der Query-DSL-Body geht immer an _search, SQL, ES|QL und PPL fragen nur ab, und ein in SQL geschriebenes DELETE wird nicht gesendet. Löschen oder Aktualisieren per Abfrage (_delete_by_query, _update_by_query) gibt es hier nicht.
Was jeder Reiter eines Index zeigt, was sich schreiben lässt und wie, wohin das Slow-Log geht und warum es kein Reindexieren gibt.
Wo es zu finden ist: Workspace › Werkzeuge › Indizes
Gilt für:ElasticsearchOpenSearch
Der Reiter hat drei Bereiche, in der Auswahl der Leiste: Indizes, Vorlagen und Pipelines. Neu laden liest den angezeigten neu.
Indizes
Links die Indizes des Clusters mit ihrem Zustand —ein Symbol und sein Name, nie nur eine Farbe—, ihren Dokumenten und ihrer Größe. Systemindizes (die mit einem Punkt beginnen und die der Server versteckt) stehen zugeklappt in ihrer Gruppe. Die Dokumentanzahl der Liste ist die von Lucene, die jedes Objekt eines nested-Feldes einzeln zählt; was eine Suche liefert, steht unter Statistik. Wähle einen Index, und rechts erscheint sein Detail, in Reitern, die beim Öffnen gelesen werden:
- Felder: das Mapping als Baum, jedes Feld mit Typ, Parametern und Unterfeldern.
- Einstellungen: die im Index gesetzten Einstellungen (nicht die Vorgaben), mit der Slow-Log-Schwelle vorne.
- Shards: jeder Shard, primär oder Replik, mit Zustand, Knoten und, wenn er keinen Knoten hat, dem Grund.
- Aliasse: die Aliasse, die auf den Index zeigen.
- Dokumente: eine Stichprobe der Dokumente, jeweils 25.
- Statistik: die Dokumente der obersten Ebene neben denen von Lucene, die Größe und die Aktivitätszähler, die seit dem Öffnen des Index auf seinem Knoten aufsummieren.
Die Dokumente
Die Stichprobe folgt der Reihenfolge, in der der Index sie speichert, und nennt die genaue Gesamtzahl. Sie durchläuft nur die ersten 10.000 (index.max_result_window): darüber hinaus sagt es der Bildschirm, und um einen ganzen Index zu durchlaufen, gibt es die Abfrage, die mit search_after blättert.
Was sich schreiben lässt Neuer Index… in der Leiste öffnet das JSON eines neuen Index, mit einem Shard, ohne Repliken und leerem Mapping. Index löschen… im Detail fragt nach und nennt den Index und seine Dokumentanzahl; bei einem Systemindex erscheint es nicht. Unter Dokumente legt Neues Dokument… ein Dokument mit der eingegebenen _id an —gibt es sie schon, lehnt der Server ab und ersetzt nichts— oder mit einer des Servers, wenn das Feld leer bleibt. Dokument bearbeiten… ersetzt das ganze Dokument: ein im Blatt entferntes Feld verschwindet. Und nur, wenn es seit dem Lesen niemand geändert hat; sonst lehnt der Server ab und überschreibt die andere Änderung nicht. Dokument löschen… fragt nach und nennt die _id. Alles läuft über den Schutz der Verbindung, und mit dem Schreibschutz-Etikett erscheint nichts davon.
Das Slow-Log Slow-Log-Schwelle bearbeiten… unter Einstellungen legt fest, ab welcher Dauer eine langsame Suche ins Protokoll geschrieben wird: die Abfrage- und die Abrufphase, jeweils für Warnung und Info. Gib eine Zeit mit Einheit ein (500ms, 2s); -1 schaltet ab, und leer setzt auf die Vorgabe zurück, die nichts protokolliert.
OpenSearch
Bei OpenSearch bietet das Blatt zusätzlich die Protokollstufe (index.search.slowlog.level).
Das Protokoll bewahrt nicht Calíope auf: der Server schreibt es. Bei einer Paketinstallation landet es in seinem Protokollverzeichnis (path.logs), in einer Datei <Cluster>_index_search_slowlog; in einem Container in der Ausgabe des Containers (docker logs).
Vorlagen und Pipelines
Sie gehören zum Cluster, nicht zu einem Index, und werden nur gelesen. Jede Zeile fasst die Vorlage (ihre Muster, ihre Priorität und aus welchen Vorlagen sie besteht) oder die Pipeline (ihre Beschreibung und wie viele Prozessoren sie hat) zusammen; öffne sie, um ihr ganzes JSON zu sehen. Alte Vorlagen (_template) erscheinen ebenfalls, als solche markiert. Was der Server als seins erklärt und was mit einem Punkt beginnt, steht zugeklappt in seiner Gruppe. Calíope bearbeitet sie nicht: sie werden über die API geändert.
Was es nicht tut
Es gibt kein Reindexieren (_reindex) und keine Typänderung eines bestehenden Feldes: der Server ändert den Typ eines Feldes mit Daten nicht, und einen Index in einen anderen zu kopieren ist eine lange Serveraufgabe, die über die API gestartet wird.
Was Grün, Gelb und Rot bedeuten, wie die Knoten gezählt werden, was die Rollen sind und wie man liest, warum ein Shard keinen Knoten hat.
Wo es zu finden ist: Workspace › Werkzeuge › Cluster
Gilt für:ElasticsearchOpenSearch
Der Reiter liest den Cluster beim Öffnen und mit Aktualisieren; er aktualisiert sich nicht selbst, weil der Cluster seine Änderungen nicht meldet.
Der Zustand
Oben steht der Zustand mit Symbol und Namen, nie nur eine Farbe:
- green: Alle Shards, Primär- und Replikat-Shards, haben einen Knoten.
- yellow: Alle Primär-Shards haben einen Knoten, aber ein Replikat nicht. Die Daten werden vollständig gelesen und geschrieben; es fehlt die Kopie, die das Replikat geben würde, wenn ein Knoten ausfiele.
- red: Ein Primär-Shard hat keinen Knoten, und die Dokumente dieses Shards können weder gelesen noch geschrieben werden.
Darunter, wie viele Knoten von denen antworten, die der Cluster erwartet. Die Zählung kommt aus den Knoten, die die Sitzung gesehen hat, und aus der Abstimmungskonfiguration des Clusters; ein Knoten, der vor dem Verbinden ausgefallen ist, zählt also auch mit: Er wird mit seiner ID genannt, weil niemand seinen Namen nennt. Dann der Master (_cat/master) und die Shards: aktiv, verschoben, initialisiert und nicht zugewiesen. Fällt ein Knoten aus, warten seine Replikate eine Minute auf seine Rückkehr (index.unassigned.node_left.delayed_timeout), bevor sie anderswo kopiert werden, und die Zahl sagt es in Klammern.
Knoten
Eine Zeile pro Knoten mit Rollen, Heap, RAM, CPU, Last, Festplatte, Shards und Version. Rollen enthält die Buchstaben von node.role: m Master, d Daten, i Ingest, r Remote-Cluster-Client; die übrigen sind Datenstufen. Mit dem Zeiger darüber liest man sie ganz.
Shards mit Problemen
Die Shards, die nicht aktiv sind: zuerst die nicht zugewiesenen, Primär- vor Replikat-Shards und die Indizes des Benutzers vor den Systemindizes. Der erste nicht zugewiesene wird mit POST /_cluster/allocation/explain erklärt: Grund (zum Beispiel NODE_LEFT, der Knoten ist gegangen), Kann er zugewiesen werden? und was jeder Knoten entscheidet. Erklärung des Servers ist der Text des Servers, unverändert und auf Englisch. Ein häufiger Fall: Mit zwei Knoten hat ein Index mit zwei Replikaten keinen Platz für das zweite, weil ein Knoten nicht zwei Kopien desselben Shards hält (same_shard), und der Cluster bleibt gelb, bis der dritte zurückkommt.
Wartende Cluster-Aufgaben und Laufende Wiederherstellungen
Die Cluster-Aufgaben, die auf ihren Platz warten (_cat/pending_tasks), und die Shard-Kopien, die gerade laufen (_cat/recovery).
Konnte ein Teil nicht gelesen werden, trägt er seinen Hinweis, und die anderen werden trotzdem gezeigt. Der Reiter liest nur: Er verteilt keine Shards neu und ändert keine Cluster-Einstellungen.
Was jede Karte misst, warum die Heap-Warnung bei 75 % beginnt, warum Raten Differenzen zwischen zwei Lesungen sind und was eine Ablehnung in einem Thread-Pool bedeutet.
Wo es zu finden ist: Workspace › Werkzeuge › Knoten
Gilt für:ElasticsearchOpenSearch
Der Reiter liest den Knoten beim Öffnen und, solange er vorne ist, alle 5 s; beim Reiterwechsel hört das Lesen auf. Solange er sich selbst liest, zeigt ihn Aktivität als „Suchknoten, alle 5 s“. Aktualisieren liest ihn sofort.
Knoten
Standardmäßig ist es der Knoten, der der Sitzung antwortet. Hat der Cluster mehrere, lässt die Auswahl einen anderen wählen.
Die Karten
- JVM-Heap: das Belegte im Verhältnis zum Maximum. Ab 75 % trägt sie eine Warnung mit Glyphe und Text: Ab dieser Schwelle rät Elastic, den Speicherdruck zu untersuchen, denn darüber verbringt die JVM mehr Zeit mit Sammeln, und die Circuit Breaker, die eine Anfrage abbrechen, bevor dem Knoten der Speicher ausgeht, sind näher am Auslösen.
- Garbage Collections: die der jungen und die der alten Generation, mit ihrer Dauer; schnell wachsende alte sind das Zeichen eines Heaps, der nicht mehr mithält.
- CPU: die der Maschine und darunter die des Knotenprozesses.
- Festplatte: Belegt ist der Gesamtplatz minus der verfügbare. Ab 85 % trägt sie eine Warnung: Das ist die untere Plattenschwelle des Clusters (cluster.routing.allocation.disk.watermark.low), und darüber weist der Cluster diesem Knoten keine Replikate mehr zu.
- Abfragen pro Sekunde und Indexierte Dokumente pro Sekunde: die erste mit der mittleren Latenz der Abfragen im Intervall.
Raten sind Differenzen
Der Server liefert nur Zähler, die seit dem Start des Knotens aufsummiert werden. Eine Rate ist die Differenz zweier Lesungen geteilt durch die Zeit dazwischen nach der Uhr des Knotens; die erste Lesung zeigt daher „Braucht eine zweite Lesung“, und die Zahl kommt mit der nächsten. Darunter steht die Summe seit dem Start.
Thread-Pools
Jeder Pool mit seinen Threads, den aktiven, der Warteschlange, den abgelehnten und den erledigten. Ist die Warteschlange eines Pools voll, lehnt der Knoten die nächste Anfrage mit einem 429 ab, statt zu warten. Pools mit Ablehnungen werden mit einer Glyphe hervorgehoben, untätige sind eingeklappt. Ablehnungen und Erledigte zählen seit dem Start: Eine hohe Zahl kann alt sein, entscheidend ist, ob sie zwischen Lesungen wächst.
Heiße Threads
Mit Heiße Threads lesen misst der Knoten eine halbe Sekunde lang und liefert die drei Threads, die am meisten CPU verbraucht haben. Es ist der Text des Servers unverändert, auf Englisch; bei ruhendem Knoten kommt nur die Kopfzeile.
Der Reiter liest nur: Er ändert keine Knoteneinstellungen.
Stichwörter: elasticsearch, opensearch, knoten, jvm, heap, gc, garbage collection, cpu, platte, watermark, abfragen pro sekunde, indexierung, thread pool, ablehnungen, rejected, 429, hot threads, plugins
Aufgaben: was im Cluster läuft und wie man es abbricht
Was der Aufgabenbaum zeigt, wie oft er neu gelesen wird, welche Aufgaben sich abbrechen lassen und was der Server beim Abbrechen antwortet.
Wo es zu finden ist: Workspace › Werkzeuge › Aufgaben
Gilt für:ElasticsearchOpenSearch
Der Reiter liest die Aufgaben des Clusters (GET /_tasks?detailed=true&group_by=parents) beim Öffnen und, solange er vorne ist, alle 3 s; beim Wechsel des Reiters hört das Lesen auf. Solange er von selbst liest, zeigt Aktivität das als „Suchaufgaben, alle 3 s“. Aktualisieren liest sie sofort.
Der Baum
Jede Elternaufgabe trägt ihre Kinder darunter, sortiert danach, wie lange sie schon laufen. Jede Zeile nennt die Aktion, die Beschreibung, den Knoten mit seinem Namen (oder seiner ID, wenn der Name unbekannt ist) und wie lange sie läuft. Bei einem delete by query, einem update by query oder einem reindex sagt sie außerdem, wie viele Dokumente von wie vielen erledigt sind.
Der Filter
Er passt auf Aktion oder Beschreibung, ohne Groß- und Kleinschreibung, und eine Elternaufgabe bleibt, wenn eines ihrer Kinder passt.
Was nicht zum Abbrechen angeboten wird
- Die Liste anzufordern ist selbst eine Aufgabe des Servers: Sie ist als „diese Liste“ markiert.
- Persistente Aufgaben („persistent, vom Cluster selbst“) markiert der Server als abbrechbar, aber sie gehören dem Cluster selbst und werden nicht angeboten.
- Aufgaben, die der Server nicht als abbrechbar markiert, solche, deren Abbruch schon angefordert ist, und bei einer schreibgeschützten Verbindung alle.
Aufgabe abbrechen
Zuerst wird bestätigt: Die Meldung nennt Aktion, Beschreibung und Knoten, und Weiterlaufen lassen lässt sie weiterlaufen. Abbrechen bittet den Server, sie so bald wie möglich anzuhalten; was sie schon getan hat, wird nicht rückgängig gemacht. Der Server antwortet immer mit Erfolg, und der Bildschirm sagt, was geschah: dass er sie als abgebrochen markiert hat, dass die Aufgabe schon fertig war oder dass ihr Knoten nicht mehr im Cluster ist.
Was der Reiter von einem Repository und seinen Snapshots zeigt, wie man einen anlegt, wie er bis zum Ende verfolgt wird und wie man von Hand wiederherstellt.
Wo es zu finden ist: Workspace › Werkzeuge › Snapshots
Gilt für:ElasticsearchOpenSearch
Der Reiter liest die Snapshot-Repositorys des Servers (GET /_snapshot) und vom gewählten seine Snapshots (GET /_snapshot/<repository>/_all).
Repository
Hat der Server mehrere, wählt man es in der Leiste. Darunter stehen sein Typ und seine Einstellungen; eine Einstellung, die ein Zugangsdatum nennt, wird verdeckt (••••). Ohne jedes Repository sagt es der Bildschirm: Ein Repository wird auf dem Server registriert (PUT /_snapshot/<name>), und eines vom Typ fs braucht seinen Ordner in path.repo auf jedem Knoten, in der Konfiguration des Servers. Calíope registriert keine Repositorys.
Die Snapshots
Sie gehen vom neuesten zum ältesten. Jeder nennt seinen Status als Symbol und in Worten („Vollständig“, „Läuft“, „Teilweise: ein Shard ist fehlgeschlagen“, „Fehlgeschlagen“), wann er begann, wie lange er dauerte, seine Shards und seine Indizes und den Fehler jedes fehlgeschlagenen Shards.
Snapshot anlegen
Öffnet ein Blatt mit dem Namen und den Indizes. Der vorgeschlagene Name trägt Datum und Uhrzeit (snapshot-JJJJ.MM.TT-HHMMSS); er muss kleingeschrieben und ohne Leerzeichen sein, sonst lehnt der Server ihn ab und das Blatt zeigt den Grund. Indizes werden durch Kommas getrennt und erlauben Platzhalter; leer heißt alle des Clusters. Ein Index, den es nicht gibt, wird übersprungen, und der globale Zustand (Vorlagen und Cluster-Einstellungen) kommt nicht hinein. Anlegen geht durch den Schreibschutz der Verbindung: Bei einer schreibgeschützten erscheint die Schaltfläche nicht.
Das Blatt schließt sich, sobald der Server die Anfrage annimmt, und Aktivität verfolgt den Snapshot als „Such-Snapshot“, mit den fertigen Shards als Fortschritt. Es gibt kein „Stoppen“: Anhalten ließe ihn halb fertig. Das Ende bestätigt die Liste der Snapshots, weil OpenSearch einen Moment braucht, bis es ihn als fertig meldet. Läuft er nach zehn Minuten noch, sagt es der Bildschirm, und Aktualisieren zeigt später, wie er endete.
Wiederherstellen wird nicht angeboten
Wiederherstellen überschreibt offene Indizes und wird außerhalb eines Abfragewerkzeugs entschieden. Der Fuß der Liste sagt das und schreibt die Anfrage, um es von Hand zu tun: POST /_snapshot/<repository>/<name>/_restore.