Zum Inhalt springen

So erstellen Sie mit Upptime kostenlos eine eigene Statusseite

Seite bearbeiten
HagiCode for Windows Microsoft Store artwork
HagiCode for Windows is now on Microsoft Store
HagiCode for Windows is officially live on Microsoft Store. Windows users can install it directly from the storefront and stay on the store-managed update path. Open the listing and take a look.
Open Microsoft Store

So erstellen Sie mit Upptime kostenlos eine eigene Statusseite

Das gesamte Monitoring in ein GitHub-Repository verlagern – Actions als Sonden, das Repository als Datenbank, Pages als CDN und Issues als Ereignisprotokoll. Null Server, keine monatlichen Gebühren, und trotzdem eine funktionale Statusseite mit Überwachung, Abfragen und Aufzeichnung. Ob man es jetzt Black Magic nennt oder die Weisheit der Armen – es funktioniert jedenfalls.

Hintergrund

Wenn man eine kleine Produktmatrix aus einem Dutzend externer Services betreibt, wird die Frage “funktioniert es überhaupt?” schnell zum ständigen Begleiter. Kunden melden, dass sie nicht zugreifen können, Sie SSH auf den Server und curl und alles scheint in Ordnung zu sein; ein paar Minuten später ist es wieder ausgefallen, aber Sie haben es diesmal nicht bemerkt. Kommerzielle Monitoring-Lösungen (Pingdom, Premium-Tarif von UptimeRobot, Datadog) können das zwar lösen, aber entweder pro Website oder pro Anfrage abgerechnet – für einen unabhängigen Entwickler sind die Kosten und der mentale Aufwand oft nicht rentabel.

Noch wichtiger ist, dass die Statusseite selbst für Benutzer einsehbar sein muss. Das ideale Aussehen wäre: eine Domain (zum Beispiel status.hagicode.com), die in Echtzeit die Verfügbarkeit jedes Services, die Antwortzeitkurven, historische Ereignisse anzeigt und bei Ausfällen automatisch Spuren hinterlässt und benachrichtigt. Die herkömmliche Methode benötigt vier Komponenten – einen Server für cron, eine Datenbank für historische Daten, eine Frontend-Site und ein CDN. Wenn man diese vier Komponenten aufstellt, übersteigen die Betriebskosten sofort die der überwachten Services – schließlich verwendet man einen Dampfh zum Hühnerschlachten, und das Huhn fühlt sich noch eingeengt.

Um diese Schmerzpunkte zu lösen, haben wir eine Entscheidung getroffen: die gesamte Monitoring-Lösung direkt auf GitHub zu verlagern. Die Änderungen, die diese Entscheidung mit sich bringt, könnten größer sein als Sie denken – dazu später mehr.

Über HagiCode

Die in diesem Artikel vorgestellte Lösung basiert auf unseren Erfahrungen im HagiCode Projekt. HagiCode ist ein KI-Coding-Assistent-Projekt, das über ein Dutzend öffentliche Services wie Websites, Dokumentationsseiten und Download-Endpunkte bereitstellt und hinter den Kulissen vom Haupt-Repository HagiCode-org/site angetrieben wird. Diese Sites müssen stabil und verfügbar sein, sodass Statusüberwachung für uns keine Option, sondern eine Notwendigkeit ist. Die folgende Upptime-Lösung ist genau das, was HagiCode in der Produktionsumgebung tatsächlich verwendet – keine Erfindung meinerseits.

Analyse: Wie funktioniert Upptime eigentlich

Im Kern ist Upptime ein GitHub-Repository-Template plus sechs Workflows, die aus dem Template generiert werden. Der Schlüssel zum Verständnis ist zu sehen, “wer wann wen aufruft und wo was landet”. Wenn man es aufteilt, ist es gar nicht so geheimnisvoll.

Datenfluss: Eine Konfigurationsdatei steuert alles

Das gesamte System dreht sich um die eine deklarative Konfigurationsdatei .upptimerc.yml. Die tatsächliche Konfigurationsstruktur von HagiCode sieht ungefähr so aus:

owner: HagiCode-org
repo: upptime
sites:
- name: HagiCode Website
url: https://www.hagicode.com
- name: HagiCode Docs
url: https://docs.hagicode.com
- name: Server Package Index
url: https://index.hagicode.com/server/index.json
# ... insgesamt 14 Sites
status-website:
cname: status.hagicode.com
logoUrl: https://raw.githubusercontent.com/HagiCode-org/upptime/master/assets/upptime-icon.svg
name: HagiCode Status
introTitle: "**HagiCode Status**"
introMessage: Real-time availability tracking for public HagiCode websites and download endpoints.
navbar:
- title: Status
href: /
- title: GitHub
href: https://github.com/$OWNER/$REPO

Es gibt zwei Punkte, die erwähnenswert sind. Erstens kann sites sowohl Webseiten (die HTML zurückgeben) als auch reine JSON-Endpunkte (wie index.json) überwachen – Upptime prüft nur den HTTP-Statuscode und die Antwortzeit, keine Inhaltsvalidierung. Zweitens zeigt cname auf status.hagicode.com, was bedeutet, dass Sie diese Domain besitzen und das DNS auf GitHub Pages verweisen müssen – schließlich: kostenlos ist kostenlos, aber die Domain müssen Sie schon selbst stellen.

Die Aufteilung der sechs Workflows

Alle Dateien unter .github/workflows/ haben oben eine Warnung Do not edit this file directly! – sie werden每周 vom Template automatisch aktualisiert, Sie ändern nur .upptimerc.yml. Jeder Workflow wird per cron ausgelöst, ruft verschiedene Unterbefehle derselben Action upptime/uptime-monitor@v1.42.6 auf, und die Aufteilung ist klar und beruhigend:

WorkflowcronBefehlFunktion
uptime.yml*/5 * * * *updateAlle 5 Minuten auf Erreichbarkeit prüfen, history/*.yml schreiben
response-time.ymlresponse-timeAntwortzeitstatistiken berechnen
graphs.ymlgraphsTages-/Wochen-/Monats-/Jahres-PNG-Kurven generieren
summary.ymlsummaryStatustabelle in README aktualisieren
site.yml0 1 * * *siteTäglich statische Site bauen, auf Pages deployen
update-template.yml0 0 * * *Wöchentlich Upstream-Template synchronisieren

Der Kernabschnitt von uptime.yml zeigt, wie die “Sonde” läuft:

on:
schedule:
- cron: "*/5 * * * *"
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GH_PAT || github.token }}
- name: Check endpoint status
uses: upptime/uptime-monitor@v1.42.6
with:
command: "update"
env:
GH_PAT: ${{ secrets.GH_PAT || github.token }}
SECRETS_CONTEXT: ${{ toJson(secrets) }}

site.yml hat einen zusätzlichen Schritt und nutzt peaceiris/actions-gh-pages@v4, um die Build-Artefakte in den gh-pages-Branch zu pushen:

- uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GH_PAT || github.token }}
publish_dir: "site/status-page/__sapper__/export/"
user_name: "Upptime Bot"
user_email: "73812536+upptime-bot@users.noreply.github.com"

Datenpersistenz: Dateien als Datenbank

Überwachungsergebnisse werden nicht in einer Datenbank gespeichert, sondern direkt als Dateien per Commit zurück ins Repository committed. Das klingt etwas wild, ist aber in der Praxis recht zuverlässig. Jede Site hat drei Arten von Artefakten.

Status-Snapshots history/{slug}.yml, zum Beispiel history/hagi-code-website.yml:

url: https://www.hagicode.com
status: up
code: 200
responseTime: 96
lastUpdated: 2026-06-17T00:22:34.485Z
startTime: 2026-03-24T10:07:32.531Z

shields.io endpoint badge Datenquellen api/{slug}/response-time.json, uptime.json:

{"schemaVersion":1,"label":"response time","message":"739 ms","color":"yellow"}

sowie Antwortzeitkurven graphs/{slug}/response-time-{day,week,month,year}.png.

Der Kompromiss bei diesem Ansatz “Dateien als Datenbank” ist gut durchdacht: viele Schreibungen, wenige Lesezugriffe, skalierbar (jede Site sammelt etwa 288 Samples pro Tag, inkrementell statt vollständig gespeichert), natürliche Versionshistorie, null Infrastruktur. Der Preis ist, dass das Repository kontinuierlich wächst und man gelegentlich einen Blick darauf werfen muss.

Ereignisse und Benachrichtigungen: Issues als Ereignisprotokoll

Die Aufzeichnung von Ausfällen erfolgt über GitHub Issues, unterstützt durch zwei integrierte Templates: .github/ISSUE_TEMPLATE/bug_report.md (Benutzerfehlermeldung) und maintainance-event.md (geplante Wartung). Das Wartungstemplate verwendet Frontmatter für das Zeitfenster:

<!--
start: 2021-08-24T13:00:00.220Z
end: 2021-08-24T14:00:00.220Z
expectedDown: google, hacker-news
-->

Upptime analysiert diese Issues und rendert “Wartung läuft” und “Vergangene Ereignisse” auf der Statusseite und im README. Benachrichtigungen erfolgen über die Watch-Mechanismen der Issues selbst, zusätzlich zu konfigurierbaren webhooks, Slack, Telegram (indem Sie oben in .upptimerc.yml notifications deklarieren – das Beispiel-Repository von HagiCode hat dies derzeit nicht aktiviert, schließlich: weniger ist mehr).

Lösung: Fünf Schritte zu einer eigenen Statusseite

Um eine HagiCode-ähnliche Statusseite nachzubauen, von Null bis online, sind es insgesamt fünf Schritte. Fünf Schritte – aber jeder ist nicht lang, machen Sie es einfach Schritt für Schritt.

Schritt 1: Repository aus Template erstellen

Klonen Sie nicht mit git clone und ändern dann, sondern erstellen Sie das Repository direkt mit GitHubs “Use this template” (zum Beispiel your-org/upptime). Das Template enthält bereits alle Workflows, Issue-Templates und das Skelett der statischen Site. Nach dem Clonen lokal müssen Sie nur .upptimerc.yml manuell anpassen – alles andere lassen Sie einfach so wie es ist.

Schritt 2: .upptimerc.yml bearbeiten

Ändern Sie owner/repo zu Ihren Werten, listen Sie die zu überwachenden Adressen in sites auf, und konfigurieren Sie die Site in status-website. Die minimal funktionsfähige Version sieht ungefähr so aus:

owner: your-org
repo: upptime
sites:
- name: Main Site
url: https://example.com
- name: API Health
url: https://api.example.com/health
expectedStatusCodes:
- 200
status-website:
cname: status.example.com # kann ohne Domain gelöscht werden, nutzt dann your-org.github.io/upptime
name: Example Status
introTitle: "**Example Status**"
introMessage: Echtzeitüberwachung der Serviceverfügbarkeit
navbar:
- title: Status
href: /
- title: GitHub
href: https://github.com/$OWNER/$REPO

Fortgeschrittene Optionen: expectedStatusCodes begrenzt akzeptierte Statuscodes (Standard 200-399); headers für benutzerdefinierte Request-Header (für Endpunkte, die Authentifizierung benötigen); maxResponseTime markiert langsame Antworten. All das nehmen Sie einfach nach Bedarf.

Schritt 3: Secret und Berechtigungen konfigurieren

Der Workflow verwendet standardmäßig ${{ secrets.GH_PAT || github.token }}. github.token kann den grundlegenden Prozess ausführen, hat aber zwei Einschränkungen, die beißen können:

  1. Workflows, die durch das Standard-Token ausgelöst werden, lösen keine nachgelagerten Workflows aus (zur Vermeidung von Schleifen), wodurch die Kette “Erreichbarkeitsprüfung → Issue erstellen → Benachrichtigung” unterbrochen wird.
  2. Unzureichende Berechtigungen für übergreifende Repository-Operationen (z. B. mehrere Organisationen).

Es wird empfohlen, einen neuen PAT zu erstellen (benötigt repo + workflow Berechtigungen) und als Repository-Secret GH_PAT zu speichern. In update-template.yml gibt es einen speziellen Check: ohne GH_PAT wird die automatische Template-Aktualisierung übersprungen und eine Warnung ausgegeben, also ist dieses Secret nicht nur optional, sondern entscheidend für Stressfreiheit.

Schritt 4: GitHub Pages aktivieren

Repository Settings → Pages → Source wählen Sie Deploy from a branch, Branch wählen Sie gh-pages, Verzeichnis /root. site.yml wird jeden Tag um 1 Uhr morgens automatisch die Build-Artefakte in diesen Branch pushen. Wenn Sie cname konfiguriert haben, fügen Sie bei Ihrem DNS-Anbieter einen CNAME-Eintrag hinzu, der auf your-org.github.io zeigt.

Sie können es auch einmal manuell auslösen: Auf der Actions-Seite finden Sie “Static Site CI” → Run workflow, anstatt auf die geplante Aufgabe zu warten – schließlich ist es besser, eine Sekunde früher das Ergebnis zu sehen, um eine Sekunde früher beruhigt zu sein.

Schritt 5: Überprüfung und Wartung

Nach dem Push der Konfiguration sehen Sie in Actions, ob “Uptime CI” alle 5 Minuten läuft und ob history/ mit *.yml-Dateien beginnt zu füllen. Die Statusseiten-URL ist https://<your-org>.github.io/upptime/ oder Ihre benutzerdefinierte Domain. Spätere Hinzufügungen von Sites, Änderungen der Domain – alles, was Sie tun müssen, ist .upptimerc.yml zu ändern, die Workflows sind vollautomatisch. HagiCode hat sich über ein Jahr lang auf diesen Mechanismus verlassen, um die Verfügbarkeit von 14 Endpunkten zu gewährleisten, und es war im Grunde keine Sorgen nötig.

Praxis: Die Fallen, die wir ausgetestet haben

Die folgenden Punkte sind Erfahrungen, die HagiCode im tatsächlichen Betrieb gesammelt hat – geschrieben, damit Sie weniger Umwege machen müssen.

Praxis 1: Wahl der Überwachungsgranularität

HagiCode listet Webseiten (https://www.hagicode.com) und reine Datenendpunkte (https://index.hagicode.com/server/index.json) in derselben sites-Liste. Für JSON-Endpunkte sendet Upptime eine Anfrage und analysiert den HTTP-Statuscode, validiert aber nicht die Inhaltsstruktur. Wenn Sie eine tiefere Prüfung wie “200 zurückgeben, aber Inhalt falsch” benötigen, müssen Sie expectedStatusCodes mit externen Sonden ergänzen – Upptime selbst macht nur Black-Box-HTTP-Prüfungen, es prüft nur das Gesicht, nicht den Inhalt.

Praxis 2: Cleverer Einsatz von Antwortzeit-Badges

api/{slug}/response-time.json ist eine Datenquelle für shields.io endpoint badges. Das README von HagiCode referenziert solche URLs extensiv:

https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FHagiCode-org%2Fupptime%2FHEAD%2Fapi%2Fhagi-code-website%2Fresponse-time.json

So können Sie Echtzeit-Antwortzeit-Badges in jedes Markdown einbetten (Projekt-README, Blog, Drittanbieter-Seiten), die Farbe wird durch den Wert in message und das Feld color gesteuert. Achten Sie darauf, HEAD statt master/main zu verwenden, um raw-Dateien zu referenzieren – das vermeidet großflächige Ausfälle nach Branch-Umbenennungen. In Details verbirgt sich Stabilität.

Praxis 3: Kontrolle der Repository-Größe

Alle fünf Minuten ein Sample über ein Jahr summiert sich zu einem beachtlichen Volumen in history/. Upptime verwendet inkrementelles YAML statt vollständiger Logs, was relativ zurückhaltend ist, aber dennoch sollten Sie regelmäßig die Repository-Größe prüfen. Wenn der Überwachungswert einer Site sinkt, entfernen Sie sie einfach aus sites; die entsprechenden historischen Dateien können auch manuell bereinigt werden – schließlich: wer nicht löscht, wird bald mit einem aufgeblähten Repository konfrontiert.

Praxis 4: Echte Verwendung von Wartungsereignissen

maintainance-event.md ist keine Dekoration. Bevor Sie eine Version veröffentlichen, erstellen Sie ein Issue nach dem Template, füllen start/end/expectedDown aus, und Upptime markiert die entsprechenden Sites in diesem Zeitraum als “geplante Wartung”, nicht in der Verfügbarkeitsstatistik berücksichtigt, wodurch eine normale Veröffentlichung nicht die jährliche SLA herabzieht. expectedDown von HagiCode unterstützt eine durch Kommas getrennte Liste von Site-Namen, die genau mit sites[].name korrespondiert.

Praxis 5: Grenzen zwischen Template-Aktualisierung und Anpassung

Die Do not edit this file directly! oben in allen .github/workflows/*.yml ist keine Drohung. update-template.yml überschreibt diese Dateien wöchentlich mit dem Upstream-Template. Wenn Sie benutzerdefiniertes Verhalten benötigen, ist der korrekte Weg, die offiziell unterstützten Konfigurationsoptionen in .upptimerc.yml zu verwenden (wie skipTopics, customStatusWebsite, runnerSettings), anstatt Workflows zu ändern. Wenn Sie wirklich Workflows ändern müssen, schalten Sie entweder update-template.yml ab oder forken Sie das Template und pflegen Sie es selbst – Letzteres verliert die nahtlose Upgrades, und zwischen Gewinn und Verlust müssen Sie selbst abwägen.

Praxis 6: Realistische Grenzen des kostenlosen Kontingents

GitHub Actions sind für öffentliche Repositories kostenlos und unbegrenzt in der Laufzeit, und Upptime wurde genau dafür entwickelt. Private Repositories haben 2000 kostenlose Minuten pro Monat, während uptime.yml alle 5 Minuten läuft und etwa 1 Minute dauert, was allein bereits etwa 8640 Minuten pro Monat ausmacht – also das Kontingent überschreitet. Das Upptime-Repository muss also public sein – das ist die Voraussetzung für “kostenlos”. Stellen Sie es nicht auf private, um Vertraulichkeit zu gewährleisten, und dann die Rechnung zu erhalten – das wäre peinlich.

Zusammenfassung

Zurück zur ursprünglichen Frage: gibt es eine günstige Lösung, um eine Reihe externer Services zu überwachen? HagiCodes Antwort ist – ja, und so günstig, dass Sie zweifeln, ob es wirklich funktioniert. Upptime zerlegt das Monitoring in vier native GitHub-Komponenten:

  • Sonden = GitHub Actions cron
  • Datenbank = YAML/JSON-Dateien im Repository
  • CDN = GitHub Pages
  • Ereignisprotokoll = GitHub Issues

Sie erhalten: Echtzeit-Verfügbarkeit, Antwortzeitkurven, historische Ereignisse, Verfügbarkeits-Badges, benutzerdefinierte Domain, automatische Benachrichtigungen – alles null Server, null monatliche Gebühren. Der Preis ist, das Repository öffentlich zu halten und gelegentlich auf die Repository-Größe zu achten. Im Vergleich zum selbstgebauten Monitoring ist dieser Preis viel geringer.

Dass diese Lösung funktioniert, liegt an der ehrlichen Subventionierung von GitHub für Open-Source-Projekte. Wenn Sie auch eine kleine Produktmatrix mit mehreren Sites betreuen, empfehle ich dringend, einen Nachmittag zu investieren und sie aufzusetzen – viel weniger Stress als selbstgebautes Monitoring.

Referenzen

Fazit

Um “wie man mit Upptime kostenlos eine eigene Statusseite erstellt” solider voranzubringen, ist es ratsam, zunächst die Schlüsselkonfigurationen, Abhängigkeitsgrenzen und Implementierungspfade schrittweise durchzugehen, bevor Optimierungsdetails ergänzt werden.

Wenn Ziele, Schritte und Akzeptanzkriterien klar definiert sind, können solche Lösungen oft reibungsloser in die tatsächliche Lieferung übergehen.

开始使用 HagiCode

一次安装,几分钟上手

HagiCode for Windows 在 Microsoft Store 免费提供。打开商店即可安装并保持更新;也可以先对比各版本与定价,再决定从哪个渠道开始。