Proxy-Server-Einrichtung: Squid und HAProxy Anleitung
Squid Forward Proxy, HAProxy Load Balancer, SSL-Terminierung, ACL-Regeln, Caching, Health Checks und Hochverfügbarkeit.
Prometheus + Grafana Stack-Einrichtung, Netdata, node_exporter, Alarmregeln, Dashboard-Erstellung und Server-Metrik-Überwachung.
Die effektive Überwachung Ihrer Serverinfrastruktur ist entscheidend für die frühzeitige Erkennung von Leistungsproblemen und die Vermeidung von Ausfallzeiten. In dieser Anleitung richten wir ein umfassendes Server-Überwachungssystem mit Prometheus, Grafana und Netdata ein.
Prometheus ist ein von der Cloud Native Computing Foundation (CNCF) unterstütztes Open-Source-System zur Metrikerfassung und Überwachung. Mit seiner Pull-basierten Architektur ruft es regelmäßig Metriken von Zielsystemen über HTTP ab und speichert sie in einer Zeitreihendatenbank.
Wichtige Funktionen von Prometheus:
Node Exporter ist ein Prometheus-Exporter, der Hardware- und Betriebssystem-Metriken von Linux-Servern sammelt.
# Node Exporter herunterladen
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xzf node_exporter-1.7.0.linux-amd64.tar.gz
# Binary verschieben
sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
# Benutzer erstellen
sudo useradd --no-create-home --shell /bin/false node_exporter
# Systemd-Servicedatei
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter \\
--collector.systemd \\
--collector.processes \\
--web.listen-address=:9100
[Install]
WantedBy=multi-user.target
EOF
# Service starten
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
# docker-compose.yml
version: '3.8'
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
Metriken überprüfen:
curl http://localhost:9100/metrics | head -50
# docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
- '--web.enable-lifecycle'
volumes:
prometheus_data:
# prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
rule_files:
- "alert_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets:
- 'node-exporter:9100'
- '192.168.1.10:9100'
- '192.168.1.11:9100'
labels:
env: 'production'
- job_name: 'docker'
static_configs:
- targets: ['cadvisor:8080']
Erkennen Sie kritische Zustände mit Prometheus-Alarmregeln:
# prometheus/alert_rules.yml
groups:
- name: server_alerts
rules:
- alert: HoheCPUAuslastung
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels:
severity: warning
annotations:
summary: "Hohe CPU-Auslastung ({{ $labels.instance }})"
description: "CPU-Auslastung beträgt {{ $value | printf \"%.1f\" }}% - seit 5 Minuten über 85%."
- alert: HoherSpeicherverbrauch
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "Hoher Speicherverbrauch ({{ $labels.instance }})"
description: "Speicherverbrauch beträgt {{ $value | printf \"%.1f\" }}% - über 90%."
- alert: FestplatteFastVoll
expr: (1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "Festplatte fast voll ({{ $labels.instance }})"
description: "{{ $labels.mountpoint }} Festplattenauslastung beträgt {{ $value | printf \"%.1f\" }}%"
- alert: InstanzNichtErreichbar
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Instanz nicht erreichbar ({{ $labels.instance }})"
description: "{{ $labels.job }} Ziel ist seit 2 Minuten nicht erreichbar."
# alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'telegram'
routes:
- match:
severity: critical
receiver: 'telegram'
repeat_interval: 1h
receivers:
- name: 'telegram'
telegram_configs:
- bot_token: 'IHR_BOT_TOKEN'
chat_id: IHRE_CHAT_ID
parse_mode: 'HTML'
message: |
<b>{{ .Status | toUpper }}</b>
<b>Alarm:</b> {{ .CommonLabels.alertname }}
<b>Schweregrad:</b> {{ .CommonLabels.severity }}
<b>Instanz:</b> {{ .CommonLabels.instance }}
<b>Beschreibung:</b> {{ .CommonAnnotations.description }}
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=StarkesPasswort123!
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_ROOT_URL=https://grafana.example.com
volumes:
grafana_data:
Sie können fertige Dashboards von Grafana.com importieren:
# Node Exporter Full Dashboard
Dashboard ID: 1860
Datenquelle: Prometheus
# Docker Container Monitoring
Dashboard ID: 893
# Prometheus Stats
Dashboard ID: 2
Zum Importieren: Grafana → Dashboards → Import → Dashboard-ID eingeben → Load → Prometheus-Datenquelle auswählen → Import.
# CPU-Auslastung in Prozent
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# RAM-Auslastung in Prozent
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
# Festplattenauslastung in Prozent
(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100
# Netzwerkverkehr (Bytes/Sekunde)
rate(node_network_receive_bytes_total{device="eth0"}[5m])
rate(node_network_transmit_bytes_total{device="eth0"}[5m])
# System-Betriebszeit
node_time_seconds - node_boot_time_seconds
Netdata ist ein Echtzeit-Server-Überwachungstool. Die Installation ist äußerst einfach und liefert sofort detaillierte Metriken.
# Automatisches Installationsskript
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# Nach der Installation
sudo systemctl status netdata
Weboberfläche: http://SERVER_IP:19999
version: '3.8'
services:
netdata:
image: netdata/netdata:latest
container_name: netdata
restart: unless-stopped
ports:
- "19999:19999"
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
netdataconfig:
netdatalib:
netdatacache:
Kombinieren Sie alle Komponenten in einer einzigen Compose-Datei:
# docker-compose.monitoring.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- prometheus
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- "9100:9100"
networks:
- monitoring
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
ports:
- "9093:9093"
networks:
- monitoring
networks:
monitoring:
driver: bridge
volumes:
prometheus_data:
grafana_data:
docker compose -f docker-compose.monitoring.yml up -d
Mit dem Prometheus + Grafana + Netdata Stack können Sie Ihre gesamte REXE-Serverinfrastruktur über ein einziges Dashboard überwachen. Alarmregeln ermöglichen die proaktive Erkennung von Problemen.
Prometheus ist ideal für die Metrikerfassung und Langzeitspeicherung mit leistungsstarker PromQL-Abfrage. Netdata ist für Echtzeitüberwachung optimiert und sehr einfach zu installieren. Der beste Ansatz ist, beide zusammen zu verwenden: Netdata für sofortige Überwachung und schnelle Problemerkennung, Prometheus + Grafana für langfristige Trendanalyse und benutzerdefinierte Dashboards.
Gehen Sie in der Grafana-Weboberfläche zu Dashboards → Import. Kopieren Sie die Dashboard-ID von grafana.com/grafana/dashboards (z.B. 1860 für Node Exporter Full). Geben Sie die ID ein, klicken Sie auf Load, wählen Sie die Prometheus-Datenquelle und klicken Sie auf Import.
Verkürzen Sie die Aufbewahrungsdauer: '--storage.tsdb.retention.time=15d'. Erhöhen Sie das Scrape-Intervall (30s statt 15s). Filtern Sie unnötige Metriken mit metric_relabel_configs. Verwenden Sie die Admin-API zum Löschen alter Daten: 'curl -X POST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones'.
Überprüfen Sie zunächst, ob Alarme in Prometheus ausgelöst werden: http://localhost:9090/alerts. Stellen Sie sicher, dass Alertmanager läuft: http://localhost:9093/#/alerts. Überprüfen Sie die Konfigurationsdatei: 'amtool check-config alertmanager.yml'. Stellen Sie sicher, dass Bot-Token und Chat-ID korrekt sind.
Node Exporter sammelt CPU-Auslastung, RAM, Festplattenspeicher und I/O, Netzwerkverkehr, Systemlast (Load Average), Dateisystem, Bootzeit, laufende Prozessanzahl, offene Dateideskriptoren und mehr. Zusätzliche Collectors können aktiviert werden: --collector.systemd, --collector.processes, --collector.tcpstat.
Installieren Sie Node Exporter auf jedem Server (Port 9100). Fügen Sie alle Server unter scrape_configs in der Prometheus-Konfiguration hinzu. In Grafana-Dashboards können Sie Server nach Instance-Label filtern. Für viele Server können Sie mit Prometheus Federation oder Thanos skalieren.
Squid Forward Proxy, HAProxy Load Balancer, SSL-Terminierung, ACL-Regeln, Caching, Health Checks und Hochverfügbarkeit.
Nginx Proxy Manager Docker-Installation, automatische SSL-Zertifikatserneuerung, Proxy-Host-Konfiguration, Zugriffslisten, Weiterleitungen, Streams und benutzerdefinierte Locations.
CrowdSec-Installation, Bouncer-Konfiguration, Angriffserkennung, IP-Blockierung, Dashboard, Sammlungs- und Szenario-Verwaltung.