<?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 – Serverküche</title><link>https://serverkueche.de/tags/monitoring/</link><description>Monitoring – Neueste Beiträge von Serverküche</description><generator>Hugo</generator><language>de-DE</language><managingEditor>feedback@serverkueche.de (Serverküche)</managingEditor><webMaster>feedback@serverkueche.de (Serverküche)</webMaster><copyright>2026 Serverküche</copyright><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://serverkueche.de/tags/monitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Uptime Kuma installieren: Server-Monitoring hinter Traefik</title><link>https://serverkueche.de/tutorials/uptime-kuma-monitoring/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><author>feedback@serverkueche.de (Serverküche)</author><guid>https://serverkueche.de/tutorials/uptime-kuma-monitoring/</guid><description>Uptime Kuma hinter Traefik aufsetzen und deine Dienste überwachen: Monitore, Benachrichtigungen und eine Status-Seite – die erste echte App der Serie.</description><content:encoded><![CDATA[<p>Traefik steht – jetzt hängen wir die erste echte App dahinter. <strong>Uptime Kuma</strong> ist
dafür ideal: winzig, sofort nützlich und ohne Datenbank. Es überwacht deine Dienste
und schlägt Alarm, wenn einer ausfällt – ab jetzt merkst <em>du</em> zuerst, dass etwas
klemmt, nicht deine Nutzer. Nebenbei lernst du das Muster, das jede weitere App
wiederholt.</p>
<h2 id="was-bauen-wir">Was bauen wir?</h2>
<p>Am Ende läuft <strong>Uptime Kuma 2.4</strong> unter <code>https://status.DEINE_DOMAIN</code>, abgesichert
über Traefik mit automatischem HTTPS. Du hast den ersten Monitor eingerichtet (der
prüft im Minutentakt, ob ein Dienst antwortet), eine Benachrichtigung verbunden und
optional eine öffentliche Status-Seite. Zum ersten Mal binden wir dabei einen Dienst
an, der <strong>nicht auf Port 80</strong> lauscht – ein wichtiges Detail für alle folgenden Apps.</p>
<h2 id="voraussetzungen">Voraussetzungen</h2>
<ul>
<li>Ein laufender <a href="/tutorials/reverse-proxy-traefik/">Traefik-Reverse-Proxy</a> samt
<code>proxy</code>-Netzwerk und funktionierendem Let&rsquo;s-Encrypt-Resolver <code>le</code></li>
<li>Ein DNS-Record <code>status.DEINE_DOMAIN</code>, der
<a href="/tutorials/domain-mit-server-verbinden/">auf den Server zeigt</a></li>
</ul>
<h2 id="schritt-für-schritt">Schritt für Schritt</h2>
<h3 id="schritt-1-die-composeyaml">Schritt 1: Die compose.yaml</h3>
<p>Eigener Ordner, eigene Datei:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/uptime-kuma <span class="o">&amp;&amp;</span> <span class="nb">cd</span> ~/uptime-kuma</span></span></code></pre></div>
</div>
<div class="sk-code">
  <span class="sk-code-head">YAML</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">uptime-kuma</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">louislam/uptime-kuma:2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">kuma-data:/app/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">networks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">proxy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.enable=true&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.kuma.rule=Host(`status.DEINE_DOMAIN`)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.kuma.entrypoints=websecure&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.routers.kuma.tls.certresolver=le&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.services.kuma.loadbalancer.server.port=3001&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">kuma-data</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">networks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">proxy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div>
</div>
<p>Das kennst du aus dem Traefik-Tutorial – bis auf <strong>eine neue, entscheidende Zeile</strong>:</p>
<div class="sk-code">
  <span class="sk-code-head">YAML</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;traefik.http.services.kuma.loadbalancer.server.port=3001&#34;</span></span></span></code></pre></div>
</div>
<p>Uptime Kuma lauscht intern auf <strong>Port 3001</strong>, nicht auf 80. Diese Zeile sagt Traefik,
an welchen Port es die Anfragen weiterreichen soll. Ohne sie rät Traefik falsch und
du bekommst einen <code>Bad Gateway</code>. Merke dir das Label – jede App, die nicht auf Port
80 läuft, braucht es.</p>
<p>Der Rest ist das bekannte Muster: <strong>kein <code>ports:</code></strong> (nur über Traefik erreichbar),
<code>proxy</code>-Netzwerk, Named Volume für die Daten.</p>
<h3 id="schritt-2-starten-und-ersten-login">Schritt 2: Starten und ersten Login</h3>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose up -d
</span></span><span class="line"><span class="cl">docker compose logs -f uptime-kuma</span></span></code></pre></div>
</div>
<p>Wenn Kuma bereit ist, endet das Log mit dieser Zeile – ab hier nimmt der Dienst
Anfragen an (<code>Strg+C</code> beendet nur das Mitlesen):</p>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">[SERVER] INFO: Welcome to Uptime Kuma
</span></span><span class="line"><span class="cl">[SERVER] INFO: Uptime Kuma Version: 2.4.0
</span></span><span class="line"><span class="cl">[SETUP-DATABASE] INFO: Listening on:
</span></span><span class="line"><span class="cl">[SETUP-DATABASE] INFO: -  http://localhost:3001</span></span></code></pre></div>
</div>
<p>Beim ersten Start legt Kuma seine Datenbank im Volume an – das dauert einige
Sekunden. Ruf dann <code>https://status.DEINE_DOMAIN</code> im Browser auf. Uptime Kuma 2.x
fragt zuerst die <strong>Datenbank</strong> ab – für ein Setup wie unseres ist <strong>SQLite</strong> die
richtige, einfachste Wahl (auswählen, auf <strong>Weiter</strong> klicken). Direkt danach legst du
das <strong>Admin-Konto</strong> an (Benutzername + starkes Passwort).</p>
<p><figure class="my-6"><img src="/tutorials/uptime-kuma-monitoring/kuma-setup_hu_efd590bbed8353ae.webp" srcset="/tutorials/uptime-kuma-monitoring/kuma-setup_hu_d81de5823c4df6b.webp 480w, /tutorials/uptime-kuma-monitoring/kuma-setup_hu_efd590bbed8353ae.webp 768w, /tutorials/uptime-kuma-monitoring/kuma-setup_hu_a19456213e4e011c.webp 1200w, /tutorials/uptime-kuma-monitoring/kuma-setup_hu_5b8bc0792bdf01af.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/uptime-kuma-monitoring/kuma-setup_hu_7c7eee8b248ca320.webp"
    alt="Uptime Kumas Ersteinrichtung: Sprache wählen und das Admin-Konto anlegen" title="Ersteinrichtung: Sprache wählen und Admin-Konto anlegen"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Ersteinrichtung: Sprache wählen und Admin-Konto anlegen</figcaption></figure></p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-amber-400 bg-amber-50 dark:border-amber-700 dark:bg-amber-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">⚠️</span>Sofort das Admin-Konto anlegen
  </p>
  <div class="prose-kitchen text-sm">Solange kein Admin-Konto existiert, kann <strong>jeder</strong>, der die Seite aufruft, eines
anlegen. Erledige das direkt nach dem ersten Start – nicht „später&quot;.</div>
</div>
<h3 id="schritt-3-den-ersten-monitor-anlegen">Schritt 3: Den ersten Monitor anlegen</h3>
<p>Ein <strong>Monitor</strong> ist eine wiederkehrende Prüfung. Klicke auf <strong>Neuen Monitor
hinzufügen</strong> und lege einen für Traefik selbst an:</p>
<ul>
<li><strong>Monitortyp:</strong> <code>HTTP(s)</code></li>
<li><strong>Freundlicher Name:</strong> <code>Traefik Dashboard</code></li>
<li><strong>URL:</strong> <code>https://traefik.DEINE_DOMAIN</code></li>
<li><strong>Prüfintervall:</strong> <code>60</code> Sekunden</li>
<li><strong>Authentifizierung:</strong> Das Traefik-Dashboard ist per Basic-Auth geschützt
(Schritt 7 des <a href="/tutorials/reverse-proxy-traefik/">Traefik-Tutorials</a>) – wähle
deshalb unten <strong>HTTP Basic Auth</strong> als Authentifizierungsmethode und trage
Benutzer und Passwort ein. Ohne Zugangsdaten bekommt Kuma nur <code>401</code> und meldet
den Monitor als <strong>Down</strong>.</li>
</ul>
<p>Speichern – nach wenigen Sekunden steht der Monitor auf <strong>Online</strong> (grün) und zeigt
die Antwortzeit.</p>
<p><figure class="my-6"><img src="/tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_784a44c058559b8d.webp" srcset="/tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_1971a2e8e4bcb854.webp 480w, /tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_784a44c058559b8d.webp 768w, /tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_5e8aad21b68e4d26.webp 1200w, /tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_bc95a5405a757e2b.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/uptime-kuma-monitoring/kuma-dashboard_hu_2d577b17b1d1a329.webp"
    alt="Das Uptime-Kuma-Dashboard mit zwei laufenden Monitoren – beide grün mit 100 % Verfügbarkeit und „200 – OK&quot;" title="Das Dashboard mit zwei laufenden Monitoren"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Das Dashboard mit zwei laufenden Monitoren</figcaption></figure></p>
<p>Neben dem einfachen <code>HTTP(s)</code>-Check lohnt es sich, den passenden <strong>Monitortyp</strong> zu
wählen:</p>
<ul>
<li><strong>HTTP(s) – Keyword:</strong> prüft zusätzlich, ob ein bestimmtes Wort im Antworttext
steht. So erkennst du „Server antwortet zwar, zeigt aber eine Fehlerseite&quot;.</li>
<li><strong>TCP-Port:</strong> für Dienste ohne Web-Oberfläche (z. B. eine Datenbank, ein
SSH-Port). Prüft nur, ob der Port offen ist.</li>
<li><strong>Ping:</strong> einfachster Erreichbarkeitstest per ICMP.</li>
<li><strong>Docker-Container:</strong> prüft direkt den Container-Status über den Docker-Socket –
praktisch für interne Dienste ohne eigene Domain.</li>
<li><strong>Push:</strong> hier ruft <em>der überwachte Dienst</em> Kuma regelmäßig an. Ideal für Cronjobs
und Backups: meldet sich das Skript nicht rechtzeitig, schlägt Kuma Alarm
(„Dead man&rsquo;s switch&quot;).</li>
</ul>
<p>Lege für jeden wichtigen Dienst den passenden Monitor an.</p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-herb-400 bg-herb-50 dark:border-herb-700 dark:bg-herb-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">🧑‍🍳</span>Tipp
  </p>
  <div class="prose-kitchen text-sm">Prüfe <strong>öffentliche Dienste über ihre echte Domain</strong> (<code>https://…</code>), nicht über
<code>localhost</code>. So testest du zugleich, dass Traefik und das Zertifikat von außen
funktionieren – nicht nur, dass der Container läuft.</div>
</div>
<p>Beim <code>HTTP(s)</code>-Monitor lohnt sich zusätzlich die Option
<strong>„Zertifikatsablauf-Benachrichtigung&quot;</strong>: Kuma warnt dann rechtzeitig, bevor ein
TLS-Zertifikat ausläuft. Bei Diensten hinter Traefik erneuert Let&rsquo;s Encrypt zwar
automatisch – aber genau dieser Automatismus fällt gelegentlich leise aus (ein
DNS-Record wird geändert, Port 80 versehentlich zugemacht). Der Monitor ist dein
Sicherheitsnetz und meldet sich, solange noch Tage zum Reparieren bleiben, statt dass
Besucher plötzlich vor einer Zertifikatswarnung stehen.</p>
<h3 id="schritt-4-benachrichtigungen-einrichten-e-mail-und-telegram">Schritt 4: Benachrichtigungen einrichten (E-Mail und Telegram)</h3>
<p>Ein Monitor ohne Alarm ist nur ein hübsches Diagramm. Unter <strong>Einstellungen →
Benachrichtigungen → Benachrichtigung einrichten</strong> legst du einen Kanal an. Uptime
Kuma unterstützt über 90 – wir richten die zwei häufigsten komplett ein: <strong>E-Mail</strong>
für die klassische Nachricht und <strong>Telegram</strong> für Push direkt aufs Handy.</p>
<h4 id="e-mail-smtp">E-Mail (SMTP)</h4>
<p>Wähle als <strong>Benachrichtigungsdienst</strong> „E-Mail (SMTP)&quot; und trage die Daten deines
Mailanbieters ein:</p>
<ul>
<li><strong>Hostname / Port:</strong> z. B. <code>smtp.DEIN_ANBIETER.de</code> und <code>587</code></li>
<li><strong>Sicherheit:</strong> <code>STARTTLS</code> (Port 587) oder <code>TLS/SSL</code> (Port 465)</li>
<li><strong>Benutzername / Passwort:</strong> deine SMTP-Zugangsdaten</li>
<li><strong>Absender- / Empfänger-Adresse:</strong> von welcher Adresse die Warnung kommt und an
welche sie geschickt wird</li>
</ul>
<p><figure class="my-6"><img src="/tutorials/uptime-kuma-monitoring/kuma-email_hu_d2820d36f82b537d.webp" srcset="/tutorials/uptime-kuma-monitoring/kuma-email_hu_d4dc428dbefa278e.webp 480w, /tutorials/uptime-kuma-monitoring/kuma-email_hu_d2820d36f82b537d.webp 768w, /tutorials/uptime-kuma-monitoring/kuma-email_hu_6c4b750c2a8c2946.webp 1200w, /tutorials/uptime-kuma-monitoring/kuma-email_hu_a8c700607ce6ed62.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/uptime-kuma-monitoring/kuma-email_hu_c3b1043311d6491b.webp"
    alt="Die E-Mail-Benachrichtigung (SMTP) in Uptime Kuma: Hostname, Port, Sicherheit und Absenderadresse" title="E-Mail-Benachrichtigung (SMTP) einrichten"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">E-Mail-Benachrichtigung (SMTP) einrichten</figcaption></figure></p>
<p>Klick auf <strong>Test</strong> – innerhalb weniger Sekunden landet eine Testnachricht im
Postfach. Erst wenn die wirklich ankommt, stimmen Zugangsdaten und Port. Speichern
nicht vergessen.</p>
<h4 id="telegram">Telegram</h4>
<p>Telegram ist ideal für sofortige Push-Alarme aufs Handy – ohne eigenen Mailserver.
Du brauchst zwei Angaben:</p>
<ol>
<li><strong>Bot-Token:</strong> Schreib in Telegram <a href="https://t.me/BotFather">@BotFather</a> an, sende
<code>/newbot</code>, vergib einen Namen – BotFather antwortet mit dem <strong>Token</strong>.</li>
<li><strong>Chat-ID:</strong> Schreib deinem neuen Bot eine beliebige Nachricht, ruf dann
<code>https://api.telegram.org/bot&lt;DEIN_TOKEN&gt;/getUpdates</code> im Browser auf und lies die
<code>chat.id</code> aus der Antwort.</li>
</ol>
<p>Trage Token und Chat-ID in die Telegram-Benachrichtigung ein (Uptime Kuma verlinkt
beide Hilfen direkt im Dialog) und klick <strong>Test</strong> – die Nachricht sollte sofort im
Chat erscheinen.</p>
<p><figure class="my-6"><img src="/tutorials/uptime-kuma-monitoring/kuma-telegram_hu_47456c4bec88e7e5.webp" srcset="/tutorials/uptime-kuma-monitoring/kuma-telegram_hu_fb559c371c833a22.webp 480w, /tutorials/uptime-kuma-monitoring/kuma-telegram_hu_47456c4bec88e7e5.webp 768w, /tutorials/uptime-kuma-monitoring/kuma-telegram_hu_ff4d40c3b064e2f8.webp 1200w, /tutorials/uptime-kuma-monitoring/kuma-telegram_hu_211e84e50a4d3d92.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/uptime-kuma-monitoring/kuma-telegram_hu_ba0db8d5a803ec3.webp"
    alt="Die Telegram-Benachrichtigung in Uptime Kuma: Bot-Token und Chat-ID, mit Direktlink zum BotFather" title="Telegram-Benachrichtigung: Bot-Token und Chat-ID"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Telegram-Benachrichtigung: Bot-Token und Chat-ID</figcaption></figure></p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-amber-400 bg-amber-50 dark:border-amber-700 dark:bg-amber-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">⚠️</span>Sonst bleibt der Alarm stumm
  </p>
  <div class="prose-kitchen text-sm">Eine eingerichtete Benachrichtigung greift <strong>nicht automatisch</strong>. Aktiviere sie in
jedem Monitor (Häkchen im Monitor-Formular) oder schalte im Benachrichtigungs-Dialog
„Standardmäßig aktiviert&quot; ein und „Auf alle existierenden Monitore anwenden&quot;.</div>
</div>
<p>Willst du Push-Nachrichten komplett in Eigenregie (ohne Telegram-Server), kommt
später <strong>ntfy</strong> dazu – selbst gehostet, mit eigenem Rezept in der Serie.</p>
<h3 id="schritt-5-eine-öffentliche-status-seite-optional">Schritt 5: Eine öffentliche Status-Seite (optional)</h3>
<p>Kuma kann eine <strong>Status-Seite</strong> veröffentlichen, auf der Besucher sehen, ob deine
Dienste laufen. So gehst du vor:</p>
<ol>
<li><strong>Statusseiten → Neue Status-Seite</strong>, dann <strong>Name</strong> (z. B. „Serverküche Status&quot;)
und <strong>Slug</strong> (die URL, z. B. <code>serverkueche</code>) vergeben und auf <strong>Weiter</strong> klicken.</li>
<li>Im Editor <strong>Gruppe hinzufügen</strong> (z. B. „Dienste&quot;), darunter über das Auswahlfeld
die gewünschten <strong>Monitore</strong> hinzufügen.</li>
<li>Oben rechts <strong>Speichern</strong> – fertig. Öffentlich erreichbar ist die Seite dann unter
<code>https://status.DEINE_DOMAIN/status/serverkueche</code>.</li>
</ol>
<p>Nimm nur auf, was wirklich jeder sehen darf – interne Dienste besser weglassen.</p>
<p><figure class="my-6"><img src="/tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_8dcf3c3b4a248dc0.webp" srcset="/tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_919f065502781fb5.webp 480w, /tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_8dcf3c3b4a248dc0.webp 768w, /tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_77bf40b6f6dc2672.webp 1200w, /tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_10c7a7de5007888a.webp 1920w" sizes="(min-width: 768px) 768px, 100vw"
    width="768" height="432"
    data-full="/tutorials/uptime-kuma-monitoring/kuma-statusseite_hu_af2b2c49fa2d50d3.webp"
    alt="Die öffentliche Status-Seite „Serverküche Status&quot;: „Alle Systeme funktionsfähig&quot; und beide Dienste mit 100 % Verfügbarkeit" title="Die fertige öffentliche Status-Seite"
    loading="lazy" decoding="async" class="rounded-lg"><figcaption class="mt-2 text-sm text-center text-slate-500 italic">Die fertige öffentliche Status-Seite</figcaption></figure></p>
<h3 id="schritt-6-fehlalarme-vermeiden--das-alarm-verhalten-feinjustieren">Schritt 6: Fehlalarme vermeiden – das Alarm-Verhalten feinjustieren</h3>
<p>Ein Monitor, der bei jedem kurzen Netzwerk-Schluckauf Alarm schlägt, wird schnell
ignoriert – und dann verpasst du den echten Ausfall. Im Monitor-Formular stellst du
das Verhalten passend ein:</p>
<ul>
<li><strong>Wiederholungen (Retries):</strong> Erst nach <em>n</em> fehlgeschlagenen Prüfungen gilt der
Dienst als „Down&quot;. <code>2</code>–<code>3</code> filtert einzelne Aussetzer heraus, ohne echte Ausfälle
lange zu verschleiern.</li>
<li><strong>Heartbeat-Intervall bei Ausfall:</strong> Kuma darf im Fehlerfall häufiger prüfen
(z. B. alle 20 Sekunden), um die Erholung schnell zu erkennen.</li>
<li><strong>Erneut benachrichtigen:</strong> Kuma kann dich alle <em>x</em> Minuten erinnern, solange ein
Dienst down ist – nützlich, damit ein Ausfall nachts nicht in einer einzigen
Mail untergeht.</li>
</ul>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-herb-400 bg-herb-50 dark:border-herb-700 dark:bg-herb-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">🧑‍🍳</span>Wartungsfenster einplanen
  </p>
  <div class="prose-kitchen text-sm">Planst du ein Update mit Downtime, lege unter <strong>Wartung</strong> ein <strong>Wartungsfenster</strong> an.
Kuma pausiert dann die Alarme für die betroffenen Monitore – so bekommst du (und die
Status-Seite) keine Fehlalarme, während du selbst am Werk bist.</div>
</div>
<h3 id="schritt-7-cronjobs-überwachen-mit-einem-push-monitor">Schritt 7: Cronjobs überwachen mit einem Push-Monitor</h3>
<p>Klassische Monitore prüfen von außen, ob ein Dienst <em>antwortet</em>. Für Dinge, die
<strong>still im Hintergrund laufen</strong> – ein nächtliches Backup, ein Sync-Skript, ein
Cronjob – dreht der <strong>Push-Monitor</strong> das Prinzip um: Nicht Kuma fragt an, sondern
<em>dein Skript meldet sich</em>. Bleibt die Meldung aus, schlägt Kuma Alarm – der klassische
„Dead man&rsquo;s switch&quot;.</p>
<p>Lege einen Monitor vom Typ <strong>Push</strong> an. Kuma zeigt dir dann eine eindeutige
<strong>Push-URL</strong>:</p>
<div class="sk-code">
  <span class="sk-code-head">Ausgabe</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">https://status.DEINE_DOMAIN/api/push/DEIN_TOKEN?status=up&amp;msg=OK&amp;ping=</span></span></code></pre></div>
</div>
<p>Diese URL rufst du am Ende deines Skripts auf – zum Beispiel nach einem erfolgreich
durchgelaufenen Backup:</p>
<div class="sk-code">
  <span class="sk-code-head">Terminal</span>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># ... dein Backup-Befehl ...</span>
</span></span><span class="line"><span class="cl">curl -fsS <span class="s2">&#34;https://status.DEINE_DOMAIN/api/push/DEIN_TOKEN?status=up&amp;msg=Backup+OK&#34;</span> &gt; /dev/null</span></span></code></pre></div>
</div>
<p>Stell das <strong>Prüfintervall</strong> in Kuma etwas großzügiger ein als deinen Cron-Takt (läuft
das Backup stündlich, gib Kuma z. B. 90 Minuten Toleranz). Kommt in dieser Zeit kein
<code>curl</code>, geht der Monitor auf <strong>Down</strong> und du wirst benachrichtigt – du erfährst also
von einem <em>nicht</em> gelaufenen Backup, nicht erst, wenn du es dringend brauchst.</p>
<h3 id="schritt-8-den-admin-login-mit-2fa-absichern">Schritt 8: Den Admin-Login mit 2FA absichern</h3>
<p>Dein Kuma-Login schützt den Zugang zu allen Monitoren, den hinterlegten
Benachrichtigungs-Zugangsdaten und der Status-Seiten-Konfiguration – und er hängt
öffentlich im Netz. Schalte deshalb <strong>Zwei-Faktor-Authentifizierung</strong> ein: unter
<strong>Einstellungen → Sicherheit → Zwei-Faktor-Authentifizierung</strong>. Kuma zeigt einen
QR-Code, den du mit einer Authenticator-App (z. B. Aegis oder 2FAS) scannst; zum
Aktivieren gibst du einmal den erzeugten Code ein.</p>
<div class="not-prose my-6 rounded-lg border-l-4 p-4 border-herb-400 bg-herb-50 dark:border-herb-700 dark:bg-herb-900/20">
  <p class="mb-1 flex items-center gap-2 font-semibold text-slate-900 dark:text-white">
    <span aria-hidden="true">🧑‍🍳</span>Wiederherstellung absichern
  </p>
  <div class="prose-kitchen text-sm">Bewahre das TOTP-Secret bzw. einen zweiten Authenticator an einem sicheren Ort auf
(Passwortmanager). Verlierst du dein Telefon <strong>und</strong> hast keine Kopie, kommst du sonst
nur noch über die Datenbank im <code>kuma-data</code>-Volume wieder hinein.</div>
</div>
<h2 id="wenn-es-nicht-funktioniert">Wenn es nicht funktioniert</h2>
<p><strong>Symptom:</strong> <code>Bad Gateway</code> (502) beim Aufruf von <code>status.DEINE_DOMAIN</code>.</p>
<p><strong>Ursache &amp; Lösung:</strong> Fast immer fehlt das Port-Label
<code>traefik.http.services.kuma.loadbalancer.server.port=3001</code> oder es steht ein
falscher Port drin. Traefik erreicht den Container dann zwar, klopft aber am
falschen Port an. Label prüfen und <code>docker compose up -d</code> erneut ausführen.</p>
<p><strong>Symptom:</strong> <code>404 page not found</code> statt Kuma.</p>
<p><strong>Ursache &amp; Lösung:</strong> Wie bei jeder App hinter Traefik: <code>traefik.enable=true</code>
gesetzt? Container im <code>proxy</code>-Netzwerk? Stimmt die Domain in der <code>Host(...)</code>-Regel
und zeigt der DNS-Record <code>status.DEINE_DOMAIN</code> auf den Server? Das Traefik-Dashboard
zeigt unter „HTTP Routers&quot;, ob <code>kuma</code> registriert ist.</p>
<p><strong>Symptom:</strong> Die Oberfläche lädt, aber die Live-Aktualisierung ruckelt / bricht ab.</p>
<p><strong>Ursache &amp; Lösung:</strong> Kuma nutzt WebSockets. Traefik leitet die standardmäßig korrekt
weiter – tritt das Problem trotzdem auf, liegt es meist an einem davorgeschalteten
CDN/Proxy (z. B. Cloudflare im „Proxy&quot;-Modus), der WebSockets blockt. Für den
Direktbetrieb hinter Traefik ist keine Zusatzkonfiguration nötig.</p>
<p><strong>Symptom:</strong> Nach einem Neuaufsetzen sind alle Monitore weg.</p>
<p><strong>Ursache &amp; Lösung:</strong> Das <code>kuma-data</code>-Volume wurde gelöscht (z. B. durch
<code>docker compose down -v</code>). Alle Konfiguration und Historie liegt allein in diesem
Volume – deshalb steht es im nächsten Abschnitt ganz oben.</p>
<h2 id="wartung--backups">Wartung &amp; Backups</h2>
<ul>
<li><strong>Sichern:</strong> Das komplette Herz von Kuma ist das Volume <code>kuma-data</code> (eine
SQLite-Datenbank). Sichere es regelmäßig – ist es weg, sind alle Monitore und die
Historie weg. Das Off-Site-Backup dafür bauen wir im
<a href="/tutorials/backups-mit-restic/">Restic-Tutorial</a>.</li>
<li><strong>Updates:</strong> Tag <code>:2</code> bleibt bei der 2.x-Reihe und bringt Fehlerbehebungen mit
<code>docker compose pull &amp;&amp; docker compose up -d</code>. Vor einem Sprung auf eine neue
Hauptversion (z. B. später <code>:3</code>) die Release-Notes lesen und vorher das Volume
sichern.</li>
<li><strong>Von 1.x kommend?</strong> Der Wechsel auf <code>:2</code> <strong>migriert die SQLite-Datenbank beim
ersten Start automatisch</strong> – das kann einen Moment dauern, und ein Zurück auf <code>:1</code>
ist danach nicht vorgesehen. Sichere deshalb <strong>vorher</strong> das <code>kuma-data</code>-Volume, dann
bist du auf der sicheren Seite. Neu-Installationen (wie oben) betrifft das nicht.</li>
<li><strong>Ehrliche Einschränkung:</strong> Ein Monitor, der <strong>auf demselben Server</strong> läuft wie die
überwachten Dienste, kann dich nicht warnen, wenn der ganze Server ausfällt – dann
ist auch Kuma offline. Ergänze für den Ernstfall einen <strong>externen</strong> Wächter. Zwei
günstige Wege: ein <strong>zweites Uptime Kuma</strong> auf einem kleinen Server (oder zu Hause),
das nur diese Instanz per HTTP überwacht – oder ein <strong>kostenloser externer
Ping-Dienst</strong>, der deine öffentliche Status-Seite anpingt. So bekommst du auch dann
eine Meldung, wenn der ganze Host weg ist – der einzige Fall, den ein lokaler
Monitor prinzipbedingt nicht abdecken kann.</li>
</ul>
<p>Damit hast du das App-Muster verinnerlicht und überwachst ab sofort alles, was du
hinter Traefik hängst. Was jede weitere App voraussetzt, sind
<a href="/tutorials/backups-mit-restic/">verschlüsselte Off-Site-Backups mit Restic</a> –
damit deine Daten einen Servercrash überleben.</p>
]]></content:encoded></item></channel></rss>