Enterprise-Infrastruktur-Telemetrie: Zabbix 7 LTS, TimescaleDB Hypertables, Zabbix Agent 2 & PSK-Verschlüsselung
Erstellt: 06.11.2026 Aktualisiert: 06.11.2026
Management Summary: Während synthetische Verfügbarkeitstests nur aussagen, ob ein Endpunkt erreichbar ist, erfordert echte Systembeobachtbarkeit tiefgreifende Kernel-, Storage-, SMART-, systemd- und SNMP-Telemetrie mit prädiktiven Schwellenwerten. Diese Referenzarchitektur beschreibt das Produktiv-Deployment von Zabbix 7.0 LTS mit PostgreSQL 17 + TimescaleDB Hypertable-Kompression, dem Go-basierten Zabbix Agent 2 mit TLS Pre-Shared Key (
PSK) Verschlüsselung, SNMPv3-Switch-Polling und flatterfreien Hysterese-Triggern.
-
TimescaleDB Hypertable-Kompression
Partitioniert
history- undtrends-Tabellen in Zeit-Chunks mit nativer spaltenbasierter Kompression (~90 % Speicherersparnis) und sofortigem Chunk-Drop statt ressourcenintensiven SQL-DELETE-Schleifen. -
Zabbix Agent 2 (Go-Architektur)
Ersetzt veraltete C-Agenten durch den nebenläufigen Go-basierten
zabbix-agent2mit nativen Plugins für Docker, systemd, SMART (smartctl), PostgreSQL und Redis. -
TLS-PSK Verschlüsselte Active Checks
Authentifiziert und verschlüsselt alle Metrikübertragungen über Port
10050/10051mit 256-Bit Pre-Shared Keys (TLSConnect=psk). -
Prädiktive Hysterese-Trigger
Verhindert flatternde Alarme durch Recovery-Expressions,
timeleft()-Kapazitätsprognosen und Low-Level Discovery (LLD) Prototypen.
1. Architektur: Zabbix Server Worker, Agents & TimescaleDB
Zabbix 7 LTS setzt auf einen hochoptimierten C-Server-Daemon (zabbix_server) mit spezialisierten Worker-Pools (Poller, Trapper, HistorySyncer, Preprocessor, LLDManager), die kontinuierliche Datenströme in PostgreSQL + TimescaleDB schreiben:
%%{init: {'flowchart': {'wrappingWidth': 600, 'subGraphTitleMargin': {'top': 15, 'bottom': 15}}}}%%
flowchart TB
subgraph MonitoredFleet["Überwachte Infrastruktur"]
LinuxHost["Linux-Nodes (Zabbix Agent 2)<br/>Systemd + SMART + Docker<br/>TLS-PSK :10050/:10051"]
Switch["Managed Core-Switches<br/>SNMPv3 authPriv (SHA/AES)"]
end
subgraph ZabbixCore["Zabbix 7.0 LTS Core Engine"]
Pollers["Poller & Trapper Pool<br/>Preprocessors + LLD Engine"]
VCache["ValueCache & HistoryCache<br/>Shared Memory Buffer"]
WebUI["Zabbix Web Frontend<br/>Nginx + PHP-FPM"]
end
subgraph StorageTier["Time-Series Speicher-Backend"]
TSDB[("PostgreSQL 17 + TimescaleDB<br/>Komprimierte Hypertable-Chunks")]
end
LinuxHost <-->|"Verschlüsselt TLS-PSK"| Pollers
Switch -->|"SNMPv3 BulkWalk"| Pollers
Pollers --> VCache
VCache -->|"Batch Insert"| TSDB
WebUI <--> TSDB
Warum TimescaleDB den "Housekeeper"-Flaschenhals löst
In standardmäßigen relationalen Datenbanken führt Zabbix' Housekeeper-Prozess massive DELETE FROM history WHERE clock < ...-Befehle aus. Auf größeren Installationen verursacht dies gravierende Tabellen-Fragmentierung, I/O-Spitzen und autovacuum-Überlastung. Mit TimescaleDB werden history und trends in Zeit-Chunks (z. B. 1 Tag) aufgeteilt. Das Bereinigen von Daten älter als 90 Tage ist eine atomare drop_chunks()-Metadaten-Operation ohne zeilenweises Löschen.
2. Produktiv-Stack: Zabbix 7.0 LTS + PostgreSQL 17 TimescaleDB
services:
postgres-tsdb:
image: timescale/timescaledb-ha:pg17
container_name: zabbix-timescaledb
restart: unless-stopped
shm_size: "1g"
environment:
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: "${ZBX_DB_PASSWORD}"
POSTGRES_DB: zabbix
command:
- "postgres"
- "-c"
- "shared_buffers=1GB"
- "-c"
- "work_mem=32MB"
- "-c"
- "maintenance_work_mem=256MB"
- "-c"
- "max_connections=200"
volumes:
- ./pgdata:/home/postgres/pgdata/data:Z
networks:
- zbx_net
zabbix-server:
image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
container_name: zabbix-server
restart: unless-stopped
depends_on:
- postgres-tsdb
ports:
- "10051:10051/tcp"
environment:
DB_SERVER_HOST: postgres-tsdb
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: "${ZBX_DB_PASSWORD}"
POSTGRES_DB: zabbix
ZBX_ENABLE_SNMP_TRAPS: "false"
ZBX_STARTPOLLERS: 10
ZBX_STARTPREPROCESSORS: 8
ZBX_STARTLLDPROCESSORS: 4
ZBX_CACHESIZE: 64M
ZBX_HISTORYCACHESIZE: 64M
ZBX_HISTORYINDEXCACHESIZE: 32M
ZBX_TRENDCACHESIZE: 32M
ZBX_VALUECACHESIZE: 128M
networks:
- zbx_net
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
container_name: zabbix-web
restart: unless-stopped
depends_on:
- postgres-tsdb
- zabbix-server
ports:
- "127.0.0.1:8085:8080/tcp"
environment:
ZBX_SERVER_HOST: zabbix-server
DB_SERVER_HOST: postgres-tsdb
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: "${ZBX_DB_PASSWORD}"
POSTGRES_DB: zabbix
PHP_TZ: "Europe/Berlin"
networks:
- zbx_net
networks:
zbx_net:
driver: bridge
TimescaleDB-Erweiterung und Hypertable-Schema nach der Initialisierung aktivieren:
# 1. TimescaleDB-Extension in der zabbix-Datenbank aktivieren
docker exec -i zabbix-timescaledb psql -U zabbix -d zabbix \
-c "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;"
# 2. Zabbix TimescaleDB-Schema-Migrationsskript einspielen
docker exec -i zabbix-server cat /usr/share/doc/zabbix-sql-scripts/postgresql/timescaledb/schema.sql \
| docker exec -i zabbix-timescaledb psql -U zabbix -d zabbix
3. Zabbix Agent 2 mit TLS-PSK & SMART/Docker-Plugins ausrollen
Installieren Sie auf zu überwachenden Hosts zabbix-agent2 und erzeugen Sie einen 256-Bit Pre-Shared Key (PSK):
# 1. 256-Bit Hex PSK generieren
sudo mkdir -p /etc/zabbix/psk
openssl rand -hex 32 | sudo tee /etc/zabbix/psk/agent.psk
sudo chown -R zabbix:zabbix /etc/zabbix/psk
sudo chmod 0400 /etc/zabbix/psk/agent.psk
# 2. Berechtigungen für Docker-Socket und NVMe/SATA-SMART-Diagnose erteilen
sudo usermod -aG docker zabbix
cat << 'EOF' | sudo tee /etc/sudoers.d/zabbix-smartctl
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl
EOF
sudo chmod 0440 /etc/sudoers.d/zabbix-smartctl
In /etc/zabbix/zabbix_agent2.conf hinterlegen:
Server=192.168.10.25
ServerActive=192.168.10.25
Hostname=proxmox-node-01.lan.nejat-hakan.de
# TLS-PSK für eingehende (Passive) und ausgehende (Active) Prüfungen erzwingen
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK_PROXMOX_NODE_01
TLSPSKFile=/etc/zabbix/psk/agent.psk
# Native Go-Plugins für Systemd, Docker und SMART aktivieren
Plugins.Smart.Path=/usr/sbin/smartctl
4. Flatterfreie Trigger mit Hysterese & Prognosen
Einfache Schwellenwerte (last(/host/system.cpu.util) > 85) erzeugen unnötige Alarme, wenn Werte um den Grenzwert schwanken. Zabbix 7 bietet Recovery Expressions und lineare Trendvorhersagen:
# 1. Hysterese: Alarm bei 5m-Durchschnitt > 85 %, Entwarnung erst wenn 10m-Durchschnitt unter 70 % fällt
Problem Expression: avg(/Linux by Zabbix agent/system.cpu.util, 5m) > 85
Recovery Expression: avg(/Linux by Zabbix agent/system.cpu.util, 10m) < 70
# 2. Speicherplatz-Vorhersage: Alarm, wenn lineare Regression volles Dateisystem innerhalb von 24h prognostiziert
Problem Expression: last(/Linux by Zabbix agent/vfs.fs.dependent.size[/,pused]) > 80
and timeleft(/Linux by Zabbix agent/vfs.fs.dependent.size[/,pused], 6h, 100) < 24h
# 3. NVMe / SATA SMART Hardwarewarnung
Problem Expression: last(/SMART by Zabbix agent 2/smart.disk.critical_warning[{#NAME}]) > 0
5. Verifikation & Diagnostik mit zabbix_get
Verbindung und Schlüsselabfrage vom Zabbix-Server über verschlüsseltes TLS-PSK testen:
# 1. Lokale Plugin-Schlüssel direkt auf dem Host testen
sudo zabbix_agent2 -t smart.disk.get
sudo zabbix_agent2 -t docker.containers
# 2. Agent 2 über TLS-PSK vom Zabbix-Server aus abfragen
docker exec zabbix-server zabbix_get \
-s 192.168.10.20 -p 10050 \
--tls-connect psk \
--tls-psk-identity "PSK_PROXMOX_NODE_01" \
--tls-psk-file /var/lib/zabbix/enc/agent.psk \
-k "system.uname"