InfraGuard

Infrastruktur-Zustandsboard

Live-Verfügbarkeitsboard, das Last, CPU, Arbeitsspeicher und Festplatte je Knoten sowie den Dienststatus von nginx/php/mysql/mongo auf einem Bildschirm zeigt.

Überblick — was dieser Bildschirm leistet

Infrastruktur ▸ Zustand (/infra/health) ist das Betriebs-Dashboard für Verfügbarkeit: Es zeigt den Zustand jedes laufenden Knotens auf einen Blick in einem Kartenraster. Es setzt den Bildschirm ./server/stat aus stats-design neu um und führt zwei getrennte Datenwege in einer einzigen Karte zusammen:

  1. Metrik-Momentaufnahme — die neuesten Werte für Last / CPU / Arbeitsspeicher / Festplatte, die der Collector run_report etwa alle 5 Minuten in server_status (eine Alttabelle) schreibt. Die Anwendung liest sie aus einem 20-Sekunden-Cache (keine direkte Verbindung zum entfernten Knoten).
  2. Live-Dienstprüfung — ein Echtzeitaufruf des auf jedem Knoten installierten Agenten tlx.php, um unmittelbar zu prüfen, ob die Daemons nginx / php / mysql / mongo laufen, und um Docker-Container aufzulisten (TlxClient).

Die Knotenliste und die Aliase (ALIAS_MAP) werden automatisch geladen — ohne Einrichtung je Server — aus der Konfiguration des Collectors run_report (infr_collector.config) unter Verwaltung ▸ Collectors.

Jede Karte zeigt im Kopfbereich knappe Knoteninformationen, darunter eine CPU-Ringanzeige (mit der durchschnittlichen Last in der Mitte), MEM-/DISK-Balken und ganz unten Statuspunkte der Dienste.

Dieser Bildschirm dient dem Betrieb im Nur-Lese-Modus. Sie bearbeiten hier weder Knoten noch Aliase noch den tlx api_key — all das liegt unter Collectors.

Wann Sie ihn nutzen

Für Trendanalysen (Zeitreihen) gehen Sie zu Server-Zeitreihen; für den Zustand des RAID-Controllers und die physische Festplattenkarte zu Speicher und RAID.

Aufbau

Kopfbereich (obere Leiste)

Element Bedeutung
Collector-Plakette Titel des Collectors run_report + Knotenanzahl + Anzahl der ALIAS-Zuordnungen
Schlüsselsymbol Ob der tlx api_key gesetzt ist. 🔑 (grün) = gesetzt · 🔑❗ (grau) = nicht gesetzt, Dienstprüfungen sind daher nicht verfügbar
Schaltfläche „Collector-Konfiguration“ Führt zu Collectors (/admin/collectors)
Schaltfläche „Aktualisieren“ Liest die Metriken neu ein und startet die Live-Prüfungen auf allen Knoten erneut

Gibt es keinen Collector run_report, erscheint anstelle des Kartenrasters der Hinweis „Kein run_report-Collector registriert“ zusammen mit einer Konfigurationsschaltfläche.

Knotenkarte

┌──────────────────────────────────────┐
│ ⠿ ●  glory                     ⟳(probe)│  ← Kopf: Griff · Online-Punkt · Bezeichnung/Alias/IP
│      glory · 203.0.113.10              │
│                                        │
│            ╭───────────╮               │
│            │    0.84    │  ← CPU-Ring (Farbe=CPU%), Mitte=load
│            │    load    │
│            │  CPU 12%   │
│            ╰───────────╯               │
│  🧠 MEM  ▓▓▓▓▓▓░░░░  63%                 │  ← MEM-Balken
│  💽 DISK ▓▓▓▓▓▓▓▓░░  81%                 │  ← DISK-Balken
│  ● nginx ● php ● mysql ● mongo          │  ← Dienstpunkte (Live-Prüfung)
│  🐳 4                                   │  ← Anzahl der Docker-Container (bei erfolgreicher Prüfung)
└──────────────────────────────────────┘

Schwellenwerte (Farbregeln)

Metrik good (grün) warn (bernstein) crit (rot)
CPU us % (Ring) < 60 ≥ 60 ≥ 85
MEM % (Balken) < 80 ≥ 80 ≥ 92
DISK % (Balken) < 80 ≥ 80 ≥ 92

Fehlende Werte (—) werden grau (na) dargestellt.

Farbtöne der Dienstpunkte

Ton Bedingung
up (grün) Prüfung erfolgreich + Prozessanzahl dieses Daemons > 0
down (rot) Prüfung erfolgreich, aber Prozessanzahl ist 0, oder die Prüfung schlug fehl
unknown (grau) Noch nicht geprüft, oder die Antwort enthält diesen Dienstschlüssel nicht

Vorgehensweise

1. Metriken aktualisieren (automatisch + manuell)

2. Einen einzelnen Knoten live prüfen

Die Puls-Schaltfläche (⟐) rechts im Kopfbereich einer Karte prüft sofort ausschließlich diesen Knoten (POST /infra/health/probe, Rumpf {alias}). Beim ersten Laden der Seite werden alle Karten automatisch in einem zeitversetzten Takt von 250 ms geprüft, sofern der tlx api_key gesetzt ist (um einen Ansturm zu vermeiden).

Bei erfolgreicher Prüfung übernimmt die Karte nicht nur die Dienstpunkte, sondern auch die in der Antwort mitgelieferten Momentanwerte für Last / CPU / MEM / DISK.

Sind alle Dienstpunkte grau (unknown), ist meist der tlx api_key nicht gesetzt. Prüfen Sie das Schlüsselsymbol im Kopfbereich — steht dort 🔑❗, wird die Prüfung überhaupt nicht ausgeführt.

3. Karten umsortieren (ziehen)

Fassen Sie den Griff (⠿) links im Kopfbereich einer Karte an und ziehen Sie sie an die gewünschte Stelle. Die Reihenfolge wird im localStorage des Browsers (infr:order:infra-health) gespeichert und bleibt über Besuche hinweg erhalten. Die Karten verwenden ein Masonry-Layout mit variabler Höhe und werden zu je 10 pro Seite umbrochen.

Datenquellen

Metriken — server_status (Altbestand, nur lesend)

HealthService::metricsByAlias() liest über die Verbindung legacy. Um langsame Abfragen zu vermeiden, wird auf ein jüngstes seq-Fenster eingegrenzt, statt die gesamte Tabelle zu aggregieren.

-- 1) nur die 3 jüngsten seq (distinct = Indexscan)
SELECT DISTINCT seq FROM server_status ORDER BY seq DESC LIMIT 3;

-- 2) nur die interessierenden part zu diesen seq
SELECT server_alias, part, value, seq, created_at
  FROM server_status
 WHERE seq IN (:s1, :s2, :s3)
   AND part IN ('loadavg','free','top','df-','df-data','df-home')
 ORDER BY seq;   -- aufsteigend → spätere Zeilen sind neuer

Die Speicherkonvention des Collectors run_report:

part Bedeutung Format Zuordnung auf der Karte
loadavg Last (1 Minute) Zahl load (Mitte der Anzeige)
top CPU us % "NN%" Füllung des CPU-Rings
free Arbeitsspeicher % "NN%" MEM-Balken
df-data / df- / df-home Festplatte JSON {p,u,a} DISK-Balken (p=%, u=belegt, a=Größe)

Knotenauflösung — infr_collector.config

HealthService::resolveNodes() leitet die Knoten aus dem Collector run_report ab (InfrCollector::where('key','run_report')).

Rangfolge Quelle (node_source) Beschreibung
1 config Verwendet config.nodes[] unverändert, sofern vorhanden (jeder Knoten = url·alias·label·ip)
2 instance Ist die Liste leer, wird zur Laufzeit aus dem Verzeichnis Instanzen abgeleitet (infr_instance, 60 s Cache)
— none Sind beide leer, gibt es keine Knoten

Die Anzahl der Einträge in config.alias_map erscheint als Plakette „ALIAS“ im Kopfbereich.

Dienststatus — Live-Prüfung über tlx.php (TlxClient)

HealthController::probe() ermittelt den Knoten anhand seines Alias (womit ein Weiterleiten an beliebige Hosts verhindert wird) und ruft dessen tlx.php über TlxClient::probe() auf.

Die für die Karte normalisierte Form der check_all-Antwort von tlx.php:

{
  "ok": true,
  "load": 0.84,
  "cpu_us": 12.0,
  "mem_pct": 63,
  "disks": [ { "mount": "/data", "pct": 81, "used": "1.6T", "size": "2.0T" } ],
  "services": { "nginx": {"count":4,"up":true}, "php": {"count":8,"up":true}, "mysql": {"count":1,"up":true}, "mongo": {"count":0,"up":false} },
  "docker": [ "web", "redis", "worker", "cron" ]
}

Der tlx api_key wird aus infr_collector entschlüsselt (Laravel Crypt) und ausschließlich serverseitig verwendet. Er wird niemals an den Browser zurückgegeben und niemals fest im Code hinterlegt. An den entfernten Knoten geht allein der signierte Wert q.

Übersicht der Endpunkte

Methode · Pfad Name Zweck
GET /infra/health infra.health Seite (mit Startdaten)
GET /infra/health/refresh infra.health.refresh Abfrage der Metrik-Momentaufnahme (JSON)
POST /infra/health/probe infra.health.probe Live-Prüfung eines einzelnen Knotens ({alias})

Zugriff

Fehlerbehebung und FAQ

Es erscheint überhaupt keine Karte, stattdessen „Kein run_report-Collector registriert“

Es existiert kein Collector mit dem Schlüssel run_report. Registrieren Sie unter Collectors einen mit access=web und key=run_report.

Es erscheint „Keine Knoten registriert“

Der Collector run_report existiert, aber config.nodes ist leer und das Verzeichnis infr_instance ebenfalls. Füllen Sie das Knoten-Array des Collectors oder registrieren Sie Server unter Instanzen (bei leerem config.nodes werden die Knoten automatisch aus den Instanzen abgeleitet).

Die Metriken zeigen nur — (Striche)

In server_status liegt keine aktuelle Momentaufnahme vor. Vergewissern Sie sich, dass der Collector run_report tatsächlich per cron läuft und dass die Knoten-Aliase zu server_status.server_alias passen. Der Online-Status wird anhand der 2 jüngsten seq beurteilt.

Alle Dienstpunkte sind grau

  1. Steht das Schlüsselsymbol im Kopfbereich auf 🔑❗ (nicht gesetzt), setzen Sie den tlx api_key unter Collectors — solange er fehlt, laufen keine Prüfungen.
  2. Drücken Sie die Prüfschaltfläche (⟐) einer Karte, um die Antwort zu sehen. „Prüfung fehlgeschlagen (nicht erreichbar)“ bedeutet, dass Sie die url des Knotens, die Firewall und die Installation von tlx.php überprüfen sollten.

Nur die Prüfung schlägt fehl, Last und Arbeitsspeicher wirken aber in Ordnung

Metriken (server_status) und Prüfung (tlx.php) sind voneinander unabhängige Wege. Die Datenbankaufnahme des Collectors funktioniert, doch der HTTP-Endpunkt tlx.php des Knotens ist blockiert (Firewall oder Pfad). Prüfen Sie config.path (Standard /tlx.php) und die url des Knotens.

Der Festplatten-Prozentsatz entspricht nicht meiner Erwartung

Die angezeigte Festplatte wird in der Rangfolge df-data → df- → df-home ausgewählt. Bei mehreren Datenträgern hat der Datenträger für Daten (df-data) Vorrang.

Verwandte Themen

헬스 — 노드별 CPU 링 게이지와 서비스 도트
헬스 — 노드별 CPU 링 게이지와 서비스 도트
노드 카드 한 장
노드 카드 한 장