<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Monitoring – teqqy</title><link>https://www.teqqy.de/tags/monitoring/</link><description>Ein Blog über Technik und mehr</description><language>de</language><managingEditor>teqqy</managingEditor><lastBuildDate>Fri, 31 Jul 2026 22:33:33 +0000</lastBuildDate><generator>Hugo 0.164.0</generator><atom:link href="https://www.teqqy.de/tags/monitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Status meines k3s Homelab (Stand 10/2021)</title><link>https://www.teqqy.de/status-meines-k3s-homelab-stand-10-2021/</link><pubDate>Sun, 03 Oct 2021 15:13:24 +0200</pubDate><lastBuildDate>Sun, 03 Oct 2021 15:13:24 +0200</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/status-meines-k3s-homelab-stand-10-2021/</guid><description>Im Februar diesen Jahres habe ich einen ersten Beitrag zu meinem kleinen k3s Homelab geschrieben. Seit dem ist echt viel passiert und vieles hat sich verändert und ist hinzu gekommen. Direkt von Anfang an gilt ein großer dank der k8s-at-home Community!
k3s homelab Hardware Fangen wir wieder mit der Hardware an. Damals primär nur Raspberry Pis ist es jetzt ein Architekturmix geworden. Als Master laufen drei Raspberry Pi (externer Link) 4 mit 4 GB RAM. Da etcd (externer Link) die SD-Karten zum Frühstück fressen würde, bin ich hier auf 128 GB SSDs (externer Link) gewechselt die mittels eines USB zu SATA Adapters (externer Link) angeschlossen sind.</description><content:encoded>&lt;![CDATA[<p>Im Februar diesen Jahres habe ich einen ersten Beitrag zu meinem kleinen k3s Homelab geschrieben. Seit dem ist echt viel passiert und vieles hat sich verändert und ist hinzu gekommen. Direkt von Anfang an gilt ein großer dank der k8s-at-home Community!</p><h2 id="k3s-homelab-hardware">k3s homelab Hardware<a href="#k3s-homelab-hardware" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Fangen wir wieder mit der Hardware an. Damals primär nur Raspberry Pis ist es jetzt ein Architekturmix geworden. Als Master laufen drei<a href="https://amzn.to/2Ot3HOL" target="_blank" rel="noopener noreferrer">Raspberry Pi<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
4 mit 4 GB RAM. Da<a href="https://etcd.io/" target="_blank" rel="noopener noreferrer">etcd<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
die SD-Karten zum Frühstück fressen würde, bin ich hier auf<a href="https://amzn.to/3itec3P" target="_blank" rel="noopener noreferrer">128 GB SSDs<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
gewechselt die mittels eines<a href="https://amzn.to/3A7fTtF" target="_blank" rel="noopener noreferrer">USB zu SATA Adapters<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
angeschlossen sind.</p><p>Als Worker habe ich mir in den letzten Monaten gebrauchte Lenovo Thin Clients gekauft. Zwei davon sind mit 4-Kern Intel i5-6500T, 8 GB RAM, einer 128er SSD für das OS und einer 512 GB NMVe für ceph ausgestattet. Die zwei anderen mit einem Intel i3-6100T, 8 GB RAM und einer 128 GB SSD für das OS. Diese Hardware reicht völlig für ein k3s Homelab aus.</p><h2 id="software">Software<a href="#software" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Diese hat sich kaum geändert. Damals Ubuntu 20.04 LTS, heute Ubuntu 21.04 (non-LTS). Die Raspberry Pis haben natürlich die jeweilige 64bit Variante für ARM installiert bekommen.</p><h2 id="cluster-ressourcen">Cluster-Ressourcen<a href="#cluster-ressourcen" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><h3 id="csi--cluster-storage-interface">CSI – Cluster Storage Interface<a href="#csi--cluster-storage-interface" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p><a href="https://longhorn.io/" target="_blank" rel="noopener noreferrer">Longhorn<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
habe ich den Rücken gekehrt. Für kleine Cluster ziemlich brauchbar. Sobald der aber etwas größer wird, bzw. viele Dateien verändert werden kam die Replikation nicht mehr hinterher. Entsprechend vielen häufiger Volumes aus und mussten aus dem sehr gut funktionierenden Backup wiederhergestellt werden.</p><p>Als CSI nutze ich mittlerweile<a href="https://rook.io/" target="_blank" rel="noopener noreferrer">rook-ceph.<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Ceph als unterliegendes verteiltes Dateisystem und rook als Tool um darauf zugreifen zu können. Einige in der Community verwenden auch einen externen Ceph Cluster, z. B. via Proxmox. Rook-ceph ist schön leichtgewichtig, schnell und zuverlässig!</p><p>Derzeit ist der Cluster leider „degraded“, weil meine virtuelle Node auf meinem Proxmox Host fehlt.</p><h3 id="cni--cluster-network-interface">CNI – Cluster Network Interface<a href="#cni--cluster-network-interface" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Als CNI benutze ich das default Netzwerk von k3s: flannel. Allerdings lege ich ein LoadBalancer noch oben drüber.</p><p>Damals gar nichts dazu geschrieben. Ich gehe mal davon aus das ich auch zu diesem Zeitpunkt bereits<a href="https://metallb.universe.tf/" target="_blank" rel="noopener noreferrer">MetalLB<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
verwendet habe. MetalLB stellt mir IP-Adressen zur Verfügung damit externe Geräte auf bestimmte Dienste direkt zugreifen können, ohne Reverse Proxy.</p><h3 id="ingress-controller">Ingress Controller<a href="#ingress-controller" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Auch hier gab es einen Wechsel. Damals noch ingress-<a href="https://amzn.to/36Zyd9r" target="_blank" rel="noopener noreferrer">nginx<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
werden heute sämtliche HTTPS Seiten mittels<a href="https://traefik.io/" target="_blank" rel="noopener noreferrer">Traefik<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
publiziert.<a href="/traefik-troubleshooting-guide/">Traefik</a>
liefert mit allerdings nicht die Zertifikate, dies wird weiterhin vom cert-manager übernommen. Natürlich via Let’s encrypt.</p><h3 id="monitoring">Monitoring<a href="#monitoring" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Im Bereich Monitoring hat sich am Cluster nichts geändert. Weiterhin wird er kube-prometheus-stack verwendet. Auch wenn der etwas Ressourcenfressend ist, gibt es kaum eine andere Lösung. Prometheus selbst hält die Daten allerdings nur noch sechs Stunden vor. Anschließend werden sie in Thanos bereit gestellt. Grafana greift entsprechend direkt auf Thanos als auf Prometheus zu.</p><p><img src="/status-meines-k3s-homelab-stand-10-2021/images/grafana-dashboard_hu_b5d22af0353bc441.webp" srcset="/status-meines-k3s-homelab-stand-10-2021/images/grafana-dashboard_hu_874443a6601d02a1.webp 384w, /status-meines-k3s-homelab-stand-10-2021/images/grafana-dashboard_hu_b5d22af0353bc441.webp 768w, /status-meines-k3s-homelab-stand-10-2021/images/grafana-dashboard_hu_b0c839e775f01d5d.webp 1536w" sizes="(max-width: 768px) 100vw, 768px" alt="Grafana Screenshot der die Auslastung eines k3s homelab darstellt" loading="eager" fetchpriority="high" decoding="async" width="768" height="597">
Benachrichtigt werde ich via Alert Manager in einem separaten<a href="https://s.teqqy.de/discord" target="_blank" rel="noopener noreferrer">Discord<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
-Server. Dieser schickt mittels Webhook entsprechende Informationen über Fehler und deren Behebungsstatus.</p><h2 id="was-läuft-in-meinem-k3s-homelab">Was läuft in meinem k3s Homelab?<a href="#was-l%c3%a4uft-in-meinem-k3s-homelab" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Eigentlich alles was ich im Homelab immer so laufen hatte. NAS und Firewall sind weiterhin separiert. Alles andere läuft als Container im Cluster. Ein paar Beispiele</p><ul><li><a href="https://www.home-assistant.io/" target="_blank" rel="noopener noreferrer">Home-Assistant<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
incl.<a href="https://mosquitto.org/" target="_blank" rel="noopener noreferrer">Mosquitto<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
MQTT und<a href="https://github.com/zwave-js/zwavejs2mqtt" target="_blank" rel="noopener noreferrer">zwavejs2mqtt<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a></li><li><a href="https://github.com/adriankumpf/teslamate" target="_blank" rel="noopener noreferrer">Teslamate<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
um die Daten unseres Model 3 abzufragen</li><li><a href="https://github.com/jonaswinkler/paperless-ng" target="_blank" rel="noopener noreferrer">Paperless-NG<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als DMS</li><li><a href="https://freshrss.org/" target="_blank" rel="noopener noreferrer">FreshRSS<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als RSS Reader</li><li><a href="https://jellyfin.org/" target="_blank" rel="noopener noreferrer">Jellyfin<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als Mediaplayer</li><li><a href="https://github.com/0xERR0R/blocky" target="_blank" rel="noopener noreferrer">blocky<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als Netzwerk Werbeblocker</li><li>u. v. m.</li></ul><h2 id="deployment">Deployment<a href="#deployment" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Im Februar wollte ich noch nichts zum Deployment der Anwendungen und Container schreiben. Mittlerweile finde ich das Thema sehr interessant und wollte es ganz kurz vorstellen.</p><p>Ich verfolge mit dem k3s-homelab einen GitOps Ansatz. Heißt meine komplette Konfiguration aller Container und Dienste befindet sich in einem<a href="https://github.com/cbirkenbeul/k3s-gitops" target="_blank" rel="noopener noreferrer">GitHub Repository<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
. Allerdings nicht als einzelne Kind-Defintionen sondern als<a href="https://helm.sh/" target="_blank" rel="noopener noreferrer">Helm<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Datei. Sobald ich ein neuen commit im Main-Branch mache wird dies durch<a href="https://fluxcd.io/" target="_blank" rel="noopener noreferrer">FluxCD<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
von meinem Cluster gepullt und die Änderungen übernommen.</p><p>Ein Webhook benachrichtigt mich dann via<a href="https://s.teqqy.de/discord" target="_blank" rel="noopener noreferrer">Discord<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
über entsprechende Änderungen oder Fehler.</p><p>Bei Fragen und Anregungen versuche ich dir natürlich gern zu helfen.</p>
]]></content:encoded><category>kubernetes</category><category>homelab</category><category>gitops</category><category>monitoring</category></item><item><title>Status meines k3s-Homelab (Stand 02/2021)</title><link>https://www.teqqy.de/status-meines-k3s-homelab-stand-02-2021/</link><pubDate>Fri, 26 Feb 2021 12:39:15 +0100</pubDate><lastBuildDate>Fri, 26 Feb 2021 12:39:15 +0100</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/status-meines-k3s-homelab-stand-02-2021/</guid><description>Ich dachte mir, dass ich mal ein paar Worte zu meinem mittlerweile angewachsenen Kubernetes Homelab schreibe. Nicht, dass das irgendwas weltbewegendes wäre, aber sicherlich für den einen oder anderen ein kleiner Denkanstoß oder Inspiration für eigenes.
Hardware Hardware wird keine dedizierte eingesetzt. Ich habe auf meinem Proxmox Server vier virtuelle Maschinen erstellt. Dazu gesellen sich allerdings derzeit noch zwei Raspberry Pi (externer Link) 4 mit 4 GB RAM.</description><content:encoded>&lt;![CDATA[<p>Ich dachte mir, dass ich mal ein paar Worte zu meinem mittlerweile angewachsenen Kubernetes Homelab schreibe. Nicht, dass das irgendwas weltbewegendes wäre, aber sicherlich für den einen oder anderen ein kleiner Denkanstoß oder Inspiration für eigenes.</p><h2 id="hardware">Hardware<a href="#hardware" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Hardware wird keine dedizierte eingesetzt. Ich habe auf meinem Proxmox Server vier virtuelle Maschinen erstellt. Dazu gesellen sich allerdings derzeit noch zwei<a href="https://amzn.to/2Ot3HOL" target="_blank" rel="noopener noreferrer">Raspberry Pi<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
4 mit 4 GB RAM.</p><h2 id="software">Software<a href="#software" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Als Betriebssystem setze ich durchgehend auf Ubuntu 20.04 LTS. Bei den virtuellen Maschinen natürlich die amd64 und bei den<a href="https://amzn.to/2Ot3HOL" target="_blank" rel="noopener noreferrer">RPi<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
arm64 Variante.</p><p>Der Cluster selbst läuft mit Ranchers<a href="https://k3s.io" target="_blank" rel="noopener noreferrer">k3s<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
anstatt eines vollen k8s.</p><h2 id="kubernetes-cluster">Kubernetes Cluster<a href="#kubernetes-cluster" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><h3 id="allgemein">Allgemein<a href="#allgemein" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Der Cluster selbst besteht aus einem Master und fünf Worker. Ein Multimaster-Setup habe ich mir überlegt, allerdings für den Anfang verworfen. Auch wenn es mit k3s eigentlich ziemlich einfach gehen würde. Zumindest mit externer Datenbank.</p><h3 id="storage">Storage<a href="#storage" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Als Storage setze ich auf<a href="https://rancher.com/products/longhorn/" target="_blank" rel="noopener noreferrer">Longhorn<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
. Longhorn, auch von Rancher, ist ein distributed block storage welches iSCSI im Hintergrund nutzt. Je Storage Node wird eine dedizierte Festplatte (so zumindest der empfohlene Weg) an den Cluster gereicht und alle Dateien werden entsprechend verteilt. Zwei Hosts sind hier das Minimum. Bei mir werden alle 4 virtuellen Maschinen dafür verwendet.</p><h3 id="ingress">Ingress<a href="#ingress" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>In meinem kleinen k3s Tutorial habe ich<a href="https://traefik.io" target="_blank" rel="noopener noreferrer">Traefik<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als Ingress eingerichtet. Für meinen produktiven Cluster im Homelab allerdings setze ich auf<a href="https://amzn.to/36Zyd9r" target="_blank" rel="noopener noreferrer">NGINX<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
. Es liegt einfach an der leichteren Konfiguration für Einsteiger. Traefik ist wie unter Docker sehr mächtig, allerdings hat mich das etwas überfordert, sodass ich mit dem leichteren Beginnen wollte.</p><h3 id="monitoring">Monitoring<a href="#monitoring" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Auch hier nutze ich den klassichen Weg und verwende den<a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack" target="_blank" rel="noopener noreferrer">kube-prometheus-stack<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
. Bohrte den allerdings noch mit etwas<a href="https://grafana.com/oss/loki/" target="_blank" rel="noopener noreferrer">Loki<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
auf. Loki ist ein Software um Logdateien aufzubereiten. Ähnlich wie man es vlt. vom Elastik Stack (ELK) kennt.</p><p>Ein Alerting via Alertmanager ist noch nicht im Einsatz. Dafür informiert mich Botkube über diverse Cluster-Ereignisse auf einen dedizierten Server.</p><h3 id="besonderheiten">Besonderheiten<a href="#besonderheiten" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><p>Ich wollte von Anfang an nicht stur yaml-Dateien schreiben und diese mit kubectl in den Cluster jagen. Ich bin früh auf die<a href="https://github.com/k8s-at-home" target="_blank" rel="noopener noreferrer">k8s@home<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Community gestoßen die sich Rund um das Thema GitOps und Kubernetes im Homelab beschäftigen. Entsprechend wird mein Cluster auch komplett aus einem<a href="https://github.com/cbirkenbeul/k3s-cluster" target="_blank" rel="noopener noreferrer">GitHub Repository<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
gespeist. FluxCD zieht sich diese Daten und deployt sie im Cluster. Alles via Helm.</p><p>Das Problem ist noch, dass ich mich noch nicht um das Thema Secrets bemüht habe. Das steht für die nächste Zeit auf der Roadmap. Dann ist es auch möglich Tokens, Zertifikate und ähnliches auf<a href="https://www.github.com/cbirkenbeul" target="_blank" rel="noopener noreferrer">GitHub<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
zu speichern. Im können fast alle Dienste nur aus dem internen Netzwerk heraus erreicht werden.</p><h2 id="was-hoste-ich">Was hoste ich?<a href="#was-hoste-ich" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Ich würde diese Liste einfach mal nach Namespaces aufteilen. Ich liste allerdings nur weitere Software auf die nicht oben beschrieben sind.</p><h3 id="home">home<a href="#home" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><ul><li>Home Assistant mit code-server</li><li>Mosquitto</li><li>Heimdall</li></ul><h3 id="network">network<a href="#network" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><ul><li>MetalLB</li><li>cloudflare-ddns</li><li>ntp</li></ul><h3 id="media">media<a href="#media" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h3><ul><li>Gaps</li><li>Ombi</li><li>Tautulli</li><li>Plex</li></ul>
]]></content:encoded><category>kubernetes</category><category>homelab</category><category>gitops</category><category>monitoring</category></item><item><title>Homelab Monitoring mit Icinga2, InfluxDB &amp; Grafana – Mein Setup</title><link>https://www.teqqy.de/homelab-monitoring-wie-siehts-bei-mir-aus/</link><pubDate>Mon, 28 Dec 2020 02:15:39 +0100</pubDate><lastBuildDate>Mon, 28 Dec 2020 02:15:39 +0100</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/homelab-monitoring-wie-siehts-bei-mir-aus/</guid><description>Viele meiner Leser wissen es bereits: Ich nutze sehr gerne ICINGA2 (externer Link) als meine Monitoring Software. Vor vielen Jahren bin ich von Nagios damals zu ICINGA 1 gewechselt und sehr zeitnah zu Version 2. Entsprechend ist klar, dass mein Homelab Monitoring primär von ICINGA2 durchgeführt wird.</description><content:encoded>&lt;![CDATA[<p>Viele meiner Leser wissen es bereits: Ich nutze sehr gerne<a href="https://www.icinga.com" target="_blank" rel="noopener noreferrer">ICINGA2<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als meine Monitoring Software. Vor vielen Jahren bin ich von Nagios damals zu ICINGA 1 gewechselt und sehr zeitnah zu Version 2. Entsprechend ist klar, dass mein Homelab Monitoring primär von ICINGA2 durchgeführt wird.</p><h2 id="wie-sieht-für-mich-monitoring-aus">Wie sieht für mich Monitoring aus?<a href="#wie-sieht-f%c3%bcr-mich-monitoring-aus" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Bevor ich dir mein Homelab Monitoring zeige, möchte ich erst mal auf die Frage eingehen, wie das ganze überhaupt für mich aussehen soll, bzw. was für mich der Sinn und Zweck eines Monitoring ist.</p><p>Privat als auch im beruflichen Leben weiß ich gern vor meinen Kunden (Partner:in, Kolleg:innen, externe Kund:innen) ob etwas nicht funktioniert. Realistisch betrachtet gibt es Dinge die man nicht vor anderen wissen kann: zum Beispiel ob das Internet noch funktioniert. 🤷‍♂️ Allerdings ist es im Rahmen der Kommunikation immer ein wesentlicher Vorteil schon zu wissen ob/was nicht richtig funktioniert. Die Kunst ist es hier eine Balance zu finden zwischen Dingen die sinnvoll überwacht werden können und welche einfach nur interessant sind zu wissen. Entsprechend versuche ich viele Dinge zu überwachen und mit sauberen Schwellwerten zu versehen um möglichst frühzeitig ein Problem zu sehen oder gar vor einem Problem eingreifen zu können.</p><p>Das gerade angesprochene Beispiel mit der Internetleitung ist so ein Thema. Das Monitoringsystem kann ein Ping auf einen externen Dienst absetzen der quasi immer Verfügbar ist, z. B. Google oder Cloudflare. Auf Grund der Auslastung des Monitoringservers wird der Ping nur nicht durchgehend abgesetzt wie wir es z. B. unter Windows mit dem Parameter<em>-t</em> kennen. Stattdessen wird alle paar Sekunden (oder Minuten) eine Reihe von Pings abgesetzt und hieraus dann ermittelt ob die Internetleitung (bzw. wird ja der Service überprüft) verfügbar ist.</p><p><img src="/homelab-monitoring-wie-siehts-bei-mir-aus/images/homelab-monitoring-icinga2_hu_6cbe5ee53ffe437b.webp" srcset="/homelab-monitoring-wie-siehts-bei-mir-aus/images/homelab-monitoring-icinga2_hu_9897abf97e704faf.webp 384w, /homelab-monitoring-wie-siehts-bei-mir-aus/images/homelab-monitoring-icinga2_hu_6cbe5ee53ffe437b.webp 768w, /homelab-monitoring-wie-siehts-bei-mir-aus/images/homelab-monitoring-icinga2_hu_b9a4a72c379fa20d.webp 1536w" sizes="(max-width: 768px) 100vw, 768px" alt="homelab monitoring mit icinga2" loading="eager" fetchpriority="high" decoding="async" width="768" height="487"/><h2 id="was-monitore-ich-im-homelab">Was monitore ich im Homelab?<a href="#was-monitore-ich-im-homelab" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Nun kommen wir zur spannenden Frage was ich denn im Homelab überwache. Wie oben bereits geschrieben gibt es für mich kein Grund die Verfügbarkeit der Internetleitung zu überwachen. Es ist immer jemand im Haus der das vor mir erkennen würde. Zudem müsste ich für eine entsprechende Benachrichtigung eine zweite Internetleitung bereit stellen oder ein SMS Gateway anschaffen. Beides für daheim zu großer overhead.</p><p>Ansonsten versuche ich alle Infrastrukturdienste zu überwachen, sofern sie durch die jeweilige Software überwachbar sind. Mein DHCP Server ist z. B. in der<a href="https://www.amazon.de/shop/teqqyde/list/3M2TIB7XEB7CS?ref_=aip_sf_list_spv_ons_mixed_d" target="_blank" rel="noopener noreferrer">Unifi<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
USG integriert, hier kann ich den Dienst nicht sauber überwachen, da die Firmware ein geschlossenes System ist.</p><p>Anders sieht es z. B. beim Thema Smart Home aus. Hier überwache ich sämtliche Dienste (Home Assistant, zwave to mqtt, zigbee to mqtt, etc) auf deren Ausführung. Ausführung heißt in diesem Falle aber nicht ob die ausführbare Datei gestartet ist, sondern ob der Service wirklich läuft. Ist z. B. das Webfrontend erreichbar oder nimmt der Service auf einem bestimmten Port auch Daten entgegen. Ob das relevante Daten sind, ist hier uninteressant, es geht schließlich einzig und allein um die Verfügbarkeit.</p><p>Dazu kommen natürlich noch alle anderen Bereitstellungen wie DMS, Netzwerkspeicher und so weiter. Überall werden, sofern es Sinn macht, natürlich auch Metriken wie CPU oder RAM Auslastung mit protokolliert und grafisch dargestellt.</p><h2 id="homelab-monitoring--die-software">Homelab Monitoring – Die Software<a href="#homelab-monitoring--die-software" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Wie bereits geschrieben nutze ich<a href="https://amzn.to/2GTma2L" target="_blank" rel="noopener noreferrer">ICINGA2<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
als Software. Diese setzt zum Betrieb eine SQL Datenbank voraus. Ich für meinen Teil nutze wo immer es auch geht MariaDB, einfach als persönliche Präferenz.</p><p>Alle Metriken bzw. Performancedaten werden in eine<a href="/synology-nas-mit-icinga2-ueberwachen/">InfluxDB</a>
Datenbank gespeichert. Die Grafen in ICINGA Web 2 sowohl als auch eigenständige Dashboard werden mittels Grafana realisiert. Dieses greift auf die Influx Datenbank zu und stellt nach meinen Wünschen die Werte grafisch dar.</p>
]]></content:encoded><category>selfhosted</category><category>monitoring</category><category>icinga2</category><category>grafana</category><category>homelab</category></item><item><title>ICINGAWEB2 FreeIPA Konfiguration</title><link>https://www.teqqy.de/icingaweb2-freeipa-konfiguration/</link><pubDate>Fri, 02 Aug 2019 00:01:12 +0200</pubDate><lastBuildDate>Fri, 02 Aug 2019 00:01:12 +0200</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/icingaweb2-freeipa-konfiguration/</guid><description>Wenn du mir schon länger folgst weißt du, dass ich mein Homelab mit ICINGA2 monitore und damit alles im Blick behalte. Seit kurzem setze ich auch FreeIPA als Identity Management ein, also musste ich noch ICINGAWEB2 mit FreeIPA (externer Link) verbinden. Anfangs kein so leichtes unterfangen. Dieses Tutorial hilft dir aber bei deiner ICINGAWEB2 FreeIPA Konfiguration.</description><content:encoded>&lt;![CDATA[<p>Wenn du mir schon länger folgst weißt du, dass ich mein Homelab mit ICINGA2 monitore und damit alles im Blick behalte. Seit kurzem setze ich auch FreeIPA als Identity Management ein, also musste ich noch ICINGAWEB2 mit<a href="https://www.freeipa.org/page/Main_Page" target="_blank" rel="noopener noreferrer">FreeIPA<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
verbinden. Anfangs kein so leichtes unterfangen. Dieses Tutorial hilft dir aber bei deiner ICINGAWEB2 FreeIPA Konfiguration.</p><p>Die Installation von<a href="https://github.com/Icinga/icingaweb2" target="_blank" rel="noopener noreferrer">ICINGAWEB2<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
kann ganz regulär nach<a href="https://icinga.com/docs/icingaweb2/latest/" target="_blank" rel="noopener noreferrer">offizieller Anleitung<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
durchgeführt werden. Spannend wird es erst, wenn wir das Frontend einrichten möchten. Als Backend nehmen wir entsprechend LDAP und lassen im nächsten Schritt auch schon über Eingabe der Domäne alle Einstellungen suchen.</p><p><img src="/icingaweb2-freeipa-konfiguration/images/homelab-monitoring-icinga2_hu_a2bf32042e3dfb58.webp" srcset="/icingaweb2-freeipa-konfiguration/images/homelab-monitoring-icinga2_hu_6138cf7de6d30b6a.webp 384w, /icingaweb2-freeipa-konfiguration/images/homelab-monitoring-icinga2_hu_a2bf32042e3dfb58.webp 768w, /icingaweb2-freeipa-konfiguration/images/homelab-monitoring-icinga2_hu_ce6421b679649607.webp 1536w" sizes="(max-width: 768px) 100vw, 768px" alt="ICINGAWEB2 mit FreeIPA verbinden" loading="lazy" fetchpriority="auto" decoding="async" width="768" height="487"/><p>Eines noch Vorweg: Das ICINGA2 Buch hat mir immer sehr geholfen das System besser zu verstehen und viele Konfigurationen und Anpassungen leicht zu meistern. Solltest du frisch in das Thema einsteigen empfehle ich dir das Buch zu kaufen.</p><p>Dies funktioniert natürlich am Besten, wenn man FreeIPA auch direkt als DNS Server einsetzt. Andernfalls kann es sein, dass die Daten nicht korrekt gezogen werden. Eine Anpassung des<a href="/2019-01-adguard-home-vs-pihole/">DNS</a>
am ICINGA2 Host ist anschließend notwenig.</p><p>Die Einrichtung kann man sogar, wenn man nichts besonderes konfigurieren möchte, einfach immer weiter klicken. Die Konfiguration erfolgt mit dem neuen ICINGAWEB2 Installer fast automatisch.</p><p>Nach komplett abgeschlossener Einrichtung müssen wir allerdings noch die<em>roles.ini</em> Datei anpassen.</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>[Administrators]
users = "username@domain.tld"
permissions = "*"</code></pre></div><p>Wer möchte passt natürlich noch die Berechtigungen an. In diesem Beispiel ist das mein Administrator-Benutzer, der soll natürlich alle Berechtigungen haben.</p><p>Nun können wir über das Frontend bei ICINGAWEB2 anmelden. Als Benutzername müsst ihr den vollqualifizierten Nutzername verwenden. Wie oben in der roles.ini also z. B.</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>username@domain.tld</code></pre></div><p>Mit dem entsprechenden Passwort zusätzlich eingegeben, habt ihr ein erfolgreichen Login bestritten. Zum Vergleich zeige ich euch noch meine anderen Konfigurationsdateien.</p><h2 id="meine-icingaweb2-freeipa-konfiguration">Meine ICINGAWEB2 FreeIPA Konfiguration<a href="#meine-icingaweb2-freeipa-konfiguration" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Zum Vergleich zeige ich euch noch meine anderen Konfigurationsdateien. Damit sollte es für dich auch möglich sein eine korrekte Verbindung zu FreeIPA durchzuführen.</p><h4 id="authenticationini">authentication.ini<a href="#authenticationini" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h4><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>[icingaweb2]
user_class = "inetOrgPerson"
filter = ""
user_name_attribute = "uid"
backend = "ldap"
base_dn = "dc=example,dc=com"
domain = "example.com"
resource = "icingaweb_ldap"</code></pre></div><h4 id="groupsini">groups.ini<a href="#groupsini" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h4><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>[icingaweb2]
resource = "icingaweb_ldap"
user_backend = "icingaweb2"
group_class = "group"
group_filter = ""
group_name_attribute = "gid"
group_member_attribute = "
member"base_dn = ""
backend = "ldap"</code></pre></div><h4 id="ressourcesini">ressources.ini<a href="#ressourcesini" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h4><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>[icingaweb_ldap]
type = "ldap"
hostname = "dc.example.com"
port = "389"
encryption = "none"
root_dn = "dc=example,dc=com"
bind_dn = ""
bind_pw = ""
timeout = "5"</code></pre></div><p>Anschließend sollte der Login problemlos klappen.</p>
]]></content:encoded><category>selfhosted</category><category>icinga2</category><category>ldap</category><category>monitoring</category></item><item><title>Docker Monitoring mit Prometheus und Grafana</title><link>https://www.teqqy.de/docker-monitoring-mit-prometheus-und-grafana/</link><pubDate>Thu, 20 Jun 2019 18:10:53 +0200</pubDate><lastBuildDate>Thu, 20 Jun 2019 18:10:53 +0200</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/docker-monitoring-mit-prometheus-und-grafana/</guid><description>Um das Docker Monitoring sollte man sich nicht drücken, denn es ist wichtig zu sehen, welche Auslastung die einzelnen Container verursachen. Zum einen um etwaige Probleme festzustellen und zum anderen um die Leistung des Docker Hosts evtl. anpassen zu können.
In meinem docker-homelab (externer Link) Repository auf Github (externer Link) habe ich vor kurzem ein Docker Compose Stack hinzugefügt, welche genau dies macht. Über die Monitoring Tools Prometheus (externer Link) , Node Exporter (externer Link) und cAdvisor (externer Link) werden die Daten erfasst und mittels Grafana (externer Link) ansprechend dargestellt.</description><content:encoded>&lt;![CDATA[<p>Um das Docker Monitoring sollte man sich nicht drücken, denn es ist wichtig zu sehen, welche Auslastung die einzelnen Container verursachen. Zum einen um etwaige Probleme festzustellen und zum anderen um die Leistung des Docker Hosts evtl. anpassen zu können.</p><p>In meinem<a href="https://github.com/cbirkenbeul/docker-homelab" target="_blank" rel="noopener noreferrer">docker-homelab<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Repository auf<a href="https://www.github.com/cbirkenbeul" target="_blank" rel="noopener noreferrer">Github<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
habe ich vor kurzem ein Docker Compose Stack hinzugefügt, welche genau dies macht. Über die Monitoring Tools<a href="https://prometheus.io" target="_blank" rel="noopener noreferrer">Prometheus<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
,<a href="https://github.com/prometheus/node_exporter" target="_blank" rel="noopener noreferrer">Node Exporter<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
und<a href="https://github.com/google/cadvisor" target="_blank" rel="noopener noreferrer">cAdvisor<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
werden die Daten erfasst und mittels<a href="https://grafana.com" target="_blank" rel="noopener noreferrer">Grafana<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
ansprechend dargestellt.</p><h2 id="docker-monitoring-einrichten">Docker Monitoring einrichten<a href="#docker-monitoring-einrichten" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Um das ganze wie im oben gezeigten Dashboard zu realisieren kann man sich meiner<a href="https://github.com/cbirkenbeul/docker-homelab/blob/master/monitoring/docker-compose.yaml" target="_blank" rel="noopener noreferrer">docker-compose.yaml<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Datei bedienen. Am einfachsten ist es natürlich man verwendet das komplette Repository, weil dort auch alle anderen Dateien für das Docker Monitoring vorhanden sind.</p><p>Grundsätzlich reicht es dann mit einem einfachen</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker-compose up -d</span></span></code></pre></div></div><p>den kompletten Monitoring Stack zu starten. Solltest du kein<a href="/reverse-proxy-mit-traefik-unter-docker/">Traefik</a>
als Reverse Proxy nutzen kannst du in der docker-compose.yaml Datei auch den Bereich der Labels sowie die Netzwerkdefinition weg lassen.</p><p>Anschließend verbindet man sich über den gewünschten Browser mit dem Grafana Dashboard und loggt sich mit<em><strong>admin/admin</strong></em> dort ein.</p><p>Im ersten Schritt muss man nun die Datenquelle hinzufügen. Im Dashboard bedarf es hier nur ein klick. Als Datenquelle verwenden wir entsprechend Prometheus.</p><p>Es müssen dann nur die Felder Name und URL gefüllt werden. Sollte das vordefinierte Dashboard aus dem Repository verwendet werden, sollte die Datenquelle den Namen „Prometheus“ tragen. Als URL wird<strong>http://mon_prometheus:9090</strong></p><p>eingetragen. Es sollte bei dir dann analog zu diesem Screenshot aussehen:</p><p>Sobald man auf<em><strong>Save &amp; Test</strong></em> geklickt hat, sollte ein grüner Balken erscheinen der die erfolgreiche Verbindung bestätigt.</p><h2 id="grafana-dashboard-importieren">Grafana Dashboard importieren<a href="#grafana-dashboard-importieren" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Nun müssen wir nur noch das Grafana Dashboard importieren um das Docker Monitoring zu vervollständigen.</p><p>Hierfür klickt man links auf<em><strong>Dashboard</strong></em> und anschließend auf<em><strong>manage</strong></em>.</p><p>Über den Button importieren kann man nun die<a href="https://github.com/cbirkenbeul/docker-homelab/blob/master/monitoring/grafana/dashboard.json" target="_blank" rel="noopener noreferrer">dashboard.json<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Datei hinzufügen. Es muss dann nur noch die korrekte Datenquelle angegeben werden und schon sollte das Dashboard entsprechend Werte anzeigen.</p>
]]></content:encoded><category>selfhosted</category><category>docker</category><category>monitoring</category><category>prometheus</category><category>grafana</category></item><item><title>SYNOLOGY NAS mit ICINGA2 überwachen</title><link>https://www.teqqy.de/synology-nas-mit-icinga2-ueberwachen/</link><pubDate>Sun, 06 Jan 2019 14:33:59 +0100</pubDate><lastBuildDate>Sun, 06 Jan 2019 14:33:59 +0100</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/synology-nas-mit-icinga2-ueberwachen/</guid><description>Ein SYNOLOGY (externer Link) NAS mit ICINGA2 (externer Link) überwachen erfordert nicht unbedingt ein gesondertes Plugin, da die Systeme auch ohne Probleme direkt via SNMP überwacht werden können. Fertige Plugins haben allerdings den Vorteil, dass sie schneller zum Einrichten und zum anderen übersichtlicher sind.</description><content:encoded>&lt;![CDATA[<p>Ein<a href="https://www.amazon.de/shop/teqqyde/list/3N2DZNYBV6VGD?ref_=aip_sf_list_spv_ons_mixed_d" target="_blank" rel="noopener noreferrer">SYNOLOGY<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
NAS mit<a href="https://icinga.com" target="_blank" rel="noopener noreferrer">ICINGA2<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
überwachen erfordert nicht unbedingt ein gesondertes Plugin, da die Systeme auch ohne Probleme direkt via SNMP überwacht werden können. Fertige Plugins haben allerdings den Vorteil, dass sie schneller zum Einrichten und zum anderen übersichtlicher sind.</p><p>Bis vor kurzem habe ich immer mit dem Plugin check_synology gearbeitet. Allerdings hatte das bei mir unter verschiedenen Systemen immer mal wieder zu aussetzern geführt. Aus diesem Grund habe ich mich vor ein paar Tagen auf die Suche nach einem neuen CheckPlugins gemacht und bin natürlich fündig geworden.</p><h2 id="synology-nas-mit-icinga2-überwachen">SYNOLOGY NAS MIT ICINGA2 ÜBERWACHEN<a href="#synology-nas-mit-icinga2-%c3%bcberwachen" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p><a href="https://github.com/wernerfred/check_synology" target="_blank" rel="noopener noreferrer">check_synology.py<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
funktioniert ausschließlich mit SNMPv3, bietet also noch mehr Sicherheit als lediglich über SNMPv2 oder gar v1.</p><p>Nach dem herunterladen des Plugins und einfügen des CheckCommands (Pluginersteller liefert das glücklicherweise mit), kann man schon anfangen die Service Checks zu schreiben. Meine sehen derzeit so aus:</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>apply Service "syno-load" {
check_command = "check_synology"
vars.synology_mode = "load"
vars.synology_host = "$address$"
vars.synology_warning = "$synology_load_w$"
vars.synology_critical = "$synology_load_c$"
assign where host.vars.os_type == "DSM"
}
apply Service "syno-memory" {
check_command = "check_synology"
vars.synology_mode = "memory"
vars.synology_host = "$address$"
vars.synology_warning = "$synology_load_w$"
vars.synology_critical = "$synology_load_c$"
assign where host.vars.os_type == "DSM"
}
apply Service "syno-status" {
check_command = "check_synology"
vars.synology_mode = "status"
vars.synology_host = "$address$"
vars.synology_warning = "$synology_load_w$"
vars.synology_critical = "$synology_load_c$"
assign where host.vars.os_type == "DSM"
}
apply Service "syno-disks" {
check_command = "check_synology"
vars.synology_mode = "disk"
vars.synology_host = "$address$"
vars.synology_warning = "$synology_load_w$"
vars.synology_critical = "$synology_load_c$"
assign where host.vars.os_type == "DSM"
}</code></pre></div><p>Anschließend noch die Host Definition</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>object Host "synology.int.casalani.de" {
check_command = "hostalive"
address = "10.0.1.21"
vars.os_type = "DSM"
vars.synology_snmp_user = "icinga2"
vars.synology_snmp_authkey = "strenggeheim"
vars.synology_snmp_privkey = "strenggeheim"
}</code></pre></div><p>Anschließend noch die config validieren und<a href="/synology-cloud-backup-anbieter-im-vergleich/">ICINGA2</a>
neu laden. In<a href="https://amzn.to/2GTma2L" target="_blank" rel="noopener noreferrer">ICINGA<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
Web 2 sieht es dann so aus:</p><p>Nach jetzt mehreren Tagen Test, kann ich sagen, dass das Plugin hervorragend funktioniert. Entsprechend meine Weiterempfehlung.</p>
]]></content:encoded><category>synology</category><category>icinga2</category><category>monitoring</category></item><item><title>Performance Monitoring mit dem TIG-Stack</title><link>https://www.teqqy.de/performance-monitoring-mit-dem-tig-stack/</link><pubDate>Mon, 18 Jun 2018 22:43:53 +0200</pubDate><lastBuildDate>Mon, 18 Jun 2018 22:43:53 +0200</lastBuildDate><guid isPermaLink="true">https://www.teqqy.de/performance-monitoring-mit-dem-tig-stack/</guid><description>Wer ein Homelab betreibt kommt früher oder später an den Punkt an dem einzelne Dienste vom Teststadium in die Produktion übergehen. Das passiert einfach zwangsläufig und ist auch gern Gang und Gäbe in Unternehmen.
Sobald aber ein Dienst wichtig wird, sollte man ihm auch die nötige Aufmerksamkeit widmen und dafür sorge tragen, dass dieser Dienst auch eine hohe Verfügbarkeit hat.
Am Besten lässt sich das mit diversen Monitoringlösungen realisieren. Ich möchte euch in diesem Beitrag allerdings den ersten Schritt des Verfügbarkeitsmonitorings überspringen und direkt ins Performancemonitoring einsteigen.</description><content:encoded>&lt;![CDATA[<p>Wer ein Homelab betreibt kommt früher oder später an den Punkt an dem einzelne Dienste vom Teststadium in die Produktion übergehen. Das passiert einfach zwangsläufig und ist auch gern Gang und Gäbe in Unternehmen.</p><p>Sobald aber ein Dienst wichtig wird, sollte man ihm auch die nötige Aufmerksamkeit widmen und dafür sorge tragen, dass dieser Dienst auch eine hohe Verfügbarkeit hat.</p><p>Am Besten lässt sich das mit diversen Monitoringlösungen realisieren. Ich möchte euch in diesem Beitrag allerdings den ersten Schritt des Verfügbarkeitsmonitorings überspringen und direkt ins Performancemonitoring einsteigen.</p><p>Hierfür eignet sich hervorragend der sog. TIG-Stack.<br><a href="https://www.influxdata.com/time-series-platform/telegraf/" target="_blank" rel="noopener noreferrer">(T)elegraf<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
,<a href="https://www.influxdata.com/products/influxdb-overview/" target="_blank" rel="noopener noreferrer">(I)influxDB<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
und<a href="https://grafana.com/" target="_blank" rel="noopener noreferrer">(G)rafana<svg class="link-external-icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg><span class="visually-hidden"> (externer Link)</span></a>
bilden hier eine Einheit um einzelnen Metriken der Systeme zusammen, speichern und grafisch aufzubereiten. Ich zeige euch eine beispielhafte Installation unter Ubuntu 16.04 LTS.</p><h2 id="installation-der-komponenten">Installation der Komponenten<a href="#installation-der-komponenten" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Telegraf und InfluxDB können wir direkt mittels WGET herunter laden.</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd /tmpwget https://dl.influxdata.com/telegraf/releases/telegraf_1.6.2-1_amd64.debwget https://dl.influxdata.com/influxdb/releases/influxdb_1.5.2_amd64.deb</span></span><span style="display:flex;"><span><span style="color:#a5d6ff">```</span></span></span></code></pre></div></div><p>Anschließend kurz installiert</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dpkg -i telegraf_1.6.2-1_amd64.debdpkg -i influxdb_1.5.2_amd64.deb</span></span></code></pre></div></div><p>Die Programme enthalten in der Installation die systemd Skripte und starten beim nächsten Systemstart automatisch mit. Ein manuelles Starten nach der Installation ist nicht notwenig.</p><p>Nun installieren wir noch Grafana. Hier empfielt es sich das offizielle Repository einzubinden um es bei Updates leichter zu haben.</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>vim /etc/apt/sources.list.d/grafana.list</code></pre></div><p>Hier kommt dann folgender Inhalt rein:</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label"/><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang=""><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><pre tabindex="0"><code>deb https://packagecloud.io/grafana/stable/debian/ stretch main</code></pre></div><p>Anschließend noch den PGP Schlüssel installieren</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl https://packagecloud.io/gpg.key | apt-key add -</span></span></code></pre></div></div><p>Nun können wir Grafana installieren und starten</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>apt update<span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> apt install grafanasystemctl daemon-reloadsystemctl start grafana-serversystemctl status grafana-server</span></span></code></pre></div></div><h2 id="einrichtung-der-tools">Einrichtung der Tools<a href="#einrichtung-der-tools" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Fangen wir mit der Datenbank an. InfluxDB ist eine sogenannte Time Series Database und entsprechend genau für den Anwendungsfall des Monitorings entwickelt. Wir verbindungen uns mit dem Server:</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>influx</span></span></code></pre></div></div><p>und erstellen eine neue Datenbank.</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>create database Telegraf;</span></span><span style="display:flex;"><span>exit;</span></span></code></pre></div></div><p>Das wars auch schon. Einfach, nich? Dann weiter zu Teletraf.</p><p>Telegraf speichert seine Einstellungen in einer Konfigurationsdatei unter /etc/telegraf</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">bash</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="bash"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>vim /etc/telegraf/telegraf.conf</span></span></code></pre></div></div><p>Hier kommentieren wir in Zeile XXX die Verbindung zu InfluxDB aus.</p><h2 id="das-grafana-dashboard">Das Grafana Dashboard<a href="#das-grafana-dashboard" class="heading-anchor" aria-label="Diesen Abschnitt verlinken"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg></a></h2><p>Nun können wir das Grafana Dashboard einrichten. Hierzu öffnet ihr mit eurem Browser die Seite eures Servers<strong>http://{IP}:3000</strong></p><p>Zugangsdaten sind bei der Erstinstallation<strong>admin:admin</strong>.</p><p>Grafana führt einem direkt durch die Einrichtung und die notwendigen Schritt. Als ersten brauchen wir natür eine Datenquelle</p><p>Name: Telegraf<br>
Type: Telegraf<br>
HTTP Url: http://127.0.0.1:8086<br>
InfluxDB Details Database: Telegraf</p><p>Anschließend auf<strong>Save &amp; Test</strong> klicken. Es sollte ein grüner Balken auftauchen, dass die Verbindung erfolgreich hergestellt worden ist.</p><p>Der nächste Schritt ist ein neues Dashboard anzulegen. Wir starten in diesem neuen Dashboard mit einem Graphen. Klicken oben auf<strong>Panel Title</strong> und wählen<strong>edit</strong> aus.</p><p>Erstellt eine Abfrage welche anschließend diesen Aufbau hat:</p><div class="code-block"><div class="code-block-header"><span class="code-lang-label">sql</span><button class="code-copy-btn" type="button" aria-label="Code kopieren" data-umami-event="Code Copy" data-umami-event-lang="sql"><svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg></button></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#ff7b72">FROM</span><span style="color:#6e7681"/><span style="color:#ff7b72">default</span><span style="color:#6e7681"/>cpu<span style="color:#6e7681"/><span style="color:#ff7b72">WHERE</span><span style="color:#6e7681"/>cpu<span style="color:#6e7681"/><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#6e7681"/>cpu<span style="color:#6e7681"/>totalSELECT<span style="color:#6e7681"/>field(usage_system)<span style="color:#ff7b72">GROUP</span><span style="color:#6e7681"/><span style="color:#ff7b72">BY</span><span style="color:#6e7681"/>time(<span style="color:#f85149">$</span>interval)</span></span></code></pre></div></div><p>Die restlichen Felder könnt ihr leer lassen. Ihr solltet dann oben in der Vorschau auch schon die Anfänge eines Graphen sehen.</p><p>Wenn gewünscht können wir nun unter<strong>Axes</strong> die<strong>Unit</strong> auf<strong>Percent (0-100)</strong> stellen. Weitere Anpassungen können natürlich je nach Wunsch gerne angepasst werden.</p><p>Habt ihr das alles soweit eingestellt, klickt ihr oben rechts in der Ecke auf den Pfeil nach links. Anschließend solltet ihr euer Dashboard oben mit der Diskette noch abspeichern. Je nach Wunsch könnt ihr nun die weiteren Werte die Telegraf ausliest noch als Graphen hinzufügen.</p>
]]></content:encoded><category>selfhosted</category><category>monitoring</category><category>grafana</category></item></channel></rss>