28 Oktober 2015 Engineering

Die Geschichte von Sense - Ankündigung von Sense 2.0.0-beta1

Von Boaz Leskes

Der Anfang

Die Idee zu Sense entstand wie bei jedem guten Projekt bei einem Glas Bier nach einer Ruder-Tour auf der Amstel. Mein Freund Jasper und ich sprachen über das bevorstehende jährliche Hackathon in Jaspers Unternehmen. Das Hackathon folgte einer strengen Prozedur, die vorgibt, wie Ideen ausgewählt und Teams gebildet werden. Zu dieser Zeit arbeiteten Jasper und ich zusammen mit Anne Veling an einer alternativen Verlaufsoberfläche im Chrome-Browser.

Jasper und ich waren zwar glückliche Elasticsearch-Benutzer, fanden aber gleichzeitig, dass es kein gutes Tool gab, mit dem es möglich war, Anfragen an seine umfangreiche REST-API zu senden. So traurig es auch war – das beste Tool war immer noch der terminalbasierte cURL-Befehl. Wie unpraktisch das ist, stellt man spätestens nach fünf Sekunden des Arbeitens mit cURL und Requests samt Body. Einfache Dinge wie das Korrigieren eines Schreibfehlers erforderte Neueingabe des gesamten Befehls. Von dem Kampf mit Multi-Line-Eingaben im Terminal schon gar nicht zu sprechen. Es musste doch möglich sein, einen web-basierten JSON-Editor zu finden und diesen bestmöglich einzusetzen.

Nicht zu schaffen … an einem Wochenende.

Ich forschte ein wenig und rief Anne an. Er arbeitete immer noch am Broswerverlauf-Projekt. Da aber wir alle begeisterte Elasticsearch-Benutzer waren, konnten wir vielleicht daran arbeiten, eine coole Console dafür zu entwickeln. Wir könnten einfach den Ace Online-Editor nehmen und eine Wissensdatenbank aufbauen, die die API automatisch erkennt und ordentliche Kontextvorschläge geben würde. Anne war sofort begeistert und stimmte zu, dass dies cool wäre. Aber er musste die Idee ablehnen, da sie gegen eine der grundlegenden Regeln des Hackathon verstieß: Es musste nach einem Wochenende fertig sein. Das, was ich vorschlug, war einfach nicht möglich. Letztendlich machten wir weiter und entwickelten den fantastischsten Ersatz für den Chrome-Browserverlauf.

Aber ich fühlte mich herausgefordert und wollte beweisen, dass es möglich sei. Am nächsten Wochende (und ein paar zusätzlichen Abenden :) ) setzte ich mich an den Schreibtisch und entwickelte es. Das war der Anfang von Sense. Es hatte verdammt viele Bugs, aber es funktionierte. Ich zeigte es einigen Leuten und sie waren begeistert. 

Die frühen Tage

Ab da verbrachte ich einen Abend pro Woche damit, die Wissensdatenbank zu erweitern und Fehler zu beheben. Sense begann Dynamik zu gewinnen, und ich befürchtete, dass die Leute ewig auf einer alten und fehlerbehafteten Version sitzenbleiben würden. Als Gegenmaßnahme entschloss ich mich dazu, Sense als Chrome-Erweiterung zu veröffentlichen, damit es beim Release automatisch aktualisiert wird. Nach und nach wurden meiner Ansicht nach benötigte Funktionen, wie etwa der Verlaufsbereich, hinzugefügt.

Etwa zu der Zeit fing ich bei Elastic an. Ich war glücklich und aufgeregt zu hören, dass viele Leute im Unternehmen Sense nutzten. Ich erinnere mich genau an das Gepsräch mit Clint, der sagte: „Weißt du, was Sense noch bräuchte? Es sollte noch die Möglichkeit geben, mehrere Anfragen im Editor zu haben.“ Das war eine weitere Herausforderung, und natürlich nahm ich sie an. Dies war nicht ganz so trivial und ich musste mich mehr mit dem Innenleben von Ace beschäftigen. Das Ergebnis war ein neuer Ace-Modus (die in Ace verwendete Hervorhebungslogik), die eng in Senses Vorschlags-Engine integriert war.

Um zu erkennen, was das bedeutet, sehen Sie sich diesen alten Screenshot von Sense an:

Abbildung 1. Sense 0.7

Sense 0.7

Oben gab man eine API-URL ein und auf der linken Seite den JSON-Text. Alles war sauber getrennt und man konnte Aces Standard-JSON-Modus verwenden. Jetzt musste ich aber einen Weg finden, wie das folgende Format unterstützt werden konnte:

GET _cluster/health
POST index/_settings
{
  "index": { "number_of_replicas": 3 }
}
        

Das bedeutete, dass Ace jetzt drei unterschiedliche Dinge parsen musste: eine HTTP-Methode, eine URL und optional einen JSON-Text. Und noch schlimmer – diese drei unterschiedlichen Modi waren nicht so klar getrennt wie vorher. Der einzige Weg zu wissen, wann ein JSON-Text komplett ist, besteht darin, die Klammern zu zählen. Es benötigte ein wenig Arbeit und Anpassung auf Ace, aber es gelang mir: die Sense-Syntax, die man heute kennt, wurde geboren (danke, Clint!).

Die Marvel-Ära

Die Entwicklung von Marvel, unsere Verwaltungs- und Überwachungslösung für Elasticsearch (Weiteres in „Shield, Watcher und Marvel 2.0.0 GA veröffentlicht“), wurde zu meiner hauptberuflichen Tätigkeit. Marvel sollte in der Entwicklung kostenlos nutzbar sein. Es machte auch Sinn, Sense in Marvel zu integrieren. Das ermöglichte es mir, in der Arbeitszeit am Sense zu arbeiten und es sehr viel mehr Benutzern als vorher vorzusetzen. Das bedeutete zudem auch, dass waschechte JavaScript-Entwickler an Sense arbeiteten. Diese halfen dabei, es aufzuräumen, und mir die neuesten Raffinessen im Browser-Universum beizubringen.

Während dieser Zeit wurde Sense mehrfach umgeschrieben. Ich schrieb die zwei separaten Vorschlags-Engines für URLs und JSON um und entwickelte eine einzelne Vorschlags-Engine, die in beiden Kontexten funktionierte und einen dritten Kontext zuließ: URL-Parameter.

Die neue Engine kann auch mehrere Vorschlagskontexte behalten. Sehen Sie sich beispielsweise das Parameter für die Sortierung_search API an:

GET _search
{
  "sort": [
     "timestamp": "desc",
     "price": {
        "order": "desc".
        "missing": "last"
     },
     "nested_filter": { "term": { ... }},
     "_score"
  ]
}
        

Abhängig davon, wo Sie sich befinden, muss Sense einfache Werte (wie _score), komplexere Strukturen (wie order und missing), oder sogar beliebige Filter (wie nested_filter) vorschlagen. Alle diese Vorschlagspfade werden gleichzeitig verarbeitet und ausgeschlossen, sobald sie irrelevant werden.

Ankündigung von Sense 2.0

Marvel 1.x basierte auf Kibana 3.0, einem hervorragenden Datenexplorations- und Dashboard-Tool. Aber das Kibana-Team hatte eine noch größere Vision. Kibana 4.x ist als generische Anwendungsplattform, auf der einfach UI-Apps entwickelt werden können, die mit Elasticsearch als Backend funktionieren. Tatsächlich ist Marvel 2.0 die allererste App, die Kibana als Plattform nutzt. 

Als ich einen Schritt zurücktrat und mir Sense ansah – eine generische Konsole für die Interaktion mit der Elasticsearch-API – dann fiel mir auf, dass es vollständig mit der Kibana-Vision von einer App übereinstimmte. Ich bin sehr froh, heute verkünden zu können, dass Sense 2.0 eine Open-Source-Kibana-App ist, die kostenlos in der Entwicklung und Produktion verwendet werden kann. 

Abbildung 2. Screenshot Sense 2.0

Sense 2.0


Release-Highlights


Sense 2.0 bietet auch einige tolle neue Verbesserungen. Im Folgenden sind die Highlights beschrieben. Eine komplette Liste ist hier verfügbar): 

Elasticsearch 2.0
Die Sense-Wissensdatenbank wurde aktualisiert, um Elasticsearch 2.0 zu unterstützen, und beinhaltet Autovervollständigungsvorschläge für die neuen Pipeline-Aggregationen.

Ausführung mehrerer Anfragen

WBeim Testen oder Ausprobieren muss häufig die gleiche Abfolge von Befehlen wiederholt werden. Schreiben Sie alle in Sense, wählen Sie sie aus und senden Sie mehrere Anfragen an Elasticsearch.

Abbildung 3. Mehrere Anfragen absenden

multiple requestsSense sendet die Anfragen nacheinander an Elasticsearch und zeigt die Ausgabe im rechten Bereich als Elasticsearch-Antworten an. Dies ist praktisch beim Beheben eines Problems oder Ausprobieren von Query-Kombinationen in mehreren Szenarien.

Kopieren und Einfügen mehrerer Anfragen

Wenn Sie mehrere Anfragen auswählen, können Sie diese automatisch formatieren und als cURL kopieren. Zum Beispiel:

Abbildung 4. Mehrere Anfragen als cURL kopieren

copy as curl

Folgendes wir dann zu Ihrem Clipboard hinzugefügt:

# Delete all data in the `website` index
curl -XDELETE "http://localhost:9200/website"
# Create a document with ID 123
curl -XPUT "http://localhost:9200/website/blog/123" -d'
{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}'
                

Natürlich können Sie auch mehrere cURL-Befehle einfügen, und Sense wird sie korrekt parsen.

Abschließende Worte

Wir veröffentlichen Sense 2.0.0 zunächst als Beta-Release, da wir wissen, dass uns noch viel Arbeit bevorsteht. Die GA wird demnächst folgen.

Um mehr zu erfahren und Sense 2.0 auszuprobieren, werfen Sie bitte einen Blick in die neue Dokumentation. Teilen Sie uns in den Foren Ihre Meinung mit und eröffnen Sie eine Anfrage, wenn Sie Vorschläge haben oder Fehler auftreten sollten.