Zabbix ist eine Enterprise-Monitoring-Lösung für Netzwerke, Server und Anwendungen. Es bietet umfangreiche Funktionen für Datensammlung, Alerting und Visualisierung.
Architektur
Komponenten
Zabbix Server - Zentrale Verarbeitung
Zabbix Frontend - Web-Interface (PHP)
Zabbix Agent - Datensammlung auf Hosts
Zabbix Proxy - Verteiltes Monitoring
Datenbank - DatenspeicherungDatenfluss
Agents/SNMP/API → [Zabbix Proxy] → Zabbix Server → Datenbank
↓
Web Frontend / AlertingInstallation (Debian/Ubuntu)
Repository einrichten
# Zabbix Repository
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu24.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu24.04_all.deb
apt updateServer und Frontend
# Server, Frontend, Agent installieren
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
# MySQL installieren (falls nicht vorhanden)
apt install mariadb-serverDatenbank einrichten
# MySQL aufsetzen
mysql_secure_installation
# Datenbank und Benutzer erstellen
mysql -u root -p << EOF
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
EOF
# Schema importieren
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
# Log_bin_trust wieder deaktivieren
mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"Server konfigurieren
# /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=passwordServices starten
systemctl enable --now zabbix-server zabbix-agent apache2
systemctl restart zabbix-server zabbix-agent apache2Web-Setup
1. http://server/zabbix öffnen
2. Sprache wählen
3. Datenbank-Verbindung eingeben
4. Server-Details konfigurieren
5. Installation abschließen
Standard-Login:
- Benutzer: Admin
- Passwort: zabbixZabbix Agent
Agent installieren
# Auf überwachtem Host
apt install zabbix-agent2
# oder klassischer Agent
apt install zabbix-agentAgent konfigurieren
# /etc/zabbix/zabbix_agent2.conf
Server=192.168.1.10 # Zabbix Server IP
ServerActive=192.168.1.10 # Für aktive Checks
Hostname=webserver # Hostname (muss in Zabbix übereinstimmen)Agent starten
systemctl enable --now zabbix-agent2Firewall
# Port 10050 für passive Checks
ufw allow from 192.168.1.10 to any port 10050Hosts hinzufügen
Via Web-Interface
Data collection → Hosts → Create host
Host name: webserver
Groups: Linux servers
Interfaces:
- Agent: 192.168.1.20:10050
Templates: Linux by Zabbix agentWichtige Templates
| Template | Verwendung | |----------|------------| | Linux by Zabbix agent | Linux-Server | | Windows by Zabbix agent | Windows-Server | | Nginx by Zabbix agent | Nginx Webserver | | MySQL by Zabbix agent | MySQL-Datenbank | | PostgreSQL by Zabbix agent | PostgreSQL | | Docker by Zabbix agent | Docker-Container |
Host-Gruppen
Configuration → Host groups → Create host group
Name: Webservers
Name: Database servers
Name: Production
Name: DevelopmentItems (Metriken)
Item-Typen
| Typ | Beschreibung | |-----|--------------| | Zabbix agent | Agent-basierte Checks | | SNMP agent | SNMP-Abfragen | | Simple check | Netzwerk-Checks | | External check | Externe Skripte | | HTTP agent | HTTP-Anfragen | | Calculated | Berechnete Werte | | Dependent | Abhängige Items |
Eigenes Item erstellen
Host → Items → Create item
Name: Custom metric
Type: Zabbix agent
Key: system.run[/usr/local/bin/check_custom.sh]
Type of info: Numeric (unsigned)
Update interval: 1mUserParameter (Agent)
# /etc/zabbix/zabbix_agent2.d/custom.conf
UserParameter=custom.metric,/usr/local/bin/check_custom.sh
UserParameter=custom.value[*],/usr/local/bin/check_value.sh $1 $2# Test
zabbix_agent2 -t custom.metricTriggers
Trigger erstellen
Host → Triggers → Create trigger
Name: High CPU usage on {HOST.NAME}
Severity: Warning
Expression: avg(/webserver/system.cpu.util,5m)>80Expression-Syntax
# Durchschnitt über 5 Minuten > 80
avg(/host/key,5m)>80
# Letzter Wert = 0
last(/host/key)=0
# Änderung in letzten 30 Minuten
change(/host/key)>100
# Keine Daten seit 10 Minuten
nodata(/host/key,10m)=1
# Mehrere Bedingungen
avg(/host/cpu,5m)>80 and avg(/host/mem,5m)>90Severity-Level
| Level | Farbe | Verwendung | |-------|-------|------------| | Not classified | Grau | Standard | | Information | Blau | Info | | Warning | Gelb | Warnung | | Average | Orange | Mittel | | High | Rot | Hoch | | Disaster | Rot dunkel | Kritisch |
Benachrichtigungen
Media Types
Administration → Media types
- Email
- SMS
- Slack
- Telegram
- PagerDuty
- Custom scriptsEmail einrichten
Administration → Media types → Email
SMTP server: smtp.example.com
SMTP server port: 587
SMTP helo: zabbix.example.com
SMTP email: zabbix@example.com
Security: STARTTLS
Authentication: Username and password
Username: zabbix@example.com
Password: ***Benutzer-Media
Administration → Users → Admin → Media
Type: Email
Send to: admin@example.com
When active: 1-7,00:00-24:00
Severity: Warning, Average, High, DisasterActions
Alerts → Actions → Trigger actions → Create action
Name: Notify admins
Conditions:
- Trigger severity >= Warning
Operations:
- Send message to: Admin users
- Subject: Problem: {EVENT.NAME}
- Message: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {TRIGGER.SEVERITY}Dashboards
Dashboard erstellen
Monitoring → Dashboards → Create dashboard
Name: Server OverviewWidgets
| Widget | Funktion | |--------|----------| | Problems | Aktuelle Probleme | | System information | Zabbix-Status | | Host availability | Verfügbarkeit | | Graph | Metriken-Graphen | | Clock | Uhrzeit | | Map | Netzwerk-Karte | | Top hosts | Top N Hosts |
Graph-Widget
Add widget → Graph
Type: Graph
Host: webserver
Item: CPU utilization
Time period: Last 1 hourTemplates
Template erstellen
Data collection → Templates → Create template
Template name: Custom Linux
Groups: Templates/Operating systemsTemplate-Komponenten
Template → Items: Metriken definieren
Template → Triggers: Schwellwerte
Template → Graphs: Visualisierung
Template → Dashboards: Übersicht
Template → Discovery: Auto-DiscoveryTemplate verlinken
Host → Templates → Link new templates
→ Template auswählen
→ UpdateDiscovery
Network Discovery
Data collection → Discovery → Create discovery rule
Name: Local network scan
IP range: 192.168.1.1-254
Update interval: 1h
Checks:
- Zabbix agent "system.uname"
- SNMP OID ".1.3.6.1.2.1.1.1.0"Discovery Actions
Alerts → Actions → Discovery actions
Conditions:
- Discovery status = Up
- Service type = Zabbix agent
Operations:
- Add host
- Add to host group: Discovered hosts
- Link to template: Linux by Zabbix agentLow-Level Discovery (LLD)
# Agent-seitig (z.B. Filesystems)
vfs.fs.discovery
# Eigenes Discovery
UserParameter=custom.discovery,/usr/local/bin/discover.sh
# Output-Format (JSON)
{
"data": [
{"{#FSNAME}": "/", "{#FSTYPE}": "ext4"},
{"{#FSNAME}": "/home", "{#FSTYPE}": "ext4"}
]
}API
API-Token erstellen
Administration → General → API tokens → Create API token
Name: automation
User: Admin
Expires at: (optional)API-Beispiele
# Login (klassisch)
curl -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"id":1}' \
http://zabbix/api_jsonrpc.php
# Mit Token
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid","host"]},"id":1}' \
http://zabbix/api_jsonrpc.phpPython-Beispiel
from pyzabbix import ZabbixAPI
zapi = ZabbixAPI("http://zabbix/")
zapi.login(api_token="TOKEN")
# Hosts abrufen
hosts = zapi.host.get(output=["hostid", "host", "status"])
for host in hosts:
print(f"{host['host']}: {host['status']}")Proxy
Proxy installieren
# Auf Proxy-Server
apt install zabbix-proxy-mysql
# Datenbank
mysql -u root -p << EOF
CREATE DATABASE zabbix_proxy CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
GRANT ALL ON zabbix_proxy.* TO 'zabbix'@'localhost' IDENTIFIED BY 'password';
EOF
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql -uzabbix -p zabbix_proxyProxy konfigurieren
# /etc/zabbix/zabbix_proxy.conf
Server=192.168.1.10 # Zabbix Server
Hostname=proxy-office # Muss in Zabbix konfiguriert sein
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=passwordProxy in Zabbix registrieren
Administration → Proxies → Create proxy
Proxy name: proxy-office
Proxy mode: ActiveTroubleshooting
Server-Logs
# Log prüfen
tail -f /var/log/zabbix/zabbix_server.log
# Detailliertes Logging
# /etc/zabbix/zabbix_server.conf
DebugLevel=4Agent-Test
# Agent-Konnektivität
zabbix_get -s 192.168.1.20 -k agent.ping
# Item abfragen
zabbix_get -s 192.168.1.20 -k system.cpu.util
# Lokaler Test
zabbix_agent2 -t system.cpu.utilHäufige Probleme
# Agent nicht erreichbar
# → Firewall prüfen (Port 10050)
# → Agent-Konfiguration prüfen
# Keine Daten
# → Item-Status in Frontend prüfen
# → Agent-Log prüfen
# Template-Änderungen nicht aktiv
# → Cache leeren: Administration → General → HousekeeperZusammenfassung
| Komponente | Port | Beschreibung | |------------|------|--------------| | Server | 10051 | Empfängt Agent-Daten | | Agent | 10050 | Sendet Metriken | | Frontend | 80/443 | Web-Interface | | API | 80/443 | REST-API |
| Datei | Beschreibung | |-------|--------------| | /etc/zabbix/zabbix_server.conf | Server-Config | | /etc/zabbix/zabbix_agent2.conf | Agent-Config | | /var/log/zabbix/ | Logs |
| Befehl | Funktion | |--------|----------| | zabbix_get -s HOST -k KEY | Item abfragen | | zabbix_agent2 -t KEY | Lokaler Item-Test | | zabbix_server -R config_cache_reload | Cache neu laden |
Fazit
Zabbix ist eine vollständige Enterprise-Monitoring-Lösung mit umfangreichen Funktionen. Die Kombination aus Agent-basiertem Monitoring, SNMP und API-Integration deckt praktisch alle Anwendungsfälle ab. Templates und Auto-Discovery reduzieren den Konfigurationsaufwand erheblich. Für verteilte Umgebungen bieten Proxies eine skalierbare Architektur.