Difference between revisions of "HZW Monitoring"

From hzw wiki
Jump to navigation Jump to search
(First draft)
(lots of things)
Line 12: Line 12:
 
<br />
 
<br />
  
= Schematische Darstellung der Funktionsweise =
+
=Schematische Darstellung der Funktionsweise=
 
[[File:Grafanamon.png|873x873px]]
 
[[File:Grafanamon.png|873x873px]]
  
Line 18: Line 18:
  
  
= Informationen Grafana einsehen =
+
=Informationen Grafana einsehen=
 
In Grafana werden Informationen in Boards abgebildet, welche mehrere Dinge in einer übersicht zusammenfassen.
 
In Grafana werden Informationen in Boards abgebildet, welche mehrere Dinge in einer übersicht zusammenfassen.
  
Line 35: Line 35:
 
[[File:Grafana2.png]]
 
[[File:Grafana2.png]]
  
= InluxDB und Telegraf =
+
=Telegraf Konfiguration=
 
Die Konfiguration von Telegraf, also die Einstellungen was wie eingesammelt werden soll, geschieht unter /etc/telegraf/telegraf.conf
 
Die Konfiguration von Telegraf, also die Einstellungen was wie eingesammelt werden soll, geschieht unter /etc/telegraf/telegraf.conf
  
Line 50: Line 50:
 
     report_active = false
 
     report_active = false
 
Das die Daten in der InfluxDB laden wird durch folgende config erreicht.
 
Das die Daten in der InfluxDB laden wird durch folgende config erreicht.
[[outputs.influxdb]
 
  
 +
<nowiki>[[outputs.influxdb]</nowiki>
 +
  database = "telegraf"
 +
  urls = [ "http://IP:PORT" ]
 +
  username = "USERNAME"
 +
  password = "PASSWORD"
  
In folgendem Format werden die Informationen in der Datenbank abgelegt: [Messung] [Key=Value] [Timestamp]
+
Welche Plugins input / output Plugins es gibt findet ihr [https://github.com/influxdata/telegraf/tree/master/plugins hier].
  
 +
<br />
 +
 +
= Wie die Daten in der InfluxDB aussehen =
 +
Daten werden in folgendem Format in der InfluxDB Datenbank abgelegt
 +
[Messung] [Key=Value] [Timestamp]
 
Ihr könnt euch mit telegraf --test auf einer der VMs eine liste der eingesammelten Werte anzeigen lassen.
 
Ihr könnt euch mit telegraf --test auf einer der VMs eine liste der eingesammelten Werte anzeigen lassen.
 +
 +
Das macht das ganze etwas verständlicher.
 +
ori@vm_bigblue:~$ telegraf --test | grep mem
 +
 +
mem,host=big blue active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i 1590593128000000000
 +
Zerlegen wir das mal in seine Teile.
 +
 +
Alles bis zum ersten Blankspace ist die '''Messung'''.<blockquote>mem,host=big blue </blockquote>Alles weitere bis zum nächsten Blankspace sind Kommaseparierte '''Key=Value Pairs'''.<blockquote>active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i</blockquote>Und ganz am Ende kommt ein epoch Zeitstempel (Millisekunden seit dem 01.01.1970)<blockquote>1590593128000000000</blockquote>Siehe auch meinen Blogartikel [https://blog.hackzenwerk.org/2020/03/20/daten-per-influxdb-in-grafana-abbilden/ Daten per InfluxDB in Grafana abbilden].
 +
 +
In Grafana sieht das ganze dann so aus.
 +
 +
[[File:Grafana3.png]]
 +
 +
 +
Wie kommen wir jetzt von den Rohdaten in der Datenbank zu dieser ansicht? --> Wir bauen eine Query.
 
<br />
 
<br />
  
= Prometheus =
+
= Eine Query Bauen =
 +
Um eine eigene Query zu bauen, klickt zunächst in einem Board oben rechts auf '''Add panel''' und dann auf '''Add Query'''.
 +
 
 +
[[File:Grafana4.png]]
 +
 
 +
 
 +
 
 +
Ihr könnt auch eine bestehende Query verändern ('''edit'''), oder sie kopieren und dann verändern ('''duplicate''').
 +
 
 +
[[File:Grafana5.png]]
 +
 
 +
 
 +
Der Obere Teil der Ansicht des Query Editors ist eine Echtzeitanzeige eurer Query.
 +
 
 +
Wenn Ihr etwas verändert, wird es dort direkt angezeigt.
 +
 
 +
Alle Änderungen nehmt ihr in der unteren Hälfte vor.
 +
 
 +
Die Datenquelle der Query wird bei '''Query''' eingestellt, in unserem Fall die InfluxDB.
 +
 
 +
 
 +
Schauen wir uns jetzt die Memory Messung aus dem Oberen Beispiel nochmal an.
 +
 
 +
Ein einzelner Datenpunkt in der Datenbank sieht folgendermaßen aus.
 +
mem,host=big blue active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i 1590593128000000000
 +
Die Query die wir also schreiben holt sich daten aus der '''[Messung] mem'''.<blockquote>SELECT [...] FROM "mem"</blockquote>Die Daten die wir haben wollen sind "total" und "used".
 +
 
 +
Die Funktion [https://docs.influxdata.com/influxdb/v1.3/query_language/functions/#mean mean()] gibt uns den durchschnittlichen Wert ('''Value''') des '''Keys''' "total" zurück.<blockquote>total=33737355264</blockquote>"Durchschnittlicher Wert" ist hier abhängig von dem aktuellen Zeitabschnitt, den Ihr euch anseht.
 +
 
 +
Wenn Ihr die Statistiken von zwei Jahren betrachtet, werden einzelne kurze Peaks von ein Paar Minuten über diese Funktion rausgerechnet.
 +
 
 +
 
 +
[[File:Grafana6.png|1255x1255px]]
 +
 
 +
 
 +
Nun woher weiss nun aber Grafana, worum es sich bei dem ausgelesenen Wert 33737355264 handelt?
 +
 
 +
Garnicht. Wir müssen selbst defnieren, was das ist.
 +
 
 +
Dazu wechseln wir neben der Query auf den nächsten Punkt.
 +
 
 +
[[File:Grafana7.png]]
 +
 
 +
Hier könnt zum einen definieren, wie die Query aussehen soll (fancy) und welche Achsbeschriftung ihr haben wollt.
 +
 
 +
Was wir messen sind in diesem Fall Bytes.
 +
 
 +
Komfortablerweise rechnet Grafana die 33737355264 Bytes direkt in 32.59 GiB um.
 +
 
 +
Und damit uns nicht wie in einem Screenshot weiter oben so viele Nachkommastellen angezeigt werden, habe ich '''Decimals''' auf 2 reduziert.
 +
 
 +
 
 +
Zuletzt könnt Ihr den Titel der Query In dem Dritten Punkt '''General''' anpassen.
 +
 
 +
 
 +
[[File:Grafana8.png]]
 +
 
 +
 
 +
Der unterste Punkt, der mit der Glocke ist für das Alerting relevant.
 +
<br />
 +
 
 +
= Alerting =
 +
Grafana ist in der Lage Alarm zu schlagen, wenn bestimmte Werte einen vorher definierten Schwellwert überschreiten.
 +
 
 +
Hierzu muss zunächst definiert werden, wer im Falle eines Alarms wie benachrichtigt wird.
 +
 
 +
Geht dazu links auf '''Alerting > Notification channels''' und definiert einen Notifikationskanal.
 +
 
 +
Dort können (kommaspariert) Mail Adressen hinterlegt werden.
 +
 
 +
[[File:Grafana9.png]]
 +
 
 +
 
 +
So nun haben wir definiert, '''wer wie''' oft kontaktiert wird, aber noch nicht das wichtigste... '''wann'''?
 +
 
 +
Schauen wir uns also mal das Monitoring an, mit dem der Speicherplatzverbrauch der Root Pratition (/) auf unserem Hypervisor überwacht wird.
 +
 
 +
Beachtet, dass es '''Query B''' ist, welche '''used''' abfragt.
 +
 
 +
[[File:Grafana11.png]]
 +
 
 +
 
 +
Gehen wir jetzt links auf den Alerting Berech der Query und schauen uns ein Paar dinge genauer an.
 +
 
 +
Die Regel besagt, dass jede Minute eine Überprüfung passieren soll. ('''Evalueate every 1m''')
 +
 
 +
Das '''For 5m''' besagt, dass bei eines auslösens des Alarms der Status erstmal von '''OK''' auf '''PENDING''' wechselt.
 +
 
 +
Erst wenn er '''für 5 Minuten''' Alarm geschlagen hat, soll wirklich ein alarm ausgelöst werden.
 +
 
 +
 
 +
Schauen wir uns nun den Tatsächlichen Alarm an.
 +
 
 +
Definiert ist, dass der Durchschnittliche Wert ('''avg''' = average) zwischen jetzt ('''now''') und  der '''Query B ('''siehe oben)
 +
[[File:Grafana10.png]]
 +
 
 +
 
 +
 
 +
<br />
 +
=Prometheus=
 
[https://prometheus.io/ Prometheus].
 
[https://prometheus.io/ Prometheus].

Revision as of 18:41, 27 May 2020

Grafana Monitoring

In der HZW Umgebung läuft auf den Linux VMs der Telegraf Service.

Dieser sammelt Informationen wie CPU Load, Plattennutzung etc. ein und schreibt sie in eine auf der vm_grafana gehostete InfluxDB.


Diese InfluxDB wird als Datenquelle an Grafana angeschlossen, einer Datenvisualisierungsplattform.

Unser Grafana ist unter https://grafana.hackzenwerk.org gehostet.



Schematische Darstellung der Funktionsweise

Grafanamon.png



Informationen Grafana einsehen

In Grafana werden Informationen in Boards abgebildet, welche mehrere Dinge in einer übersicht zusammenfassen.

Wählt nach dem Login auf der linken Seite Dashboards > Manage aus um eine Liste der verfügbaren Boards anzuzeigen.

In dem Board Telegraf - system metrics sind die Metriken der virtuellen Maschinen zu finden.

Grafana1.png


In diesem Board könnt Ihr in der Kopfzeile den Server auswählen, zu dem Ihr Statistiken einsehen wollt.

Wählt oben Rechts einen Zeitrahmen aus, zu dem Ihr informationen haben wollt.


Grafana2.png

Telegraf Konfiguration

Die Konfiguration von Telegraf, also die Einstellungen was wie eingesammelt werden soll, geschieht unter /etc/telegraf/telegraf.conf

Ich werde hier in dem Artikel nicht alle Settings dieser Konfig durchgehen, dafür ist die offizielle Dokumentation da.

Allerdings kann ich ein paar exemplarische Beispiele geben.


Die im oberen Screenshot zu sehenden CPU Statistiken liegen folgender Config zugrunde.

[[inputs.cpu]]
 percpu = true
   totalcpu = true
   collect_cpu_time = false
   report_active = false

Das die Daten in der InfluxDB laden wird durch folgende config erreicht.

[[outputs.influxdb] 
 database = "telegraf"
 urls = [ "http://IP:PORT" ]
 username = "USERNAME"
 password = "PASSWORD"

Welche Plugins input / output Plugins es gibt findet ihr hier.


Wie die Daten in der InfluxDB aussehen

Daten werden in folgendem Format in der InfluxDB Datenbank abgelegt

[Messung] [Key=Value] [Timestamp]

Ihr könnt euch mit telegraf --test auf einer der VMs eine liste der eingesammelten Werte anzeigen lassen.

Das macht das ganze etwas verständlicher.

ori@vm_bigblue:~$ telegraf --test | grep mem

mem,host=big blue active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i 1590593128000000000

Zerlegen wir das mal in seine Teile.

Alles bis zum ersten Blankspace ist die Messung.

mem,host=big blue

Alles weitere bis zum nächsten Blankspace sind Kommaseparierte Key=Value Pairs.

active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i

Und ganz am Ende kommt ein epoch Zeitstempel (Millisekunden seit dem 01.01.1970)

1590593128000000000

Siehe auch meinen Blogartikel Daten per InfluxDB in Grafana abbilden.

In Grafana sieht das ganze dann so aus.

Grafana3.png


Wie kommen wir jetzt von den Rohdaten in der Datenbank zu dieser ansicht? --> Wir bauen eine Query.

Eine Query Bauen

Um eine eigene Query zu bauen, klickt zunächst in einem Board oben rechts auf Add panel und dann auf Add Query.

Grafana4.png


Ihr könnt auch eine bestehende Query verändern (edit), oder sie kopieren und dann verändern (duplicate).

Grafana5.png


Der Obere Teil der Ansicht des Query Editors ist eine Echtzeitanzeige eurer Query.

Wenn Ihr etwas verändert, wird es dort direkt angezeigt.

Alle Änderungen nehmt ihr in der unteren Hälfte vor.

Die Datenquelle der Query wird bei Query eingestellt, in unserem Fall die InfluxDB.


Schauen wir uns jetzt die Memory Messung aus dem Oberen Beispiel nochmal an.

Ein einzelner Datenpunkt in der Datenbank sieht folgendermaßen aus.

mem,host=big blue active=3638714368i,available=30378135552i,available_percent=90.04302594049359,buffered=165367808i,cached=1566494720i,commit_limit=16868675584i,committed_as=7673380864i,dirty=1486848i,free=29079941120i,high_free=0i,high_total=0i,huge_page_size=2097152i,huge_pages_free=0i,huge_pages_total=0i,inactive=711901184i,low_free=0i,low_total=0i,mapped=360079360i,page_tables=24858624i,shared=39677952i,slab=171921408i,sreclaimable=130408448i,sunreclaim=41512960i,swap_cached=0i,swap_free=0i,swap_total=0i,total=33737355264i,used=2925551616i,used_percent=8.671549957331,vmalloc_chunk=0i,vmalloc_total=35184372087808i,vmalloc_used=0i,wired=0i,write_back=0i,write_back_tmp=0i 1590593128000000000

Die Query die wir also schreiben holt sich daten aus der [Messung] mem.

SELECT [...] FROM "mem"

Die Daten die wir haben wollen sind "total" und "used". Die Funktion mean() gibt uns den durchschnittlichen Wert (Value) des Keys "total" zurück.

total=33737355264

"Durchschnittlicher Wert" ist hier abhängig von dem aktuellen Zeitabschnitt, den Ihr euch anseht.

Wenn Ihr die Statistiken von zwei Jahren betrachtet, werden einzelne kurze Peaks von ein Paar Minuten über diese Funktion rausgerechnet.


Grafana6.png


Nun woher weiss nun aber Grafana, worum es sich bei dem ausgelesenen Wert 33737355264 handelt?

Garnicht. Wir müssen selbst defnieren, was das ist.

Dazu wechseln wir neben der Query auf den nächsten Punkt.

Grafana7.png

Hier könnt zum einen definieren, wie die Query aussehen soll (fancy) und welche Achsbeschriftung ihr haben wollt.

Was wir messen sind in diesem Fall Bytes.

Komfortablerweise rechnet Grafana die 33737355264 Bytes direkt in 32.59 GiB um.

Und damit uns nicht wie in einem Screenshot weiter oben so viele Nachkommastellen angezeigt werden, habe ich Decimals auf 2 reduziert.


Zuletzt könnt Ihr den Titel der Query In dem Dritten Punkt General anpassen.


Grafana8.png


Der unterste Punkt, der mit der Glocke ist für das Alerting relevant.

Alerting

Grafana ist in der Lage Alarm zu schlagen, wenn bestimmte Werte einen vorher definierten Schwellwert überschreiten.

Hierzu muss zunächst definiert werden, wer im Falle eines Alarms wie benachrichtigt wird.

Geht dazu links auf Alerting > Notification channels und definiert einen Notifikationskanal.

Dort können (kommaspariert) Mail Adressen hinterlegt werden.

Grafana9.png


So nun haben wir definiert, wer wie oft kontaktiert wird, aber noch nicht das wichtigste... wann?

Schauen wir uns also mal das Monitoring an, mit dem der Speicherplatzverbrauch der Root Pratition (/) auf unserem Hypervisor überwacht wird.

Beachtet, dass es Query B ist, welche used abfragt.

Grafana11.png


Gehen wir jetzt links auf den Alerting Berech der Query und schauen uns ein Paar dinge genauer an.

Die Regel besagt, dass jede Minute eine Überprüfung passieren soll. (Evalueate every 1m)

Das For 5m besagt, dass bei eines auslösens des Alarms der Status erstmal von OK auf PENDING wechselt.

Erst wenn er für 5 Minuten Alarm geschlagen hat, soll wirklich ein alarm ausgelöst werden.


Schauen wir uns nun den Tatsächlichen Alarm an.

Definiert ist, dass der Durchschnittliche Wert (avg = average) zwischen jetzt (now) und der Query B (siehe oben) Grafana10.png



Prometheus

Prometheus.