# Online Monitoring - Zabbix (Version 7 und 8)

**Überwachen. Analysieren. Optimieren.**

**Zabbix** ist die leistungsstarke, **skalierbare** und **flexible** Open-Source-Plattform für **umfassendes IT-Monitoring**. Ob Server, Netzwerke, Cloud-Umgebungen, Container oder Applikationen – **Zabbix** liefert Ihnen in Echtzeit wertvolle Einblicke in Ihre IT-Infrastruktur, erkennt Probleme, bevor sie auftreten, und hilft Ihnen, die **Performance und Stabilität** Ihrer Systeme zu optimieren.

**Für meine Kunden stelle ich hier Tipps und Tricks, Anleitungen und Empfehlungen und News bereit.**

**Ansonsten:** [**https://www.zabbix.com/**](https://www.zabbix.com/)

# Allgemein

# Warum Zabbix?

###   


<span style="white-space: pre-wrap;">✅ </span>****Zentrale Überwachung für alle Systeme****  
<span style="white-space: pre-wrap;">Mit einer einzigen Lösung behalten Sie </span>****Netzwerke, Server, virtuelle Maschinen, Cloud-Dienste, Anwendungen, IoT-Geräte und mehr****<span style="white-space: pre-wrap;"> im Blick.</span>

<span style="white-space: pre-wrap;">✅ </span>****100% Open Source – Keine Lizenzkosten****  
<span style="white-space: pre-wrap;">Zabbix ist </span>****komplett kostenlos****<span style="white-space: pre-wrap;">, ohne Einschränkungen oder versteckte Gebühren. Nutzen Sie eine </span>****Enterprise-fähige Lösung****, ohne in teure Software investieren zu müssen.

<span style="white-space: pre-wrap;">✅ </span>****Echtzeit-Alarmierung &amp; Automatisierung****  
<span style="white-space: pre-wrap;">Erkennen und beheben Sie Probleme </span>****proaktiv****<span style="white-space: pre-wrap;"> mit flexiblen </span>****Benachrichtigungen über E-Mail, SMS, Telegram, Slack und mehr****<span style="white-space: pre-wrap;">. Automatisieren Sie </span>****Maßnahmen****, um Ausfälle zu verhindern.

<span style="white-space: pre-wrap;">✅ </span>****Skalierbar für Unternehmen jeder Größe****  
<span style="white-space: pre-wrap;">Ob kleines Unternehmen oder globaler Konzern – Zabbix passt sich </span>****dynamisch****<span style="white-space: pre-wrap;"> an jede Infrastruktur an und kann </span>****Millionen von Datenpunkten****<span style="white-space: pre-wrap;"> verarbeiten.</span>

<span style="white-space: pre-wrap;">✅ </span>****Leistungsstarke Dashboards &amp; Visualisierungen****  
<span style="white-space: pre-wrap;">Erstellen Sie </span>****benutzerdefinierte Dashboards, Grafiken und Berichte****, um Ihre IT-Systeme übersichtlich zu analysieren.

<span style="white-space: pre-wrap;">✅ </span>****Integrierbar mit führenden Technologien****  
<span style="white-space: pre-wrap;">Nahtlose Integration mit </span>****Prometheus, Grafana, Kubernetes, Docker, AWS, Azure, VMware, SNMP, APIs und vielen weiteren Tools****.

<span style="white-space: pre-wrap;">✅ </span>****Sicher &amp; zuverlässig****  
<span style="white-space: pre-wrap;">Zabbix setzt auf </span>****modernste Sicherheitsstandards****<span style="white-space: pre-wrap;">, Verschlüsselung und </span>****stabile Performance****<span style="white-space: pre-wrap;">, um eine </span>****sichere Überwachung****<span style="white-space: pre-wrap;"> Ihrer IT-Umgebung zu gewährleisten.</span>

# Einrichtung

# Einfache Überwachung eines Webservers

## Webserver-Überwachung (Alive &amp; Ladezeit)

### 1. Host in Zabbix erstellen (falls noch nicht vorhanden)

Falls dein Webserver noch nicht als Host in Zabbix existiert, musst du ihn zuerst hinzufügen.

- Gehe zu → Data collection → Hosts
- Klicke auf Create host
- Gib die Host-Daten ein:
- Host name: Mein-Webserver
- Visible name: (optional, z. B. Webserver XYZ)
- Groups: Web-Server (oder eine passende Gruppe)
- Interfaces: - Add
    - Type: Agent
    - IP address: 123.123.123.123 (IP oder Domain deines Webservers)
    - Port: 10050
- Speichern (Add klicken)

### 2. Web-Szenario für Alive-Check &amp; Ladezeit einrichten

Mit einem Web-Szenario kannst du prüfen, ob die Webseite erreichbar ist und wie lange sie zum Laden benötigt.

- Gehe zu → Data collection → Hosts
- Wähle deinen Webserver (Mein-Webserver)
- Wechsle zum Tab/Spalte Web
- Klicke auf Create web scenario
- Fülle die Basisinformationen aus:
- Name: Webserver-Check
- Update interval: 1m (Überprüfung jede Minute)
- Retries/Attemps: 1
- Agent: Zabbix
- ****Web-Step hinzufügen (Alive-Check &amp; Ladezeit)****
    - Reiter Steps add
- Klicke auf Add, um einen neuen Step hinzuzufügen.
    - Fülle die Felder aus:
    - Name: Homepage Check
    - URL: http://mein-webserver.de
    - Follow redirects: ✅ (Ja)
    - Timeout: 10s
    - Required string: (Optional, falls du nach einem bestimmten Text auf der Seite suchst)
- Speichern (Add klicken)

🚀 Zabbix testet jetzt jede Minute, ob die Seite online ist und speichert die Ladezeit.

### 3. Trigger für Offline-Status (Alive-Check) erstellen

Falls der Webserver nicht mehr erreichbar ist, soll eine Alarmierung erfolgen.

- Gehe zu → Data collection → Hosts - Spalte Triggers
- Klicke auf Create trigger
- Fülle die Felder aus:
- Name: Webserver ist nicht erreichbar
- Expression: {Mein-Webserver:web.test.fail\[Webserver-Check\].last()}=1
- Severity: High
- Speichern (Add klicken)

🚀 Jetzt löst der Trigger aus, wenn die Webseite nicht erreichbar ist.

### 4. Trigger für hohe Ladezeit erstellen

Falls die Ladezeit zu hoch ist, soll eine Warnung ausgelöst werden.

- Gehe zu → Data collection → Triggers
- Klicke auf Create trigger
- Fülle die Felder aus:
- Name: Webserver-Ladezeit zu hoch
- Expression: {Mein-Webserver:web.test.time\[Webserver-Check, Homepage Check\].last()}&gt;3
- Severity: Warning
- Speichern (Add klicken)

🚀 Jetzt bekommst du eine Warnung, wenn der Seitenaufbau länger als 3 Sekunden dauert.

### 5. (Optional) Benachrichtigung einrichten

Falls du eine E-Mail, Telegram- oder Slack-Benachrichtigung bekommen möchtest:

- Gehe zu → Alerts → Actions / Trigger actions
- Klicke auf Create action
- Fülle die Aktions-Details aus:
- Name: Webserver Down Alert
- Conditions:
- Trigger = Webserver ist nicht erreichbar
- Trigger = Webserver-Ladezeit zu hoch
- Operation - Operations ADD
- Sende Nachricht an Admins (z. B. per E-Mail oder Telegram)
- Speichern (Add klicken)

🚀 Jetzt wirst du benachrichtigt, wenn der Webserver offline ist oder langsam lädt.

<p class="callout success">✅ Fazit</p>

<p class="callout success">✔ Zabbix prüft automatisch alle 60 Sekunden, ob der Webserver erreichbar ist.</p>

<p class="callout success">✔ Die Ladezeit wird gemessen und kann als Performance-Indikator dienen.</p>

<p class="callout success">✔ Falls der Webserver offline ist oder zu langsam lädt, gibt es eine Alarmierung.</p>

# Web-Überwachung mit Web Scenarios in Zabbix 7.0+

## Anstatt HTTP-Agent oder externe Skripte zu nutzen, richten wir ein Web Scenario ein, das:

- ✔ Den HTTP-Statuscode überwacht (200 OK oder Fehlercodes 403, 500 usw.)
- ✔ Die Ladezeit (Response time) misst
- ✔ Die Download-Geschwindigkeit (Download speed) speichert
- ✔ Automatisch ausgeführt wird, ohne manuelle Anpassungen

[![image.png](https://gerds-wissen.de/uploads/images/gallery/2025-02/scaled-1680-/image.png)](https://gerds-wissen.de/uploads/images/gallery/2025-02/image.png)

## 1️⃣ Web Scenario für "https://g-flows.de" erstellen

- Gehe zu Data collection → Hosts
- Wähle host (z.B. g-flows.de)
- Gehe zu Spalte Web → Create Web Scenario
    - Fülle folgende Werte aus:
    - Name: Web Monitoring g-flows.de
    - Update interval: 30s (Wie oft das Szenario laufen soll)
    - Retries/Attempts: 3 (Falls die Website nicht erreichbar ist, wird es erneut versucht)
    - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) (Damit sich Zabbix wie ein echter Browser verhält) oder Chrome in neuester Variante
    - Variables: (Leer lassen)
    - Headers: (Leer lassen)
    - Required status codes: 200 (Damit Zabbix erwartet, dass die Seite mit HTTP 200 OK antwortet)
- 🚀 Speichern!

## 2️⃣ Schritte für das Web-Szenario (Web Steps) hinzufügen

Öffne das gerade erstellte Web Monitoring g-flows.de

[![image.png](https://gerds-wissen.de/uploads/images/gallery/2025-02/scaled-1680-/Pjzimage.png)](https://gerds-wissen.de/uploads/images/gallery/2025-02/Pjzimage.png)

- Gehe zu Steps → Add
- Fülle folgende Werte aus:
- Name: Check Homepage
- URL: https://g-flows.de
- Timeout: 10s
- Required string: (Leer lassen oder Welcome falls ein spezifischer Text auf der Seite vorhanden ist)
- Required status codes: 200
- Retrieve mode: Body (Falls du nur den Body checken willst)
- 🚀 Speichern!

## 3️⃣ Automatisch erfasste Web Monitoring Items

Sobald das Web Scenario gespeichert ist, erstellt Zabbix automatisch folgende Überwachungswerte:

### 📌 Allgemeine Werte für das gesamte Web-Szenario

- web.test.fail\[g-flows.de,Web Monitoring g-flows.de\] → Gibt die Nummer des fehlgeschlagenen Schritts zurück (falls Fehler)
- web.test.error\[g-flows.de,Web Monitoring g-flows.de\] → Letzte Fehlermeldung

### 📌 Werte für den Schritt "Check Homepage"

- web.test.time\[g-flows.de,Web Monitoring g-flows.de,Check Homepage\] → Ladezeit der Seite (Response time)
- web.test.rspcode\[g-flows.de,Web Monitoring g-flows.de,Check Homepage\] → HTTP-Statuscode (z. B. 200, 404, 500)
- web.test.in\[g-flows.de,Web Monitoring g-flows.de,Check Homepage\] → Eingehende Download-Geschwindigkeit

🚀 Diese Werte sind jetzt automatisch verfügbar!

---

## 4️⃣ Trigger für Alarme einrichten

#### 4.1 Alarm: Webserver antwortet nicht (200 OK fehlt)

[![image.png](https://gerds-wissen.de/uploads/images/gallery/2025-02/scaled-1680-/0WZimage.png)](https://gerds-wissen.de/uploads/images/gallery/2025-02/0WZimage.png)

Gehe zu Triggers → Create trigger

Fülle folgende Werte aus:

- Name: Webserver g-flows.de nicht erreichbar
- Severity: High
- Expression:blast(/g-flows.de/web.test.rspcode\[g-flows.de,Web Monitoring g-flows.de,Check Homepage\])&lt;&gt;200

🚀 Speichern!

#### 4.2 Alarm: Webserver lädt zu langsam (&gt; 2s)

Gehe zu Triggers → Create trigger

[![image.png](https://gerds-wissen.de/uploads/images/gallery/2025-02/scaled-1680-/oswimage.png)](https://gerds-wissen.de/uploads/images/gallery/2025-02/oswimage.png)

Fülle folgende Werte aus:

Name: Webserver g-flows.de lädt zu langsam

Severity: Warning

Expression: last(/g-flows.de/web.test.time\[g-flows.de,Web Monitoring g-flows.de,Check Homepage\])&gt;2

🚀 Speichern!

## ✅ Fazit – Warum ist Web Monitoring die beste Lösung?

- ✔ Web Scenarios sind speziell für Webseiten-Monitoring optimiert
- ✔ Kein kompliziertes Preprocessing oder externe Skripte nötig!
- ✔ Erfasst HTTP-Status, Ladezeit und Download-Speed automatisch
- ✔ Funktioniert auch mit Weiterleitungen und verschlüsselten HTTPS-Seiten
- ✔ Trigger für langsame Ladezeiten oder Fehler sind einfach konfigurierbar
- ✔ Mehrere Webseiten-Checks in einem einzigen Web Scenario möglich

➡ Fazit: Diese Methode ist die beste &amp; einfachste Lösung für dein Zabbix Web Monitoring! 🚀

# Überwachung

# Betriebskonzept Schwachstellen-Überwachung (Trivy)

#   


<table id="bkmrk-kunde%5Bkunde%5Dstand%5Bda" style="border-collapse: collapse; width: 100%; margin-bottom: 16px;"><colgroup><col style="width: 28%;"></col><col></col></colgroup><tbody><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; width: 28%; font-weight: bold;">**Kunde**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">\[Kunde\]

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Stand**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">\[Datum\] · Trivy 0.76.1 · Skript security-scan.sh v6

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Verantwortlich**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">\[Name, Rolle\]

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Geltungsbereich**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">\[Liste der Server oder Verweis auf Inventar\]

</td></tr></tbody></table>

## 1. Zweck

Jeder Server wird jede Nacht auf bekannte Sicherheitslücken in seinen Anwendungen geprüft. Gemeldet wird nur, wo gehandelt werden kann: wenn der Hersteller eine korrigierte Fassung bereitstellt, oder wenn eine Lücke so lange offen ist, dass über die Anwendung selbst entschieden werden muss.

## 2. Was geprüft wird

<table id="bkmrk-bereichgepr%C3%BCft-durch" style="border-collapse: collapse; width: 100%;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background-color: rgb(31, 78, 121); color: rgb(255, 255, 255);"><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Bereich

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Geprüft durch

</th></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Laufende Container (Docker)

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Trivy, inklusive Prüfung beim Hersteller

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Anwendungen in

`<span class="editor-theme-code">/opt</span>`

 und

`<span class="editor-theme-code">/var/www</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Trivy (installierte Bibliotheken, z. B. PHP, Node, Java)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Pakete des Betriebssystems

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Automatische Sicherheitsupdates und Wazuh

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nicht geprüft

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Verzeichnisse mit „backup“ im Namen, Nextcloud-Benutzerdaten (werden automatisch erkannt)

</td></tr></tbody></table>

## 3. Ablauf

1. Jede Nacht um 2:30 Uhr lädt Trivy die aktuelle Schwachstellen-Datenbank.
2. Container und Verzeichnisse werden ohne Netzverbindung und nur lesend geprüft.
3. Bei Containern mit kritischen Lücken prüft Trivy, ob das aktuelle Image des Herstellers unter derselben Bezeichnung die Lücken behebt.
4. Die Zahlen gehen an Zabbix (Alarme), die Einzelheiten an Wazuh (jede Lücke einzeln).

## 4. Alarmregel und Reaktion

<table id="bkmrk-meldungbedeutungreak" style="border-collapse: collapse; width: 100%;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background-color: rgb(31, 78, 121); color: rgb(255, 255, 255);"><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Meldung

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Bedeutung

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Reaktion

</th></tr><tr style="background-color: rgb(253, 236, 234);"><td style="border: 1px solid rgb(192, 0, 0); padding: 6px; font-weight: bold; color: rgb(192, 0, 0);">**HIGH**

</td><td style="border: 1px solid rgb(192, 0, 0); padding: 6px;">Der Hersteller hat ein neueres Image, das kritische Lücken schließt.

</td><td style="border: 1px solid rgb(192, 0, 0); padding: 6px;">Image neu laden, nur diesen Dienst neu starten, Funktion prüfen. Frist: \[Frist\]

</td></tr><tr style="background-color: rgb(252, 228, 214);"><td style="border: 1px solid rgb(197, 90, 17); padding: 6px; font-weight: bold; color: rgb(197, 90, 17);">**WARNING**

</td><td style="border: 1px solid rgb(197, 90, 17); padding: 6px;">Eine kritische Lücke ist seit 30 Tagen offen, ohne Fix vom Hersteller.

</td><td style="border: 1px solid rgb(197, 90, 17); padding: 6px;">Entscheiden: Risiko tragen, Zugang einschränken oder Anwendung ersetzen. Entscheidung dokumentieren.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Information**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Alle übrigen Funde, z. B. Lücken ohne Fix vom Hersteller.

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Keine. Sichtbar in Wazuh und in der Liste auf dem Server.

</td></tr><tr style="background-color: rgb(252, 228, 214);"><td style="border: 1px solid rgb(197, 90, 17); padding: 6px; font-weight: bold; color: rgb(197, 90, 17);">**WARNING**

</td><td style="border: 1px solid rgb(197, 90, 17); padding: 6px;">Scan mit Fehlern, oder seit 26 Stunden kein Scan.

</td><td style="border: 1px solid rgb(197, 90, 17); padding: 6px;">Ursache im Journal des Servers prüfen (

`<span class="editor-theme-code">journalctl -u trivy-manual</span>`

 bzw. Cron-Lauf).

</td></tr></tbody></table>

Infrastruktur-Container (z. B. Datenbanken, Reverse Proxy), die nachts automatisch aktualisiert werden, lösen keine Alarme aus.

## 5. Absicherung des Scanners selbst

- Trivy läuft in einer festen Version: als Container per Digest, ohne Docker per Programm mit kontrollierter Prüfsumme. Ein Update von Trivy gibt es nur über eine Freigabe.
- Prüfungen laufen ohne Netz und nur lesend, der Scanner erhält keinen Zugriff auf Docker selbst.
- Keine Nutzungsdaten an den Hersteller (Telemetrie abgeschaltet), kein Durchsuchen nach Passwörtern oder Schlüsseln.

## 6. Änderungen und Freigabe

1. Verteilt wird ausschließlich per Ansible (`<span class="editor-theme-code">playbooks/setup_security_monitoring.yml</span>`), nie von Hand auf einzelnen Servern.
2. Jede Änderung wird zuerst in einem Testzweig auf zwei Servern geprüft.
3. Erst nach bestandener Prüfung kommt sie in den freigegebenen Stand und wird gruppenweise verteilt.
4. Das Playbook bricht ab, wenn Voraussetzungen fehlen, und läuft nur mit gezielter Server-Auswahl.

## 7. Voraussetzungen je Server

- Wazuh-Agent installiert (auf dem Wazuh-Server: Manager)
- Docker oder Internetzugang zu GitHub für die Installation des Programms
- Mindestens 3 GB frei für die Datenbanken von Trivy
- Template „Template Security Trivy“ in Zabbix verknüpft

## 8. Grenzen

- Für Anwendungen ohne Docker, für selbst gebaute Images und für Images mit fest eingetragenem Digest kann Trivy nicht prüfen, ob der Hersteller einen Fix hat. Dort gibt es keinen HIGH-Alarm, nur die Warnung nach 30 Tagen.
- Anwendungen außerhalb von `<span class="editor-theme-code">/opt</span>` und `<span class="editor-theme-code">/var/www</span>` werden nicht geprüft. \[Hier abweichende Installationsorte des Kunden eintragen\]
- Öffentliche Registries begrenzen Abrufe ohne Anmeldung. Ist die Grenze erreicht, meldet der Scan einen Fehler, die Herstellerprüfung fehlt dann für diese Nacht.

## 9. Kurzreferenz auf dem Server

<table id="bkmrk-dateiinhalt%2Fvar%2Flog%2F" style="border-collapse: collapse; width: 100%;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background-color: rgb(31, 78, 121); color: rgb(255, 255, 255);"><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Datei

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Inhalt

</th></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/var/log/trivy-actionable-critical.list</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Lücken mit Fix vom Hersteller (HIGH)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/var/log/trivy-stale-critical.list</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Lücken seit 30 Tagen ohne Fix (WARNING)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/var/log/trivy-vendor-check.list</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Stand der Herstellerprüfung je Container

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/var/log/trivy-scans.json</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Rohdaten für Wazuh

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/usr/local/bin/security-scan.sh</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Scan-Skript (nur über Ansible ändern)

</td></tr></tbody></table>

Scan von Hand starten, unabhängig von der SSH-Verbindung: `<span class="editor-theme-code">systemd-run --unit=trivy-manual --collect /usr/local/bin/security-scan.sh</span>`

# needrestart: Dienste nach Updates neu starten

# needrestart: Dienste nach Updates neu starten

<table id="bkmrk-stand11.11.2026-%C2%B7-re" style="border-collapse: collapse; width: 100%; margin-bottom: 16px;"><colgroup><col style="width: 28%;"></col><col></col></colgroup><tbody><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; width: 28%; font-weight: bold;">**Stand**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">11.11.2026 · Repo

`<span class="editor-theme-code">ansible-infra</span>`

, Commit

`<span class="editor-theme-code">3259b6a</span>`

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Zabbix-Template**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Template Security needrestart (Gruppe Admin-gerds), auf allen Hosts

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Geltungsbereich**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Alle Server aus

`<span class="editor-theme-code">inventory/hosts.yml</span>`

</td></tr></tbody></table>

## 1. Zweck

Automatische Updates tauschen Bibliotheken (z. B. OpenSSL) auf der Platte aus. Laufende Dienste wie nginx, MariaDB oder OpenLDAP nutzen aber weiter die alte Fassung im Speicher, bis sie neu starten. Ohne Neustart ist das Sicherheitsupdate installiert, aber nicht wirksam. needrestart startet nach jedem Update genau die betroffenen Dienste neu.

## 2. Regeln

<table id="bkmrk-dienstverhaltennorma" style="border-collapse: collapse; width: 100%;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background-color: rgb(31, 78, 121); color: rgb(255, 255, 255);"><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Dienst

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Verhalten

</th></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Normale Dienste, Datenbanken, OpenLDAP, Agenten

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Automatischer Neustart nach jedem Update (unattended-upgrades und manuelles apt)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">docker</span>`

,

`<span class="editor-theme-code">containerd</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nur melden. Neustart würde alle Container stoppen.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">wazuh-indexer</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nur melden. Start dauert Minuten, Ausfall legt das SIEM lahm.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">dbus</span>`

,

`<span class="editor-theme-code">systemd-logind</span>`

,

`<span class="editor-theme-code">unattended-upgrades</span>`

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nur melden (Vorgabe von needrestart). Erledigt sich mit dem nächsten Neustart des Servers.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Container-Inhalte

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nicht betroffen. Aktualisierung über neue Images (siehe Trivy).

</td></tr></tbody></table>

## 3. Zabbix

<table id="bkmrk-itembedeutungalarmdi" style="border-collapse: collapse; width: 100%;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background-color: rgb(31, 78, 121); color: rgb(255, 255, 255);"><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Item

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Bedeutung

</th><th class="align-left" style="border: 1px solid rgb(191, 191, 191); padding: 6px; text-align: left;">Alarm

</th></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Dienste mit veralteten Bibliotheken

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Anzahl, die noch auf Handarbeit warten

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">keiner (Information)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">seit 7 Tagen veraltet

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">davon seit mindestens 7 Tagen offen

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">WARNING bei &gt; 0

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">letzter Status

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Zeitpunkt des letzten stündlichen Laufs

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">WARNING nach 3 Stunden ohne Status

</td></tr></tbody></table>

## 4. Was tun bei Alarm

1. Auf dem Host nachsehen: `<span class="editor-theme-code">cat /var/log/needrestart-services.list</span>` (Dienst und „seit“).
2. `<span class="editor-theme-code">dbus</span>`, `<span class="editor-theme-code">systemd-logind</span>`, `<span class="editor-theme-code">systemd-manager</span>`: Server neu starten (Contabo vorher Snapshot).
3. `<span class="editor-theme-code">docker</span>`, `<span class="editor-theme-code">containerd</span>`: im Wartungsfenster `<span class="editor-theme-code">systemctl restart docker</span>`, danach Container prüfen.
4. `<span class="editor-theme-code">wazuh-indexer</span>`: im Wartungsfenster `<span class="editor-theme-code">systemctl restart wazuh-indexer</span>`, danach Dashboard prüfen.

Alarm „kein Status seit 3 Stunden“: `<span class="editor-theme-code">/usr/local/bin/needrestart-status.sh</span>` von Hand starten, Fehlermeldung ansehen, Cronjob prüfen (`<span class="editor-theme-code">crontab -l</span>` als root).

## 5. Technik

<table id="bkmrk-einstellung%2Fetc%2Fneed" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 28%;"></col><col></col></colgroup><tbody><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; width: 28%; font-weight: bold;">**Einstellung**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/etc/needrestart/conf.d/50-autorestart.conf</span>`

 (Automatik, Ausnahmen)

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Auslöser**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">apt-Hook

`<span class="editor-theme-code">/etc/apt/apt.conf.d/99needrestart</span>`

 nach jedem Update

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Status für Zabbix**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">/usr/local/bin/needrestart-status.sh</span>`

, stündlich Minute 17 per Cron. Schreibt

`<span class="editor-theme-code">/var/log/needrestart-services.txt</span>`

,

`<span class="editor-theme-code">.list</span>`

 und

`<span class="editor-theme-code">/var/log/needrestart-stale.txt</span>`

. Merkt sich das erste Auftreten je Dienst in

`<span class="editor-theme-code">/var/lib/needrestart-status/first-seen.txt</span>`

.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Ansible**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">`<span class="editor-theme-code">playbooks/setup_needrestart.yml</span>`

 (nur mit

`<span class="editor-theme-code">--limit</span>`

, startet selbst nichts neu). Teil von

`<span class="editor-theme-code">playbooks/site.yml</span>`

.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Neuer Server**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">In

`<span class="editor-theme-code">inventory/hosts.yml</span>`

 eintragen,

`<span class="editor-theme-code">ansible-playbook playbooks/site.yml --limit <server></span>`

, in Zabbix Template verknüpfen.

</td></tr><tr><td style="border: 1px solid rgb(191, 191, 191); padding: 6px; font-weight: bold;">**Ausnahme ändern**

</td><td style="border: 1px solid rgb(191, 191, 191); padding: 6px;">Nur im Repo (

`<span class="editor-theme-code">files/needrestart-autorestart.conf</span>`

), Test auf zwei Servern, dann ausrollen.

</td></tr></tbody></table>