// SERVER · IT-BETRIEB

Server‑Monitoring als Widget.

Server-Status aus Proxmox, Prometheus-Alarme, Zertifikate und Deployments auf Homescreen und Sperrbildschirm von iPhone und iPad, vom Homelab bis zum Rechenzentrum. Deine Server senden, niemand fragt bei ihnen an. Kein offener Port, kein VPN.

7 Tage kostenlos testen, danach 4,99 € im Monat.

Die Andon-App auf einem iPhone mit der Ansicht Demo Cloud: Zustand des API-Gateways, Verfügbarkeit über 30 Tage, letztes Deployment und ein Check ohne Messung.
// KENNST DU DAS?

Monitoring hast du. Nur nicht in der Tasche.

01

Erreichbar heißt angreifbar

Damit dein iPhone Grafana oder Proxmox fragen kann, muss es hinein: Portfreigabe, VPN oder Tunnel. Jedes davon ist eine Tür mehr.

02

Eine App je Werkzeug

Proxmox hat eine App, Uptime Kuma auch, Grafana eine Weboberfläche. Den Überblick über alles hat keine davon.

03

Wer meldet, wenn alles steht?

Fällt der Server aus, der überwacht, meldet sich niemand. Stille sieht aus wie Ordnung.

// DEMO CLOUD

Ein Dienst im Rechenzentrum, zum Ausprobieren.

Die Demo simuliert einen Webdienst auf mehreren Knoten. Scanne den Code mit der Andon-App, und du hast ihn auf deinem iPhone.

  • ✓Zustand: API-Gateway, Verfügbarkeit über 30 Tage, letztes Deployment.
  • ✓Last: Anfragen je Sekunde, Antwortzeit p95, Fehlerrate, CPU des Clusters.
  • ✓Bestand: Knoten mit CPU und RAM, offene Störungen, belegter Speicher, Ablauf des Zertifikats.
  • ✓Ohne Messung: Ein Check, der nicht antwortet, wird grau statt grün.
Mit der Andon-App scannen

Cloud-Dienst

Ein Dienst im Rechenzentrum: Anfragen, Antwortzeit, Fehlerrate, Knoten, offene Störungen. Ein Blick aufs Widget statt eines Logins im Dashboard.

IT-Betrieb
// WEG DER DATEN

Deine Server senden. Niemand fragt an.

Ein Skript oder Node-RED auf deinem Server baut die Ansicht, verschlüsselt sie und schickt sie per HTTPS an das Relay. Ein Timer wie cron wiederholt das.

01

Zahlen holen

Ein Skript fragt ab, was du ohnehin betreibst, selbst gehostet oder in der Cloud: die Proxmox-API, Prometheus, einen Healthcheck, die Pipeline deines CI.

02

Status setzen und versiegeln

Das Skript entscheidet, was grün, gelb oder rot ist, und schreibt die Ansicht. Ein zweites versiegelt sie und lädt sie hoch. Die Vorlagen dafür gibt es für Node.js und Python.

03

Grau, wenn es still wird

Schweigt der Server länger als vereinbart, färbt die App die Ansicht grau. So merkst du auch den Ausfall, der sich selbst nicht mehr melden kann.

Was sich anbietetProxmox VEPrometheusUptime KumaDockersystemdGitHub ActionsGitLab CIcron
// REZEPT: PROXMOX

Proxmox aufs iPhone, mit einem Skript.

Auf jedem Proxmox-Knoten liegen pvesh und Python schon bereit. Das Skript fragt den Cluster nach Knoten und Gästen und schreibt eine Ansicht mit drei Kacheln.

  • ✓Ein Knoten offline macht seine Kachel rot. Ein gestoppter Gast bleibt ohne Farbe, er kann mit Absicht aus sein.
  • ✓Versiegeln und hochladen übernimmt andon_seal.py von der Entwicklerseite. Es braucht cryptography und requests. Unter Debian, also auch auf Proxmox, heißen die Pakete python3-cryptography und python3-requests.
  • ✓Ein cron-Eintrag leitet die Ausgabe jede Minute an andon_seal.py weiter, mit den Schlüsseln aus der .env als Umgebungsvariablen.
  • ✓Für Prometheus-Alarme liegt ein zweites Skript auf der Entwicklerseite: Alarme als Tabelle.
proxmox.py
#!/usr/bin/env python3
# Proxmox as an Andon view: nodes and guests, from the cluster's own API.
# Runs on a Proxmox node, where pvesh is. Writes the document to stdout;
# andon_seal.py seals and sends it. The status is decided HERE.
import json, subprocess, sys
from datetime import datetime, timezone

res = json.loads(subprocess.run(
    ["pvesh", "get", "/cluster/resources", "--output-format", "json"],
    check=True, capture_output=True, text=True).stdout)

nodes  = [r for r in res if r["type"] == "node"]
guests = [r for r in res if r["type"] in ("qemu", "lxc") and not r.get("template")]
online  = sum(n["status"] == "online" for n in nodes)
running = sum(g["status"] == "running" for g in guests)

def row(g):
    ram = round(100 * g["mem"] / g["maxmem"]) if g.get("maxmem") else None
    cells = [g.get("name") or str(g["vmid"]), g["node"], round(100 * g.get("cpu", 0)), ram]
    # A stopped guest gets no colour: it may be stopped on purpose.
    return {"cells": cells, "status": "ok"} if g["status"] == "running" else {"cells": cells}

guests.sort(key=lambda g: (g["status"] != "running", g.get("name") or ""))

json.dump({
    "id": "5d0e8b47-2a19-4c63-9f8e-7b1a3c6d2e90",
    "schemaVersion": 1,
    "name": "Proxmox",
    "generatedAt": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
    "staleAfterSec": 300,
    "tiles": [
        {"id": "t_nodes", "view": "label", "title": "Nodes online", "titleShort": "Nodes",
         "icon": "server.rack", "value": online, "subtext": f"of {len(nodes)}",
         "status": "ok" if online == len(nodes) else "critical"},
        {"id": "t_guests", "view": "label", "title": "Guests running", "titleShort": "Guests",
         "icon": "shippingbox", "value": running, "subtext": f"of {len(guests)}"},
        {"id": "t_list", "view": "table", "title": "Guests", "icon": "list.bullet",
         "columns": [{"title": "Name"}, {"title": "Node"},
                     {"title": "CPU", "unit": "%", "decimals": 0},
                     {"title": "RAM", "unit": "%", "decimals": 0}],
         "rows": [row(g) for g in guests[:20]]},
    ],
}, sys.stdout)
// WARUM ANDON

Ergänzt Grafana, statt es zu ersetzen.

Kein Weg hinein

Nur ausgehend über HTTPS. Kein Port, kein VPN, kein Tunnel, der offen bleibt.

Alles an einem Ort

Proxmox, Alarme, Zertifikate und CI nebeneinander. Mehrere Quellen bekommen eigene Ansichten, die App zeigt alle.

Stille wird sichtbar

Eine Ansicht ohne frische Daten wird grau. Das ersetzt keine Überwachung von außen, aber du siehst, dass etwas nicht stimmt.

Ende-zu-Ende verschlüsselt

Hostnamen und Zahlen gehen verschlüsselt durch das Relay. Lesen können sie nur deine gekoppelten Geräte.

// FRAGEN

Häufige Fragen zum Server-Monitoring.

Muss ich einen Port öffnen oder ein VPN betreiben?

Nein. Dein Server sendet nur nach außen, per HTTPS an das Relay. Eingehend bleibt alles zu.

Geht das mit Proxmox, Prometheus und Uptime Kuma?

Mit allem, was ein Skript abfragen kann. Das Skript für Proxmox steht oben, das für Prometheus-Alarme auf der Entwicklerseite. Uptime Kuma liefert seine Zahlen unter /metrics im Prometheus-Format.

Wie aktuell ist das Widget?

Ändert sich ein Status, weckt deine Quelle das Widget, meist innerhalb einer Minute. Sonst entscheidet iOS, wann es neu lädt, in der Regel etwa alle 15 Minuten. Die geöffnete App holt jede Minute neue Werte.

Was passiert, wenn mein Server ausfällt?

Dann kommen keine Daten mehr, und nach der vereinbarten Zeit (staleAfterSec) färbt die App die Ansicht grau. Einen Weckruf kann ein ausgefallener Server nicht mehr senden: Das Grau siehst du beim nächsten Blick, nicht als Push.

Kann ich den Status von GitHub Actions oder GitLab CI zeigen?

Ja, mit einem Skript, das die API deines CI fragt und das Ergebnis als Kachel schreibt. Eine fertige Vorlage dafür gibt es noch nicht.

Kann das Relay meine Daten lesen?

Nein. Die Ansicht wird auf deinem Server verschlüsselt, der Schlüssel bleibt dort und auf deinen Geräten. Wie das genau geht, steht unter So funktioniert es.

Fang mit einem Server an.

Kacheln im Konfigurator bauen, Ansicht anlegen, iPhone koppeln. Dann das Skript in den cron.