”Servern är långsam” är en värdelös felrapport, om du inte kan öppna ett diagram och se att minnet klättrade i tre dagar före kraschen. Det är vad Prometheus och Grafana ger dig: varje servers CPU, RAM, disk och nätverk, registrerat var 15:e sekund och ritat i diagram du kan bläddra bakåt i. Lägg dem på en egen liten VPS så fortsätter de att hålla koll även när en produktionsmaskin faller.
Delarna
- node_exporter på varje server du vill bevaka: exponerar systemmätvärden på port 9100.
- Prometheus på övervaknings-VPS:en: hämtar (scrapar) mätvärdena och lagrar dem.
- Grafana: panelerna, bakom HTTPS.
- Valfritt Alertmanager eller Grafanas larm, som meddelar dig när något passerar en gräns.
Det här behöver du
- Micro-IP ($10/mån, 2 vCPU, 2 GB RAM, 25 GB) bevakar ett eller två dussin servrar. Fler värdar, egna appmätvärden eller månader av lagring: Small-IP.
- En dedikerad IPv4 för övervakningsservern: Grafana serveras över HTTPS, och dina mål kan vitlista en fast adress för port 9100.
1. node_exporter på varje mål
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
Byt ut 203.0.113.10 mot adressen till din övervaknings-VPS. Lämna aldrig 9100 öppen för hela världen: den avslöjar mycket om din server.
2. Prometheus och Grafana på övervaknings-VPS:en
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
HTTPS framför Grafana:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
Logga in (admin / admin, byt sedan lösenord), lägg till Prometheus som datakälla på http://prometheus:9090 och importera communitypanelen ”Node Exporter Full” (ID 1860). På ungefär en minut har du en komplett systempanel.
Servrar på NAT-planer
En NAT-server tar bara emot inkommande anslutningar på sin personliga SSH-port, så Prometheus kan inte hämta från dess exporter. Vänd på riktningen: kör Prometheus i agentläge på NAT-maskinen och skicka till övervakningsservern, som redan tar emot fjärrskrivningar (flaggan --web.enable-remote-write-receiver ovan).
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
Exponera den mottagande slutpunkten via Caddy med basic auth i stället för att öppna port 9090 rakt av.
Ärliga anteckningar
Prometheus bygger på pull: utmärkt för en flotta du kontrollerar och besvärligt för allt bakom NAT, därav agenttricket. Den lokala lagringen är inte gjord för år av historik; för lång lagring lägger du till en fjärrlagring senare. Och paneler är bara halva värdet: sätt upp minst tre larm dag ett (disk över 85 %, minnestryck, mål nere), annars tittar du på diagrammen först när något redan har gått sönder.
Relaterat
- VPS för drifttidsövervakning (Uptime Kuma): larm vid avbrott och statussidor
- Så konfigurerar du brandväggen UFW
- Hur mycket RAM behöver en VPS?
Kommentarer
Inga kommentarer än. Bli först.