IT-Infrastructure-Monitoring @home

Meine IT-Infrastruktur bei mir zu Hause wächst. „My home is my Rechenzentrum“ oder so. Leider kommt es auch immer wieder mal zu scheinbar unerklärlichen Verbindungsabbrüchen im WLAN oder auch im LAN, wenn mal ein Switch ausgestiegen ist.

Damit ich nicht alle beteiligten Komponenten von Client bis zum Router mittels Trial-and-Error durchtesten muss, habe ich mir ein rudimentäres Monitoring zusammengebaut.

Hauptkomponente ist hierbei Prometheus, hübsch aufbereitet und dargestellt mit Grafana. Als Hardware-Plattform habe ich einen Raspberry Pi 4B mit 4GB Ram ausgewählt, mit Docker bestückt und begonnen, die Services zu monitoren.

Doch eins nach dem anderen.

Der Raspberry Pi wird mit einem Raspbian-Image der Wahl bestückt, ich habe das Raspberry Pi OS (64-bit) genommen, das Raspberry Pi OS Lite tut es sicherlich auch. Unter Windows, Mac OS und Ubuntu geht das Bespielen der Micro-SD-Card sehr komfortabel mit dem Raspberry Pi Imager.

Nach der Grundkonfiguration (SSH nicht vergessen!) habe ich nach der sehr guten Anleitung auf Berrybase von Jörn Welse die Applikationen Docker, Portainer und Heimdall installiert und konfiguriert.

Damit existiert also eine Grundlage, um verschiedenste Services in Containern bereitzustellen (-> Docker) , diese mit einer GUI zu administrieren (->Portainer) und die resultierenden Service-Webseiten übersichtlich darzustellen (-> Heimdall).

Bezüglich des Monitorings habe ich mich für Prometheus entschieden und das Container-Image „ubuntu/prometheus“ vom Docker Hub gewählt. Den Port habe ich auf Standard (9090) belassen und so konfiguriert, dass der Port auf den Raspberry durchgereicht wird, ebenso auf Port 9090.

Als nächstes folgt die Installation der Container-Images „prom/node-exporter“ und „prom/snmp-exporter“. Hier habe ich auch die Standard-Ports 9100 und 9116 genutzt und an den Raspberry durchgereicht. Wenn alles gut gelaufen ist, kann man jetzt die Webseiten unter der IP-Adresse des Rasperrys und des passenden Ports (also 9090 für Prometheus selbst, 9100 für den Node-Exporter und 9116 für den SNMP-Exporter) aufrufen.

Prometheus Time Series

Sieht aber noch wenig spektakulär aus.

Um Metriken zu erhalten, muss ich im Falle des SNMP-Exporters sowohl die Adresse des zu monitorenden Geräts als auch das Modul angeben, welches ich mir ansehen möchte. Für Switche ist das standardmäßig ausgewählte „if_mib“-Modul sicher richtig, aber wenn man damit sein NAS monitoren möchte, braucht man andere Datenpunkte. In meinem Fall ist das ein Synology NAS und das Modul „Synology“ ist in der „snmp.yml“ (neben etlichen anderen) enthalten.

In dem File „prometheus.yml“ im Prometheus Container muss man jetzt die Jobs für den SNMP-Exporter anlegen, damit die Komponenten abgefragt werden können. Nach einem Neustart des Prometheus-Containers sollten dann auch die ersten Targets mit ihren Metriken sichtbar sein.

Da ich als Router eine Fritz!Box habe und diese etwas anders abgefragt wird als mit dem SNMP-Exporter, muss ich noch den fritzbox-prometheus-exporter installieren. Das Containerimage hierzu gibt es nicht auf Docker Hub, sondern auf ghcr.io. Dazu muss ich zunächst in Portainer die Registry anlegen, das geht über Settings -> Registries. Mit dem Button „+ Add registry“ und der Auswahl „Custom registry“ kann man dann einen Namen vergeben und die URL der Registry angeben.

Die neu angelegte Registry ist dann unter Images verfügbar und kann in dem Drop-down-Menü ausgewählt werden. Danach kann man das Image kaiehrhardt/fritzbox-prometheus-exporter:7c629ec pullen. Hierbei ist das Manifest für die zu installierende Architekturversion auch anzugeben, in meinem Fall eben 7c629ec für ARM64. Die Manifeste für weitere Architekturen findet Ihr auf der GitHub-Seite des Projektes fritzbox-prometheus-exporter von Kai Ehrhardt. Beim Erstellen des Containers bitte noch den Port 9042 freigeben, damit Prometheus die Daten abfassen kann.

Wichtig: Für das Funktionieren des fritzbox-exporters müsst ihr in eurer Fritzbox unter Heimnetz -> Heimnetzübersicht -> Netzwerkeinstellungen den Haken vor „Statusinformationen über UPnP übertragen“ setzen!

Die Konfiguration des fritzbox-exporters geschieht über Environment-Variablen, die folgenden Variablen müssen beim Erstellen des Containers in Portainer gesetzt sein:

GATEWAY_LUAURLhttp://IP-Adresse der Fritzbox
GATEWAY_URLhttp://IP-Adresse der Fritzbox:49000
LISTEN_ADDRESS0.0.0.0:9042
USERNAMEUsername auf der Fritzbox
PASSWORDzugehöriges Passwort auf der Fritzbox

Im prometheus.yml muss auch dieser Job angelegt werden, ich habe hierbei das scrape_interval und das scrape_timeout etwas großzügiger bemessen, weil das Abrufen der Daten von der Fritzbox auch mal mehr als die bei mir standardmäßig eingestellten 15 Sekunden dauern kann.

containerconfig_prometheus_fritzbox

Was jetzt noch fehlt, ist die Überwachung des Raspberry Pi selbst. Das wird mit dem node-exporter realisiert, dem man auch einfach einen Eintrag in der prometheus.yml spendiert:

containerconfig_prometheus_node-exporter

Damit wäre auf Seiten des Raspberrys und Prometheus bereits alles getan, einzig die SSL-Verbindung von / zu Prometheus steht noch aus. Ich möchte nämlich gerne auf die von Prometheus gesammelten Daten von aussen zugreifen, und da bevorzuge ich verschlüsselte Kommunikation. Glücklicherweise hat Prometheus eine Anleitung erstellt, wie man TLS mit Prometheus ans Fliegen bringt.

Ihr loggt euch auf der Shell des Prometheus-Containers ein und befolgt dort die Schritte aus der Anleitung „SECURING PROMETHEUS API AND UI ENDPOINTS USING TLS ENCRYPTION“. Danach startet ihr den Prometheus-Container neu, aber mit den Argumenten:

  --config.file=/path/to/prometheus.yml 
und
  --web.config.file=/path/to/web-config.yml

(wobei "path/to" natürlich durch euren Pfad zu den Dateien ersetzt werden muss.)

Weil Prometheus jetzt freundlicherweise den Datenverkehr verschlüsselt, müsst ihr in der prometheus.yml noch im Job Prometheus noch „scheme: https“ hinzufügen.

containerconfig_prometheus_ssl

Der nächste Schritt ist die Visualisierung mit Grafana. Ich habe mich dafür entschlossen, Grafana nicht lokal (neudeutsch „on-premise“) laufen zu lassen, sondern mich des kostenlosen Services von Grafana Cloud zu bedienen. Nach Registrierung bekommt ihr Zugriff auf Eure Grafana-Instanz unter https://[USERNAME].grafana.net, wo ihr euch eure Dashboards bauen könnt.

Zunächst einmal müsst ihr aber eure Datenquelle einrichten. Bei mir ist das der Raspberry, dessen Port 9090 ich über „Freigaben“ auf der Fritzbox noch aus dem Internet erreichbar machen muss.

Danach kann ich die Datenquelle in Grafana Cloud einrichten, dazu gehe ich in „Configuration -> Data sources“ und klicke auf den blauen „Add data source“-Button. In der Liste wähle ich „prometheus“ und gebe unter „HTTP“ die URL meiner Freigabe an.

Bei der Fritzbox gibt es dafür den DynDNS-Service „myfritz“, unter der mein Router und dessen Freigaben erreichbar sind. Solltet ihr keine Fritzbox haben, müsst ihr euch entweder um einen anderen DynDNS-Provider bemühen oder aber die Prometheus-Daten nicht von Grafana abholen lassen, sondern sie auf euren Grafana-Cloud-Account hochladen (push).

In der Sektion „Auth“ müsst ihr „Skip TLS Verify“ anhaken, weil das selbsterstellte SSL-Zertifikat nicht bei einer CA angemeldet ist. Das reicht für unsere Zwecke aber komplett aus.

Bei „Type and version“ wählt ihr noch „Prometheus“ aus und die von euch verwendete Version und mit „save and test“ könnt ihr überprüfen, ob Grafana Cloud Daten von eurer Prometheus-Instanz erhält.

Wenn alles gut ist, könnt ihr euch jetzt euer erstes Dashboard bauen. Da das ein recht aufwändiger Task ist, es eine aktive Community gibt und ihr wahrscheinlich bei den meisten Appliances nicht die ersten seid, die das mit Grafana überwachen wollen, bestehen gute Chancen, dass ihr ein passendes Dashboard auf GrafanaLabs findet. Der „Node Exporter Full“ hat die ID 1860, der „Internet Dashboard Prometheus“ für das Monitoring der Fritzbox die ID 13848 und für unsere SNMP-Devices bietet sich das Dashboard „SNMP Stats“ mit der ID 11169 an.

Während bei dem Fritzbox-Dashboard an sich alles out-of-the-box laufen sollte, sind bei den Node-Exporter und Snmp-Exporter Dashboards noch ein paar Anpassungen vorzunehmen.

Node-Exporter: Wenn ihr mehrere Jobs für den Node-Exporter habet (also mehrere Rechner überwachen wollt), müsst ihr im Dashboard oben unter „job“ den passenden Namen aus dem Drop-Down-Menü auswählen.

SNMP-Exporter: Hier müsst ihr ebenso den betreffenden Job-Namen auswählen und ggf. noch Filter anwenden, um nur die Daten zu sehen, die euch interessieren, z. B. interessieren mich bei meinem Cisco-Switch zwar die IfNames GigabitEthernet1 – 10, nicht aber LAG1 -LAG0. Die werden durch Filter herausgenommen.

Cisco SG300 SNMP - Dashboards - Dashboards - GrafanaCiscoFilterDie resultierenden URLs legt ihr euch am besten als Bookmarks / Favoriten ab, da die Dashboards selber sich die Filter nicht merken, sondern in der URL hinterlegen: https://[USERNAME].grafana.net/[ID]/cisco-sg300-snmp?orgId=1&refresh=10s&var-Job=Cisco-SG300&var-Filters=ifName%7C%21%3D%7CLAG1

Jetzt haben wir ein paar Applikationen, die wir in Heimdall schön übersichtlich darstellen können. Dazu ruft ihr Euren Host mit https und der Portnummer 8443 auf und klickt auf das Listen-Icon im Seitenmenü:

Heimdall

Unter „Application Type gebt ihr für die Grafana-Dashboards „Grafana“ an und in der Mitte unter URL gebt ihr die Adresse des Dashboards an. Vergebt noch einen sprechenden Titel und ihr habt eure erste Applikation in Heimdall veröffentlicht. Analog verfahrt ihr mit den weiteren Dashboards und was ihr sonst noch im Schnellzugriff haben wollt – bei mir sind das die Konfigurationsseiten der überwachten und sonstigen Applikationen / Services, die ich öfters mal aufrufe.

Angst statt Freiheit

Am Samstag brachte ich ein paar leere Flaschen zum dafür bereitgestellten Altglascontainer.

Man muss dazu wissen, ich lebe in Berns Altstadt, im Weltkulturerbe.
Der Flaschencontainer gehört natürlich nicht zum Weltkulturerbe, daher muss ich dafür auch ein paar Schritte laufen, eine Treppe hinuntergehen und mehrere Gassen überqueren.

An dem Treppenabsatz kurz vor einem der ältesten Brunnen Berns staunte ich nicht schlecht über die Ansammlung von Polizisten in Kampfmontur. Mit bestem Blick auf den Flaschencontainer.

„Naja“, dachte ich mir, „die checken bestimmt, ob ich meine Flaschen auch zum richtigen Zeitpunkt wegwerfe, und nicht etwa ausserhalb der gestatteten Uhrzeiten“. Aber eigentlich gibt es dazu das hiesige Äquivalent des Ordnungsamtes, in Zivil. Der kann dich denn auch schon mal bei Flaschenabwurf zur falschen Zeit büssen (lassen). Kostet dann halt ein paar Fränkli.

Tatsächlich haben die sich auch nicht die Bohne für meinen Glasmüll interessiert. Unten am Container angekommen, bemerkte ich eine weitere Gruppe Polizisten vor der Kirche, auch in Kampfanzügen.

„Komisch, was schützen die denn hier eigentlich?“ Um es kurz zu machen, ich habe nicht gefragt.
Zu unheimlich dünkte mir die Ansammlung und Präsentation brachialer Staatsgewalt. Ich fühle mich nie so recht sicher, wenn ich Polizei in Riot-Gear sehe.
Könnt‘ ja was passieren.

Heute habe ich dann in der Zeitung gelesen, warum eigentlich die gesamte Innenstadt der Hauptstadt der freiheitsliebenden Schweiz, also das gesamte Weltkulturerbe von Bern, von Staatsdienern in Vollrüstung geprägt war.
Warum an jeder Bücke, in den Haupt- und Nebengassen, im Bahnhof und eben auch am Parkhaus, der Kirche und der Altglasentsorgungsstelle deutlich wehrhafte Präsenz gezeigt wird.

Es gab ein Familienfest.

Auf dem Bundesplatz.

Mit mehreren Tausend Personen.

Ca. 500 Meter Luftlinie von meinem Zuhause (und ca. 750 Meter von besagtem Flaschencontainer).

Eigentlich war das ganze auch ein Wahlanlass, und kein Familienfest.

Von der SVP.

Das sind die mit den lustigen Plakaten zum Thema Minarett oder Masseneinwanderung.

Also die, die die Ängste in den unbescholtenen Schweizern schüren und damit sehr erfolgreich auf Stimmenfang gehen.

Und die, die die traditionellen Werte der Familie in der Schweiz bewahren wollen.

KKK – Kinder, Küche, Kirche

Die, die dafür kritisiert werden, sämtliche Bosnier als Schwerverbrecher darzustellen (Die Kritik daran kommt übrigens von der Kirche).

Und die, die Plakate im gesamten Stadtbild aufhängen, die in ihrer Bildsprache allzusehr an Splitterparteien in Nachbarländern erinnern.

Also die jedenfalls, die fatalerweise auch noch ca. 30% Rückhalt in der Bevölkerung haben weil – siehe oben – Ängste vor Unbekanntem leicht hervorzurufen sind.

Und die schaffen es, den Polizeipräsidenten zu Bern genug in Schweiß zu bringen, als dass er etwa 1000 Beamte aufbietet, dazu Einsatzwagen, Hubschrauber, die zum Familienfest über dem Bundesplatz stehen, Wasserwerfer, Scharfschützen auf den Dächern – Moment, das war übertrieben.
Ich kann nur von Feldstechern reden, nicht von Gewehren.

Die Teilnehmer des Familienfestes marschieren denn auch durch die Schauplatzgasse gen Bundesplatz, der völig abgesperrt ist. Um in das tümelige Treiben hineinzukommen, muss man sich eventuell vorher ausgewiesen haben, Taschen und Rucksäcke werden auch schon mal inspiziert.
Von der Polizei.
Aber das war nur die erste Hürde.

Die SVP hat nämlich keine Kosten und Mühen gescheut und zusätzlich zu den etwa 1000 Beamten den privaten Sicherheitsdienst „Broncos“ – der Name ist Programm – mit der Kontrolle der Besucher beauftragt.
Damit nur linientreue Familienmitglieder als Jubelperser den Herren Blocher, Brunner, Maurer lauschen können.
Eine Unruhestifter ist wohl durchgerutscht, er präsentiert bei der Rede von Herrn Brunner ein Plakat mit der Aufschrift „Halt’s Maul, Schweiz!“ – wird dann auch sorgsam von den Broncos entfernt und der Polizei übergeben.

Warum eigentlich? Weil er seine Meinung auf dem Bundesplatz kundgetan hat und das der Mehrzahl der Anwesenden nicht schmeckte?

Ist das wirklich die Freiheit, die die Eidgenossen damals meinten?

Oder ist es die Angst, die regiert?
Die Angst vor dem Fremden, vor Wandel, vor Fortschritt?

Im Verlaufe des Tages wurden im gesamten Innenstadtbereich 55 Personen festgenommen und auf die Wache gebracht. Bei einigen wurden Messer gefunden, bei anderen Spraydosen, auch Reizstoffe.

Gleichzeitig wird in der Hauptstadt des großen nördlichen Kantons, in Berlin, eine Demonstration zum Thema „Freiheit statt Angst“ durchgeführt.

Hier in Bern war es leider „Angst statt Freiheit“.

Präsentiert von WordPress & Theme erstellt von Anders Norén