Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Grafana – Monitoring Suite mit Docker und Traefik installieren

Eine der ältesten Fragen der Menschheit: Geht im Kühlschrank wirklich das Licht aus, wenn man die Türe zu macht?

Generationen von Philosophen und Forschern haben sich an diesem Paradoxon schon die Zähne ausgebissen. Und uns geht es da mit unseren Servern nicht viel besser… Mittels „htop“ oder „docker stats“ können wir uns freilich anzeigen lassen, was *genau jetzt* auf der Maschine los ist. Aber nachdem wir uns ausgeloggt – also mataphorisch „die Kühlschranktür zugemacht“ – haben? Was treibt die Maschine so ganz alleine ohne uns den lieben langen Tag?

„Fear you not“: Dafür gibt es Monitoring Tools. Nur normalerweise braucht die unser „Otto Normal-Admin“ nicht. Weil die meist im Enterprise-Segment angesiedelt, höllisch zu konfigurieren, schweineteuer und nicht ganz ungefährlich sind, wenn man die Dinger einfach so laufen lässt. Eins der Systeme, wo ich gelegentlich arbeite, wird mit Nagios verwaltet. Einige setzen auf proprietäre Lösungen, die nur bei einem Ausfall alarmieren, aber nichts aufzeichnen. Ich meine… Wer von uns verwaltet schon Hochverfügbarkeits-Server? Da sind wir dann schon wieder bei Clustern und weit jenseits meiner Besoldungsklasse.

An dieser Stelle wurde ich von meinen Lesern auf „Grafana“ aufmerksam gemacht. Das Tool an sich kann „nur“ Zahlenreihen schön grafisch darstellen. Zusammen mit den geeigneten Datenquellen wird aus dem Teil aber eine richtige Monitoring-Lösung. Also: Let’s fetz?

Let’s!

Zu genau dem Thema gibt es interessanterweise schon zwei Anleitungen, die aufeinander aufbauen:
https://goneuland.de/grafana-mit-docker-compose-und-traefik-installieren/
https://teqqy.de/docker-monitoring-mit-prometheus-und-grafana/

Als ich die beiden Seiten so gesehen hab war ich froh, dass ich nicht darauf gestoßen bin, bevor ich mit meinem „Projekt Rootserver“ begann. Sonst hätte ich es mit Sicherheit gelassen. Wow, sind die gut!
Danke auf jeden Fall für die umfangreiche Vorarbeit. Da ist schon so gut wie alles drin, um damit loslegen zu können…

Fun Fact: Was die wenigsten über mich wissen dürften ist, dass ich in meiner wichtigsten Arbeit „Optimierer“ bin. Man drückt mir eine Software in die Hand und lässt mich damit machen. Nach mehreren Tagen im Bunker komm ich dann mit einer Liste zurück, was man aus meiner Sicht ändern oder verbessern sollte, um das Teil schöner, angenehmer und intuitiver zu gestalten. Ich schleife Ecken ab und Kanten rund. Ich mach praktisch das Gegenteil von der Quadratur des Kreises. Damit verdiene ich den Großteil meiner Brötchen…

Will sagen: Wenn ich im Endeffekt nur die beiden Tutorials auf die Gegebenheiten unserer Installation angepasst hätte und es das gewesen wäre, würde ich hier einfach auf die beiden verlinken, ein paar Worte darüber verlieren, und gut ist. Allerdings erweitern wir die Anleitungen gleich noch um ein paar wichtige Punkte, nachdem ich ein wenig mit der Grafana-Installation spielen konnte. Dabei ist nämlich mein angeborener „optimier-Trieb“ reingekickt:

  • Die Monitoring-Daten schreiben wir außerhalb der Container direkt auf unser Host-System.
  • Wir lassen die Daten beim Schreiben automatisch komprimieren.
  • Statt der 15 Tage möchten wir vier Monate lang auf unsere aufgezeichneten Daten zurückgreifen, bevor sie gelöscht werden.
  • Irgendwie wird die Prometheus-Config bei beiden Tutorials nicht richtig eingebunden? Kann aber auch an meiner Installation liegen, dass das Fehler im Log geschmissen hat…
  • Der cAdvisor Container von Google erzeugt eine beachtliche Dauerlast auf unserem System. Da können wir mit Feintuning an der Config ein wenig gegensteuern und 5% Leistung einsparen. Trotzdem einer der Gründe, warum ich Monitoring nicht unbedingt für den Dauerbetrieb einsetzen würde. Vor allem auf schwachen Servern.

Voraussetzungen

Für dieses Tutorial müssen die folgenden Voraussetzungen erfüllt sein:

Grafana braucht zum Laufen nur das Basissystem mit Docker und ein installiertes Traefik v2. Wir kommen ohne unsere MariaDB-Datenbank aus, weil sämtliche Daten von Prometheus gespeichert werden.

Ebenso brauchen wir keine Images bauen, denn die von den Machern zur Verfügung gestellten Images funktionieren…

Grafana Installation

DNS einrichten

Wie jede unserer Anwendungen brauchen wir auch für Grafana eine Adresse, unter der wir den Dienst später aus dem Internet erreichen können. Für dieses Beispiel wähle ich (wenig überraschend) grafana.xp-server.de…

Trag die Domain Deiner Wahl bei Deinem DNS-Anbieter ein und lass sie auf den Server zeigen.

Verzeichnisse und Dateien anlegen

Grafana benötigt als erste Anwendung, bei der ich das gesehen hab, die Angabe von User-IDs in der docker-compose.yml Datei. Die Daten-Verzeichnisse bekommen über „chmod“ die gleiche User-ID zugewiesen.

Ich setze bei mir „xp.“ vor den Verzeichnisnamen. Damit unterscheide ich meine Server, wenn ich ein zentrales Backup ziehe. Denn wenn das Verzeichnis auf jedem Server gleich lauten würde und ich nicht aufpasse, kopiere ich die Inhalte dann auf meinem Rechner zusammen. Was nicht Sinn der Sache ist. Du kannst das übernehmen, ändern oder weglassen. Das ist nur wegen meinem Backup-Konzept. Aber schaden kann’s nicht ^^

mkdir -p /var/xp.grafanadata/{grafana,prometheus}
chown -R 472:472 /var/xp.grafanadata
mkdir -p /var/www/grafana/{grafana,prometheus}

wget -qNP /var/www/grafana/grafana/ https://raw.githubusercontent.com/cbirkenbeul/docker-homelab/master/monitoring/grafana/dashboard.json

wget -qNP /var/www/grafana/prometheus/ https://raw.githubusercontent.com/cbirkenbeul/docker-homelab/master/monitoring/prometheus/prometheus.yml

Inhalt der prometheus.yml-Datei:

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
      monitor: 'homelab'
rule_files:
scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['mon_node-exporter:9100']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['mon_cadvisor:8080']

Hier werden die beiden „Jobs“ erstellt und die Verbindung zu den Containern festgelegt, die gleich in der docker-compose.yml gestartet werden. Einmal der „node-exporter“ und dann noch der „cadvisor“. Der node-exportet holt sich Daten vom Host-System, während der cAdvisor ein paar Kennzahlen unserer Docker-Container ausliest.

Anzeige *

10 Kommentare zu „Grafana – Monitoring Suite mit Docker und Traefik installieren“

  1. Tolle Sache…
    Sinvolle wäre es noch wenn man Benachrichtigt(Mail) wird wenn ein Wert wie beispielsweise CPU oder Memory überschritten wird.
    Hast du das schon ausprobiert?

    1. Peter Fiedler

      Alerting hab ich noch nicht ausprobiert.

      Die haben das ganz schön beschrieben:
      https://www.metricfire.com/blog/grafana-alerting

      Interessant wäre, ob die Mail wirklich auslöst.
      Leider hab ich momentan „die Hütte voll“ und kann mich deshalb nur stiefmütterlich um Projekt-Rootserver kümmern. Aber ich schreib das auf meine ToDo, dass wir das auch mal getestet bekommen.

      Wünsch Dir einen schönen Sonntag!
      Peter.

      1. Ich habe die passende Datei gefunden: /etc/grafana/grafana.ini
        Dort den jeweiligen SMTP-Host definieren und in grafana noch den Bereich Alerts konfigurieren.

        1. Peter Fiedler

          Super, vielen Dank, Olaf!
          Wenn die Hütte nicht mehr so lichterloh brennt, bau ich das nach und füge das direkt ins Tutorial ein.
          Liebe Grüße
          Peter.

  2. Danke für das super Tutorial. Hat einwandfrei geklappt.

    Grafana bietet zwar eine Art bruteforce Schutz für den Login. Allerdings nur, wenn der Angreifer den richtigen Benutzernamen benutzt. Ansonsten werden die Anfragen weiter verarbeitet.

    Ich persönlich habe noch zusätzlich per fail2ban abgesichert. Gibt mir persönlich noch ein bisschen mehr Ruhe beim Schlafen. :)

    Ansonsten wie immer sehr gut gemacht.

    Gruß
    Jan

    1. Peter Fiedler

      Freut mich, dass es wieder geklappt hat, Jan!

      Wenn Du Lust hast und es teilen möchtest würde ich mich – und viele Leser sicher auch – sehr über Deine Installation von fail2ban freuen. Das hatte ich früher auf der „Bare Metal“ Kiste auch am Laufen und konnte wirklich ruhiger schlafen… Einfach an fiedler@cpf.de.

      Wünsch Dir noch einen schönen Sonntag!
      Peter.

    2. Eine Idee wäre es auch noch fail2ban über grafana zu monitoren. Um Zugriffe beispielsweise einzusehen. Hast du das vielleicht bei dir schon umgesetzt und kannst Erfahrungen teilen?
      Peter vielleicht eine Idee für dich?

      1. Peter Fiedler

        Hi Juno,
        die Idee ist gut. Allerdings müsste man dazu den Output der fail2ban-Log-Datei irgendwie in Prometheus bekommen.

        Aber „first things first“ – ich muss erst mal fail2ban überhaupt vernünftig zum Laufen bringen, bevor wir da Daten rausziehen können ^^
        Beste Grüße
        Peter.

          1. Peter Fiedler

            Interessantes Script. Schau ich mir an. Könnte klappen, wenn der mon_node-exporter Container den Input frisst…

            fail2ban „abschließend“ zu behandeln wird mir einiges an Zeit und Kraft abtrotzen. Ich werde daran arbeiten, kann Dir aber nichts versprechen. Also weder „ob“ noch „wann“.
            Ich mein, SSH mit fai2ban absichern – geschenkt. Aber die Logs der anderen Anwendungen aus den Container ziehen und dafür eigene Regex-Regeln schreiben? Wenn Du mich hören könntest, würdest Du mich jetzt in binär weinen hören…

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top