Monitoring von Containern mit Prometheus und cAdvisor – mit Vorsicht zu geniesen

Monitoring ist ein wichtiges Instrument als DevOp, in der Regel bekommt man so schon mit, dass ein Service nicht ganz rund läuft, bevor es Probleme für den Kunden bedeutet. Genauso kündigen sich ausfallende oder knapper werdende Ressourcen in der Regel an und treten nicht „urplötzlich“ auf.

Eines der Standard-Werkzeuge für diesen Fall ist Prometheus, das ein recht ausgefeiltes Monitoring bietet. Häufig wird es im Einsatz mit Containern durch cAdvisor ergänzt, damit erhält man auch einen Einblick in die einzelnen Docker-Container, welche auf dem System laufen. Für das Host-System gibt es von Prometheus den node-exporter.

Was man aber auch immer auf dem Schirm haben sollte: Im Wesentlichen sind die Agenten (bzw. Exporter) einfache Transformationsmaschinen, welche aus der Vielzahl von Informationen, die ein jedes System bereit stellt, ein standardisiertes Format machen und es ausgeben. Im konkreten Fall erfolgt die Ausgabe per http bzw. hoffentlich per https. Womit wir auch schon beim Knackpunkt der Geschichte wären: Man kommt sich an dieser Stelle wieder ins „gute alte Internet“ zurück versetzt vor, in dem Sicherheit kein große Rolle gespielt hat und alles mehr oder weniger „frei“ zugänglich war. Das zeigt sich leider bereits in den Tutorials: dort wird erst einmal beschrieben, wie man einen Service generell aufsetzt, aber es fehlt der eindeutige Hinweis, wie man die Dinge hinterher auch so vernagelt, dass nur berechtigte Personen das mitlesen können bzw. überhaupt an die Informationen heran kommen können. Man möchte doch nicht gerade exponieren, was auf einem Server alles an Containern läuft, das sollte eigentlich mittlerweile jeder Hobby-Admin auf dem Schirm haben, im professionellen Bereich ist es auch eine Selbstverständlichkeit.

Schaut man sich die Dokumentation insbesondere der Exporter an, so bekomme zumindest ich schon wieder ein schlechtes Gefühl: Vielfach wird darauf verwiesen, das Abschirmen der Container per Reverse-Proxy zu lösen. Das ist sicherlich ein technisch gangbarer Weg, aber es zeigt auch wieder ein wenig die Einstellung der Macher dieser Software: „Not my business“ bzw. „not implemented here“. Es gibt in beiden Fällen zwar Möglichkeiten, TLS und auch zumindest Basic-Auth zu implementieren, aber das ist eher ein Tropfen auf den heißen Stein. Den Vogel (passenderweise ist das Maskottchen eine Eule) schießt cAdvisor ab: Man kann zwar Basic-Auth setzen, aber es bezieht sich nur auf die Endpunkte der GUI, die API und die maschinenlesbaren Metriken sind weiterhin ohne jeglichen Passwort-Schutz abrufbar, so lange man die URL kennt (oder durchprobiert). Hierzu gibt es einen interessanten Artikel von TrendMicro.

Die Lösung, die wieder häufig propagiert wird, ist: Lass uns eine Sicherheitssoftware davor schalten, in diesem Fall einen Reverse-Proxy, der kann dann auch die Authentifizierung und das TLS übernehmen. Das klingt im ersten Moment ja noch recht brauchbar, aber es bringt eine weitere Komponente ins Spiel, die man warten muss. Bei vielen Installationen, die sich einen Docker-Host teilen, ist ein Loadbalancer / Reverse-Proxy aber ohnehin installiert. Häufig wird in diesem Zusammenhang Traefik eingesetzt, das hat den Vorteil, dass es sich eigentständig über kommende und gehende Webservices / Container informiert und die Konfiguration dazu aus den Labels des Docker-Containers ableitet. So hat man immerhin den Teil der Reverse-Proxy-Konfiguration für den eigenen Service noch ein Stück weit im Griff.

Ein Compose file sieht dann beispielsweise wie folgt aus:

name: cadvisor
services:
  cadvisor:
    image: gcr.io/google-containers/cadvisor:latest
    container_name: cadvisor
    labels:
      - traefik.enable=true
      - traefik.docker.network=traefik
      - traefik.http.routers.cadvisor.entrypoints=web
      - traefik.http.routers.cadvisor.rule=Host(`cadvisor.example.org`)
      - traefik.http.services.cadvisor.loadbalancer.server.port=8080
      - "traefik.http.middlewares.cadvisor.basicauth.users=USER:PASSWORD"
      - traefik.http.routers.cadvisor.middlewares=cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    restart: always
    environment:
      - no_proxy="localhost,127.0.0.1"
      - HTTP_PROXY=
      - http_proxy=
    networks:
      - cadvisor
      - traefik
networks:
  cadvisor:
    name: cadvisor
  traefik:
    external: true

Dabei gibt es einige kleine Fallstricke, die man beachten muss:

Das Passwort muss als Hash eingetragen werden, damit es im YAML nicht zerbröselt wird beim Interpretieren, muss man die „$“ verdoppeln (Escaping). Sonst fühlt sich der YAML-Interpreter angesprochen und versucht die Variablen zu substituieren, was nicht funktioniert und im Zweifel auch erst einmal nicht ganz „eindeutige“ Fehlermeldungen nach sich zieht.

Sofern man einen Proxy einsetzt und diesen für den Dockerhost entsprechend konfiguriert hat, so muss man mit dem cAdvisor aufpassen, dieser hat einen Health-Check per „wget“ implementiert. Allerdings ist es kein Standard-Wget sondern das aus Busybox. Das ignoriert leider die Umgebungsvariable „no_proxy“ ziemlich gekonnt, vorsichtshalber kann man sie setzen, aber man muss auch den Proxy deaktivieren, indem man die Variablen explizit auf einen leeren String setzt.

 Hat man diese beiden Fallstricke gemeistert, erkennt Traefik auch einen cAdvisor-Container richtig und man exponiert nicht mehr einfach mal so die ganzen Metriken nach draußen.

Ich erspare mir hier jetzt weitere Erläuterungen, wie es um Ende-zu-Ende Kommunikation und insbesondere bei gerouteten IPv6-Containern aussieht: Leider nicht wirklich gut, auch da muss man sich einen Reverse-Proxy davor bauen, den man eigentlich mit IPv6 nicht mehr nötig hätte.

Insgesamt täte es vielen Container-Entwicklungen mittlerweile echt gut, wenn Authentifizierung und TLS nicht immer als ein „Problem anderer Leute“ (Erklärung: https://hitchhikers.fandom.com/wiki/Somebody_Else%27s_Problem_Field) betrachten würden, sondern es endlich zum guten Standard wird, den man bei jeder Entwicklung zeitnah mitdenken sollte. Nahezu jedes brauchbare Framework bringt heute die passenden Tools dazu mit, man muss sich nur ein wenig damit beschäftigen.

 

 

Radurlaub 2024 – Tag 14 – von Hausen im Tal über Beuron, Baden-Baden und Rastatt nach Hause

Tageskilometer: 35km

Nachdem wir am Vortag nochmals einen prüfenden Blick auf unsere Planung, das Wetter und vor allem den Fahrplan geworfen haben, ist klar: Heute ist der letzte Urlaubstag auf dem Rad. Zusätzlich zu mehr als 60km bis Donaueschingen ist Regenwetter angekündigt und noch dazu ist die Bahnstrecke zwischen Baden-Baden und Rastatt wegen Bauarbeiten gesperrt. Der Schienen-Ersart-Verkehr nimmt aber keine Radler mit. Auch wird Armelle von Ihren Eltern abgeholt, sie haben ja noch einen weiteren Weg als wir zu bewältigen. Zum Abschluss gibt es nochmal ein großes gemeinsames Frühstück am Campingplatz „Wagenburg“ in Hausen im Tal.

Nachdem endlich alles auf den Rädern verstaut ist, geht es los. Erste Anlaufstelle ist der Bahnhof direkt in Hausen im Tal, dort stellen wir fest, dass wir ca. 2h warten müssten und da gerade ein Zug in die Gegenrichtung hält sehen wir auch: der Bahnsteig ist noch nicht barriere frei, der Einstieg in den Zug somit verdammt hoch. Da der Bahnhof wirklich nicht der Ort ist an dem wir uns lange aufhalten wollen, machen wir noch eine letzte Etappe bis Beuron durchs Tal. Das lohnt sich auf alle Fälle noch einmal, es gibt zwar wieder einige Steigungen zu bewältigen aber das Tal ist insgesamt recht malerisch und gut zu befahren. Continue reading

Radurlaub 2024 – Tag 13 – von Sigmaringen bis Hausen im Tal

Tageskilometer: 20km

Für heute steht eher eine kurze Etappe auf dem Programm, allerdings hat diese auch einiges Steigungen, wie wir dem Reiseführer entnommen haben. Die erste gibt es bereits wenige Kilometer nach dem Start ans ehemalige Kloster Inzigkofen. Das liegt malerisch auf einem Bergrücken, eine wahrlich schweißtreibende Angelegenheit. Zumal es ab dem Klosterhof immer noch leicht bergan geht. Dafür geht es anschließend auch gleich wieder sehr steil und in Serpentinen nach unten an die Donau. Mit dem Anhänger kann ich es leider nicht so laufen lassen, wie ich das gerne wollte. Immerhin sind die frisch eingebauten Bremsklötze jetzt auch wirklich zu etwas nütze.

Die Strecke führt uns nun durch den schwäbischen Grand Canyon, das Tal ist sehr eng aber auch sehr hübsch anzuschauen. Der Weg erklimmt daher teilweise die Flanken des Tals, was so auch im Reiseführer angekündigt war.

Continue reading

Radurlaub 2024 – Tag 12 – von Riedlingen bis Sigmaringen

Tageskilometer 32km

Nachdem es am Vortag Höhenmeter satt gab, geht es heut wieder ans Kilometermachen. Die Strecke ist diesmal wieder wunderbar flach. Riedlingen selbst lassen wir direkt nach dem Start hinter uns, ich hatte schon befürchtet, dass wir im Werksverkauf von Silit doch noch einen Schnellkochtopf zusätzlich einkaufen, ich wüsste aber ohenhin nicht, wo wir den noch unterbringen sollten, weder daheim im Schrank und schon gar nicht im Gepäck.

Unser erster Halt ist nach rund 9km, wir sind noch nicht einmal eine Stunde unterwegs. So flott kann man voran kommen, wenn es nicht ständig Steigungen gibt. Unser nächstes Ziel ist Mengen, dort stürmen wir den Edeka, um uns für den Tag und vor allem für das Mittagessen einzudecken. Am Ortsausgang von Mengen, in der Nähe des Freibads bietet sich eine Rastmöglichkeit, die wir nutzen. So wird das Gepäck gleich wieder ein wenig leichter.

Frisch gestärkt radeln wir weiter, die Strecke bleibt flach. Es wird fast schon langweilig. In Scheer fahren wir durch die Altstadt, als wir das unverkennbare Piepen eines Rauchmelders hören, im ersten Moment glaube ich noch, es wäre ein Fahrzeug mit Rückfahrwarner, aber es ist weit und breit kein Fahrzeug zu sehen. Als ehemaliger Helfer im Katastrophenschutz lasse ich derartige Dinge ungern auf sich beruhen und so gehe ich kurzerhand dem Geräusch nach. Der Alarm kommt aus einem ehemaligen Ladengeschäft, aber es ist alles verschlossen und kein Rauch oder Feuer zu sehen. Durch die Jalousien kann ich aber auch im Innenraum nichts erkennen. Also machen wir einmal das Spiel „in a small town where nothing really happens, we placed a button …“. Ich rufe kurzerhand die Feuerwehr, denn es könnte ja jemand im Innenraum liegen und irgendein Schwelbrand sein…

Continue reading

Radurlaub 2024 – Tag 11 – Rottenacker bis Riedlingen

Tageskilometer: 32km

Nachdem am Vortag die Strecke sehr angehm flach war, steht heute Kontrastprogramm an: direkt in Rottenacker geht es entlang der Straße nach oben. Es soll ein erster Vorgeschmack sein, auf das was da noch kommen wird.

Bis Munderkingen geht es dann wieder halbwegs von der Radwegführung. Munderkingen selbst liegt auf der Kuppe einer Donauschleife, es geht also unweigerlich wieder nach oben. Im Ort machen wir einen Stopp, um ein wenig Kultur in den Urlaub zu integrieren. Die Kirche ist hübsch anzuschauen, ebenso die drei Brunnen der Stadt. Vom Martinsbrunnen können wir die Kinder fast gar nicht loseisen.

Continue reading

Radurlaub 2024 – Tag 10 – von Ulm bis Rottenacker (Ehingen) entlang der Blau

Tageskilometer: 53km

Ab heute sind wir fünf Radler und wir haben eine vergleichsweise lange Etappe vor uns. Da wir Armelle auch ein Highlight der schwäbischen Alb zeigen wollen, wählen wir die Alternative entlang der Blau.

Wie fast jeden Tag, gibt es gleich auf den ersten Kilometern reichlich Höhenmeter, als wir die Bahnstrecke überwinden müssen. Immerhin wird danach die Strecke flacher. Auf einer gut ausgebauten Fahrradstraße geht es durch die Bebauung in Ulm. Unser erstes Ziel ist Blaustein, etwas lästig ist eine altmodische Auto-Kreuzung am Ortsausgang: ein typisches 60er-Jahre Konstrukt, bei dem Radfahrer und Fußgänger eher lästiges Beiwerk für den Verkehrsplaner waren. Dementsprechend geht es untendurch und um scharfe Kurven, immerhin keine Drängelgitter. Bis nach Blaustein wird die Strecke dann aber deutlich radfreundlicher und es geht immer in der Nähe der Blau entlang.

Continue reading

Radurlaub 2024 – Tag 9 – Stadtbesichtigung in Ulm

Für heute haben wir einen Ruhetag beim Radeln eingeplant, um uns Ulm anzuschauen und eine weitere Radlerin aufzunehmen. Armelle (aus Marions Verwandschaft) wird uns die kommenden Tage entlang der Donau begleiten, um ihre Kenntnisse in Deutsch und Landeskunde ein wenig aufzupolieren. Continue reading

Radurlaub 2024 – Tag 8 – von Sinnigen bis Ulm

Tageskilometer: 40km

Heute geht es weiter an der Iller entang, und stellenweise ist die Strecke schon fast langweilig. Es ist gut zu fahren auf dem Radweg, es geht immer ganz leicht bergab. Aber es mangelt an Abwechslung, da sind wir schon froh, dass es eine Fischtreppe zum Beobachten gibt, auch wenn mich die häufigen Stopps, die wir einlegen, ein wenig nerven. Ich würde gerne einmal auch wieder fünf Kilometer am Stück fahren. Aber es ist auch sehr warm und „die Sonne brennt uns sowas von auf die Mütze…“ Das Illertal ist fast in Nord-Süd-Richtung ausgebildet, somit haben wir den Mittag über auch keinen Schatten entlang des Wegs, egal auf welcher Flußseite wir uns gerade bewegen. Continue reading

Radurlaub 2024 – Tag 7 – von Aitrach bis Sinningen

Tageskilometer: 32km

Die Nacht hat angesichts des Konzerts etwas später begonnen, entsprechend kommen wir etwas verzögert in die Gänge. Noch dazu hatte ich die Nacht einen Angriff auf meinen Server, weshalb mein e-mail-Postfach am frühen Morgen explodiert. Nach einer ersten Analyse ist aber außer der Welle Mails kein Schaden entstanden – es ist defintiv eine Herausforderung so etwas am Handy zu entschärfen bzw. zu beurteilen. Gut, wenn man Freunde zur Hand hat, die aushelfen können. Continue reading

Radurlaub 2024 – Tag 6 – von Herlazhofen bis Aitrach

Tageskilometer: 27km

Es dauert ein wenig, bis wir loskommen, die Kids wollen noch ein wenig Tischkicker spielen und ich unterhalte mich prompt mit einem Mannheimer, der mich auf mein Radtrikot anspricht. Man kann nirgendwo hingehen, ohne dass man auf Kurpfälzer trifft… Continue reading