Seite wählen

NETWAYS Blog

Graphite Webinterface Grafana

Auf unserer Produktseite für Graphite werden ja schon einige alternative Webinterfaces für Graphite genannt. Heute möchte ich unser Portfolio erweitern und gleichzeitig meinen Favoriten vorstellen. Mit Grafana besteht ein Webinterface das nicht nur Daten aus Graphite darstellen kann, sondern auch aus InfluxDB oder Elasticsearch. Die GUI ähnelt nicht nur im Namen dem Logstash Webinterface Kibana, auch die Visualisierung und Bedienung ist vergleichbar. Wie bei Kibana, liefert Grafana lediglich Javascript Code aus. Es macht sich die API von Graphite zunutze um Datenpunkte anzuziehen, die ganze „Arbeit“ passiert also im Browser vom User. Zur Darstellung der Daten wird die JavaScript Library Flot für jQuery verwendet, womit die Graphen deutlich besser als im nativen Graphite-Web dargestellt werden.
Zur Darstellung verwendet Grafana Dashboards. Ein Dashboard besteht in der Regel aus mehreren Panels die Daten aus Graphite oder InfluxDB anzeigen. Für die langfristige Nutzung können Dashboards in einem eigenen Elasticsearch Index gespeichert und mit Tags versehen werden, um das wiederfinden zu vereinfachen. Temporäre Dashboards können mit einem generierten Link an Dritte versendet werden. Mit der Playlist Funktion werden mehrere Dashboards nacheinander in einem festgelegten Intervall im Fullscreen Mode abgespielt. Dieses Feature zielt auf die Darstellung auf eigenen Monitoren oder Fernsehern ab.

grafana-systemview

Grafana Systemview


Templates
grafana-templates

Grafana Templates


Mit der Template Funktion nutzt Grafana die Möglichkeit von Graphite, Regex im Metrikpfad anzugeben, auf besondere Art und Weise. Man kann einen Pfad angeben, dessen Ende beispielsweise durch ein Wildcard variabel gehalten wird. Grafana stellt dann alle Möglichkeiten in einem Dropdown zur Auswahl dar. Der Metrikpfad lässt sich dann variable aus verschiedenen Teilen zusammenklicken. Damit gehört das wiederholte hangeln durch die gesamte Verzeichnisstruktur entgültig der Vergangenheit an. Für einzelne Variablen lassen sich auch Wildcards einsetzen, wodurch die Darstellung von gruppierten Graphen möglich wird.
Annotations
Mit dieser Funktion lassen sich Ergebnisse aus Abfragen an Elasticsearch anzeigen. Zum Beispiel können das beliebige Logs sein die von Logstash verarbeitet und dort gespeichert wurden. Die Queries die für eine Annotation festgelegt werden, können auch die oben genannten Varibalen aus dem Template Feature beinhalten.
Mit folgendem Beispiel werden alle SSH Logins für den Ausgewählten Host angezeigt:

hostname:"[[hostname]]" AND program:sshd AND message:"session opened"
grafana-annotations

Grafana Annotations

Blerim Sheqa
Blerim Sheqa
COO

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als COO für Icinga tätig und kümmert sich dort um die organisatorische Leitung.

Elasticsearch Gadgets

Neue Tools auszuprobieren bedeutet auch, erst mal viel Dokumentation zu lesen. Im Falle von Elasticsearch ist das nicht viel anders. So liest man über Indizes und Shards, über Replika und Cluster. Die Installation ist relativ straight-forward, denn es stehen für alle großen Distributionen fertige Pakete zur Verfügung, die nur darauf warten genutzt zu werden. Doch eines fällt nach der Installation sofort auf: Man ist blind. Von den ganzen tollen Features die in der Dokumentation versprochen wurden, ist erst mal nichts zu sehen. Ich möchte heute ein paar Methoden und Plugins vorstellen, die das gesamte Konstrukt Elasticsearch durch Visualisierung etwas durchsichtiger und greifbarer machen.
API
Die API ist eine der mit am wichtigsten Bestandteile von Elasticsearch. Ohne sie würden viele Plugins wohl nicht existieren. Ich erwähne die API hier aber mit unter deswegen, um zu vermitteln was diese Plugins im Hintergrund eigentlich machen. So viel Magie steckt nämlich gar nicht dahinter. Bei dieser API handelt es sich nicht, wie oft fälschlicherweise behauptet, um eine REST API, sondern um eine CRUD API. Der kleine aber feine Unterschied besteht darin, dass die CRUD API direkt auf die Datenobjekte zugreift und nicht großartig abstrahiert. Man kann sie aber genauso über verschiedene URLs ansprechen. Ein Aufruf, um einen allgemeinen Status über einen Elasticsearch Server zu erhalten, würde zum Beispiel lauten curl localhost:9200/_status. Als Ergebnis erhält man einen guten Überblick über den aktuellen Stand, die Anzahl der Indizes und nähere Infos zu diesen. Die Ausgabe ist sogar im JSON Format, lässt sich also sehr gut verarbeiten. Solche Statusberichte gibt es auch für Cluster einen einzelnen Index.

[...]
"_shards" : {
"total" : 622,
"successful" : 462,
"failed" : 0
},
"indices" : {
"logstash-2014.06.27" : {
"index" : {
"primary_size_in_bytes" : 435,
"size_in_bytes" : 435
}
[...]

ElasticHQ

elastichq plugin index

ElasticHQ Plugin – Index Übersicht


Das ElasticHQ Plugin hilft dabei, den Einstieg zu finden. In einem aufgeräumten Webinterface erhält man Informationen über die Last und den Ressourcenverbrauch der einzelnen Server. Indexe werden aufgelistet und Operationen wie „Optimize“, „Refresh“ und „Delete“ können auf sie angewendet werden.
 
Mit einem Interface für Queries kann man seine Daten durchsuchen und dabei gezielt einzelne Indexe ausschließen. Die Übersicht über Mappings hilft vor allem, wenn man für einzelne Felder das Mapping ändern muss, wie zum Beispiel im Zusammenhang mit Kibana, wo manche Operationen nur durchgeführt werden können, wenn sie numerische Felder erhalten.
elastichq cluster

ElasticHQ Plugin – Cluster


Ein besonderes Augenmerk gilt der Cluster Ansicht. Mit vielen Indizes wird es zwar schnell unübersichtlich, einen guten Überblick bekommt man aber dennoch, wenn man sich einen Einzelnen ansieht. Die Verteilung der Shards wird schnell klar und ob wirklich Replika existieren, lässt sich auch nachvollziehen.
 
Head
elasticsearch head plugin

Head Plugin


Wobei ElasticHQ seine Schwierigkeiten hat, das macht das Head Plugin umso besser. Eine Übersicht aufgeteilt auf Nodes die darstellt, wieviele Shards es pro Index gibt und wie diese aktuell verteilt sind. Die Master Node wird klar markiert und Operationen kann man auch durchführen. So lassen sich ganze Server ausschalten oder Indexe löschen, flushen, refreshen etc. Wie in ElasticHQ auch, gibt es Bereiche in denen man Queries durchführen kann und noch mal alle Indizes aufgelistet bekommt.
Bei den beiden Plugins handelt es sich um so genannte ’site-plugins‘. Das bedeutet, dass sie lediglich einen statischen Inhalt ausliefern und Elasticsearch nach der Installation nicht neu gestartet werden muss. Möglich macht das die Kommunikation über die API, die für die Plugins alle nötigen Informationen abliefert.

Blerim Sheqa
Blerim Sheqa
COO

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als COO für Icinga tätig und kümmert sich dort um die organisatorische Leitung.

Logs visualisieren mit Kibana

Wer seine Logfiles mithilfe von Logstash und Elasticsearch behandelt und abspeichert, legt in der Regel viel Wert darauf, die Daten in einer strukturierten Form abzulegen. Schließlich bringen sie nur dann einen wirklichen Nutzen, wenn die sie auch auswertbar sind. An dieser Stelle kommt das Webinterface Kibana ins Spiel. Als reine Javascipt Applikation lässt sich das Interface sehr einfach installieren, denn man muss es lediglich entpacken und den Elasticsearch Server angeben. Alle Queries an Elasticsearch werden vom Browser des Users gesendet. Wer schnell loslegen möchte, kann auch die integrierte Version von Kibana in Logstash verwenden. Ich will mich heute aber garnicht weiter mit Konfigurationen und Installationen aufhalten. Heute will ich auf die wichtigsten Features eingehen mit denen man seine Logs darstellen und auswerten kann.
TopN
Mit einem Klick auf den farbigen Button im Query-Feld lässt sich nicht nur die Farbe im Histogram ändern, sondern auch topN als Art festlegen. Unter Angabe eines Feldes, zum Beispiel syslog_severity, werden die Ergebnisse im Histogram dann farblich unterschiedlich dargestellt. Mit dieser Methode lässt sich erkennen, welche Syslog-Severity wie oft vorkommt.
kibana_topn
Terms
Mit dem Panel „terms“ lässt sich die Anzahl der Werte in einem bestimmten Feld sehr gut anzeigen. Man hat hier zur Darstellung die Wahl Zwischen Tabelle, Balken- und Kuchendiagramm. Für den „schnellen Graphen zwischendurch“ kann man alternativ auch durch klicken auf das jeweilige Feld im Table-Panel eine Top10 Ansicht generieren.
kibana_terms
Trends
Um das ganze noch abzurunden, wird mit dem „trend“ Panel noch der Anstieg des oben genutzten Feldes „syslog_severity“ in Zahlen dargestellt.
kibana_trend
Neben den ganzen visuellen Highlights ist natürlich auch die Ansicht der eigentlichen Logs in Tabellenform wichtig. Dort lassen sich dann, wenn gewünscht, auch nur bestimmte Felder anzeigen.
Wer mehr über Logstash, Elasticsearch und Kibana erfahren möchte, ist herzlich zu unserem Webinar zu dem Thema eingeladen, das bereits kommen Freitag stattfindet! Für eine komplette Einführung die Thematik Logmanagement mit Logstash bieten wir auch entsprechende Starterpakete an.

Blerim Sheqa
Blerim Sheqa
COO

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als COO für Icinga tätig und kümmert sich dort um die organisatorische Leitung.

Logstash Debugging

Wer seine Logs mit Hilfe von Logstash an einer zentralen Stelle sammelt wird früher oder später nicht drum herum kommen eigene Filter zu erstellen. Am beliebtesten ist dabei wohl der „Grok“ Filter. Mit ihm kann man entweder vordefinierte Pattern benutzen, oder selbst etwas Regex-Magic anwenden um seine Logs in das gewünschte Format zu bringen. Diese Filter zu debuggen ist allerdings sehr mühsam, da man jedes mal die betreffende Logstash Instanz neu starten muss damit Änderungen wirksam werden. Aus diesem Anlass will ich heute zwei Tools vorstellen die einem das Leben etwas leichter machen sollen.
grokdebug
Unter grokdebug.herokuapp.com findet man prinzipiell alles was man braucht. Zum einen lassen sich hier Grok-Filter ausprobieren indem man ein Beispiel seines Logeintrags benutzt und dann seinen Filter baut. Zum anderen kann man mit der „Discover“-Funktion auch automatisiert nach Pattern suchen lassen. Wer alle Pattern einfach mal durchstöbern möchte wird auf dieser Seite auch fündig.
ruby-grok
Für die Fans der CLI habe ich natürlich auch etwas. In seinem Git Repository stellt der Logstash Entwickler Jordan Sissel ein paar ruby Libraries bereit die man gut für seine Zwecke nutzen kann. Mit dem mitgelieferten Beispiel „pattern-discovery.rb“ lassen sich zum Beispiel auf einfache Weise bestehende Pattern finden die auf die eigenen Logs passen. Die Installation beschränkt sich hier auf einige wenige Kommandos:

# git clone https://github.com/jordansissel/ruby-grok.git
# cd ruby-grok
# rake
# gem install jls-grok-0.10.11.gem
# ruby examples/pattern-discovery.rb
# Input: 192.168.1.1 http://www.netways.de 00:de:ad:be:ef:00 und etwas Text
# Pattern: %{URIHOST} %{URI} %{MAC} und etwas Text

Mit diesen einfachen Mitteln kann man sich einige Neustarts und damit auch viel Zeit bei der Entwicklung neuer Filter sparen 🙂

Blerim Sheqa
Blerim Sheqa
COO

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als COO für Icinga tätig und kümmert sich dort um die organisatorische Leitung.

Indexieren mit Solr

solrJe mehr Daten man sammelt, umso aufwändiger wird auch das Indexieren. Eine gute Möglichkeit das Problem anzugehen ist das Open Source Projekt Solr von Apache. Solr ist in Java geschrieben und läuft in einem servlet container wie zum Beispiel Jetty. Mit einer API die stark an REST angelehnt ist wird es einem sehr einfach gemacht, Daten abzufragen oder einzufügen. Die Ergebnisse bekommt man entweder als XML oder JSON. Wer seine relationale Datenbank weiterhin behalten will, kann seine Daten auch einfach in Solr importieren, denn die nötigen Handler sind dafür bereits vorgesehen. Solr ist also besonders interessant für Online-Shops mit vielen Produkten, zudem die Volltextsuche auch sehr gut und schnell funktioniert. Ein zusätzliches „Killer-Feature“ ist die SolrCloud Funktion. In Zusammenarbeit mit Zookeeper lässt sich damit eine Umgebung aufbauen, die linear skaliert. Durch die Möglichkeit Collections und Shards zu benutzen lässt sich die Umgebung auch in einzelne Teile trennen.
Installation
Die Installation von einer einzelnen Solr Instanz ist sehr einfach gehalten. Nach dem Download steht ein  Verzeichnis example zur Verfügung, in dem sich alles für einen ersten Start findet. Im Handumdrehen läuft also so schon der erste Server:

root@localhost:/example# java -jar start.jar

Erreicht werden kann der Server über das mitgelieferte Webinterface http://localhost:8983/solr. Über dieses Interface bekommt man Infos über den aktuellen Status des Servers, der Solr-Cloud, dem Replikationsstatus und vielen anderen Fuktionen . Abfragen lassen sich ebenfalls hier machen, was sich besonders in Testszenarien bewährt.
Weil so ein Solr-Server ohne Daten nicht viel Nutzen bringt, werden auch passende Scripte mitgeliefert mit denen man Daten importieren kann.

root@localhost:/example/exampledocs# ./post.sh monitor.xml

Für die Queries wird ein Subset der Lucene Query Syntax benutzt. Eine Abfrage die nur den Preis für Produkte anzeigt die den Namen „monitor“ beinhalten, könnte dann zum Beispiel so aussehen: http://localhost:8983/solr/collection1/select?name=monitor&wt=json&fl=price
Zookeeper
zookeeperZookeeper ist auch ein Tool aus dem Hause Apache. Es kümmert sich darum Konfigurationen auf einezlne Nodes zu verteilen. Bevor es das aber tun kann muss man erst mal Konfigurationen hochladen. Zookeeper lässt sich als Standalone oder im Cluster betreiben. Will man zweiteres, muss man beachten das dazu mindestens 3 Server benötigt werden. Andernfalls würde kein Quorum gebildet werden können, was Zookeeper dazu veranlasst nicht zu laufen. Die Installation ist prinzipiell relativ simpel, da alles mitgeliefert wird was man braucht. Es muss nur noch eine Konfiguration angelegt werden, die zum Beispiel so aussehen kann:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.13:2888:3888

Diese Konfiguration ist auf allen Servern gleich. Damit aber jeder Server weis welcher er von den dreien ist, wird in der Datei /var/lib/zookeeper/myid einfach die jeweilige ID festgelegt. Mit dem mitgelieferten zkServer.sh-Skript lässt sich der Prozess dann überall starten. Solr beherrscht von Haus aus die Kommunikation mit Zookeeper und muss daher nur noch mit den richtigen Parametern gestartet werden:

java -Dbootstrap_confdir=/opt/solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1 -DzkHost=192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181 -jar start.jar

Und fertig ist die erste eigene Solr Cloud. Wer sich mit Jetty nicht ganz anfreunden kann, kann natürlich auch einen anderen servlet container wie Tomcat benutzen.

Blerim Sheqa
Blerim Sheqa
COO

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als COO für Icinga tätig und kümmert sich dort um die organisatorische Leitung.