«Сървърът е бавен» е безполезен доклад за грешка, освен ако не можеш да отвориш графика и да видиш, че паметта е растяла три дни преди срива. Точно това ти дават Prometheus и Grafana: CPU, RAM, диск и мрежа на всеки сървър, записвани на всеки 15 секунди и начертани като графики, в които можеш да се върнеш назад. Сложи ги на собствен малък VPS и те продължават да наблюдават дори когато продукционна машина падне.
Частите
- node_exporter на всеки сървър, който искаш да наблюдаваш: излага системни метрики на порт 9100.
- Prometheus на мониторинг VPS-а: изтегля (scrape) тези метрики и ги пази.
- Grafana: таблата, зад HTTPS.
- По желание Alertmanager или известия от Grafana, за да ти пишат, когато нещо премине граница.
Какво ти трябва
- Micro-IP ($10/месец, 2 vCPU, 2 GB RAM, 25 GB) наблюдава от десет до двадесет сървъра. За повече хостове, собствени метрики на приложения или пазене за месеци: Small-IP.
- Dedicated IPv4 за мониторинг сървъра: Grafana се сервира по HTTPS, а целите ти могат да сложат в whitelist един стабилен адрес за порт 9100.
1. node_exporter на всяка цел
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
Смени 203.0.113.10 с адреса на мониторинг VPS-а. Никога не оставяй 9100 отворен към света; издава много за сървъра ти.
2. Prometheus и Grafana на мониторинг VPS-а
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 пред Grafana:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
Влез (admin / admin, после го смени), добави Prometheus като източник на данни на http://prometheus:9090 и импортирай таблото от общността «Node Exporter Full» (ID 1860). След около минута имаш пълно системно табло.
Сървъри на NAT планове
NAT сървър приема входящи връзки само на личния си SSH порт, така че Prometheus не може да изтегли неговия exporter. Обърни посоката: пусни Prometheus в agent режим на NAT машината и изпращай към мониторинг сървъра, който вече приема remote writes (флагът --web.enable-remote-write-receiver по-горе).
# /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
Изложи този push endpoint през Caddy с basic auth, вместо да отваряш гол порт 9090.
Честни бележки
Prometheus тегли (pull); това е чудесно за парк от сървъри, които контролираш, и неудобно за всичко зад NAT, оттам и номерът с agent-а. Локалното му хранилище не е предвидено за години история; за дълго пазене по-късно ще добавиш отдалечено хранилище. И таблата са само половината стойност: настрой поне три известия още първия ден (диск над 85%, натиск върху паметта, недостъпна цел), иначе ще гледаш графиките чак след като нещо вече се е счупило.
Свързани
- VPS за мониторинг на uptime (Uptime Kuma): известия за прекъсвания и статус страници
- Как да настроиш UFW firewall
- Колко RAM трябва на един VPS?
Коментари
Още няма коментари. Бъди първият.