ELX-HealthMonitor
Was ein Linux-Server gerade tut und was er letzte Woche tat
Ein Überwachungsagent mit Weboberfläche, Verlauf in SQLite und E-Mail-Benachrichtigungen. Eine ausführbare Datei ohne Abhängigkeiten: Die Oberfläche steckt in der Binärdatei, die Datenbank legt sich selbst an. Auf einem vier Jahre alten Celeron kostet er etwa vier Prozent eines Kerns und elf Megabyte Speicher.
Aus dem Kernel gelesen, nicht geraten
Alles kommt unmittelbar aus /proc, /sys und smartctl. Kein Collector zu installieren, keine Zeitreihendatenbank zu betreiben und kein Paar aus Agent und Server im Gleichschritt zu halten.
Festplatten, bevor sie ausfallen
SMART-Zustand, Temperatur, Betriebsstunden, verlagerte und schwebende Sektoren, CRC-Fehler, SSD-Verschleiß und die insgesamt geschriebene Datenmenge — mit der vollständigen Attributtabelle, wenn Sie genauer hinsehen wollen.
RAID, einschließlich des unbequemen Teils
Zustand des Verbunds, Stufe, Mitglieder, ausgefallene Platten und Fortschritt der Neusynchronisierung — dazu die Schreibabsichtskarte, die sagt, ob die Kopien gerade wirklich gleich sind, und die Zahl der Abweichungen der letzten Prüfung.
Dienste mit eigener Ein- und Ausgabe
Jede systemd-Einheit mit Prozessor, Speicher, Lese- und Schreibvorgängen, Zahl der Aufgaben und Neustarts — und Schaltflächen zum Starten, Anhalten und Ändern des Autostarts.
Benachrichtigungen, die nicht ohne Grund rufen
Eine Regel trägt eine Haltezeit: Eine zehn Sekunden lange Spitze auf Vollast schickt nichts, zehn Minuten auf diesem Stand schon. Genau diese Einstellung trennt Nachrichten, die gelesen werden, von Nachrichten, die weggefiltert werden.
Ein Verlauf, der nicht endlos wächst
Drei Tage in voller Auflösung, danach Fünf-Minuten-Abschnitte mit Mittelwert, Minimum und Maximum, und nichts, was älter als ein Monat ist. Die Spitzen überstehen die Ausdünnung; Gigabyte nicht.
Was gemessen wird
| Bereich | Messwerte |
|---|---|
| Prozessor | Gesamtlast und je Kern, user/system/iowait/steal, Takt, Lastmittel, Kontextwechsel, Warteschlange |
| Speicher | Belegt, verfügbar, Zwischenspeicher, Puffer, Slab, schmutzige Seiten, Auslagerung und wie stark sie beansprucht wird |
| Festplatten | Lese- und Schreibrate, IOPS, Verzögerung, Auslastung des Geräts, Modell, Kapazität |
| Dateisysteme | Belegt, frei, Prozent, Inodes |
| SMART | Zustand, Temperatur, Betriebsstunden, verlagerte und schwebende Sektoren, CRC-Fehler, SSD-Verschleiß, Schreibmenge über die Lebensdauer, vollständige Attributtabelle |
| RAID | Zustand der md-Verbünde, Stufe, Mitglieder, ausgefallene Platten, Fortschritt und Tempo der Neusynchronisierung, aktuelle Gleichheit der Kopien und Abweichungen der letzten Prüfung |
| Netzwerk | Bytes und Pakete ein und aus, Fehler und Verluste, Verbindungszustand, Porttempo, Adressen, MTU |
| Temperatur | Alle hwmon-Fühler und ACPI-Wärmezonen sowie Plattentemperaturen aus SMART |
| Dienste | Zustand und Autostart der systemd-Einheiten, Prozessor, Speicher, Ein- und Ausgabe je Dienst, Zahl der Aufgaben, Neustarts |
| Prozesse | Spitzenreiter nach Prozessor und Speicher, Plattenaktivität, Eigentümer, Einheit |
Jeder Bereich lässt sich einzeln abschalten, und ein abgeschalteter Bereich wird gar nicht erst abgefragt.
Die RAID-Frage, die man stellen sollte
Ein gespiegelter Verbund hält auf beiden Platten dieselben Daten, doch die Schreibvorgänge erreichen sie nicht im selben Augenblick. Der Kernel vermerkt die möglicherweise abweichenden Bereiche in einer Schreibabsichtskarte, und dieser Agent zeigt diese Karte unmittelbar: Solange die Zahl der schmutzigen Bereiche null ist, sind die Kopien gleich; alles darüber bedeutet eine noch laufende Neusynchronisierung.
Daneben steht die Zahl der Abweichungen der letzten Integritätsprüfung. Ein Wert über null bedeutet, dass eine Platte oder ein Controller aus den beiden Hälften einer Spiegelung unterschiedliche Daten geliefert hat — und genau das ist der Ausfall, dessentwegen es Überwachung gibt, und genau der, den eine grüne Anzeige „Verbund in Ordnung“ verdeckt.
Was der Betrieb kostet
Teure Messungen laufen nach einem eigenen Zeitplan, getrennt von der Hauptschleife, denn fünf Platten alle drei Sekunden zu wecken, um ihre Temperatur zu erfragen, wäre schlimmer, als sie gar nicht zu überwachen.
| Einstellung | Standard | Was sie regelt |
|---|---|---|
interval_sec | 3 s | Die Hauptabfrageschleife |
services.interval_sec | 15 s | Ein vollständiger Durchgang über die systemd-Einheiten |
disk.smart_interval_sec | 900 s | SMART-Abfrage — sie weckt die Platten |
storage.persist_interval_sec | 30 s | Das Schreiben einer Momentaufnahme in den Verlauf |
Gemessen auf einem vierkernigen Celeron J1900 mit 165 systemd-Einheiten und fünf Platten: etwa vier Prozent eines Kerns und elf Megabyte Speicher. Auf einem Xeon E5-2690 unter drei Prozent eines Kerns.
Die Oberfläche
- Der Browser merkt sich Ihre Auswahl: den Zeitraum jedes Diagramms, per Klick auf die Legende ausgeblendete Kurven und die Filter der Dienst- und Ereignistabellen. Ein Neuladen setzt nichts davon zurück.
- Alle Kurven wachsen von null nach oben, die Einheit der Achse folgt dem Wertebereich und die Zahl der Nachkommastellen der Rasterweite — sodass zwei benachbarte Linien nie dieselbe Beschriftung tragen.
- Nach einer Aktualisierung bemerkt ein offener Tab den Versionswechsel selbst, sagt es und lädt neu, statt eine alte Oberfläche im Zwischenspeicher des Browsers stehen zu lassen.
- Schaltflächen zum Neustarten und Ausschalten der Maschine stehen in der Kopfzeile; wenn Sie sie dort nicht möchten, entfernt ein Konfigurationsschlüssel sie.
- Jede unumkehrbare Handlung liegt hinter einer Bestätigung, die die Folge erklärt, und die Schaltfläche trägt den Namen der Handlung statt „OK“.
Auf einen Blick
- Betriebssysteme
- Debian und Ubuntu mit systemd
- Architekturen
- amd64, arm64, armhf
- Weboberfläche
- Port 8555 standardmäßig
- Verlauf
- SQLite; 3 Tage roh, 31 Tage verdichtet
- Optionale Abhängigkeit
- smartmontools, für den SMART-Bereich
- Üblicher Aufwand
- ~4 % eines Kerns, ~11 MB Speicher
- Benachrichtigungen
- E-Mail über SMTPS, STARTTLS oder unverschlüsselt
- Einrichtung
- Weboberfläche oder config.json