«השרת איטי» הוא דיווח באג חסר תועלת, אלא אם אפשר לפתוח גרף ולראות שהזיכרון טיפס שלושה ימים לפני הקריסה. זה מה ש-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.
- IPv4 ייעודי לשרת הניטור: Grafana מוגש ב-HTTPS, והיעדים שלכם יכולים להכניס כתובת קבועה אחת לרשימת היתר של פורט 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 ודחפו לשרת הניטור, שכבר מקבל כתיבה מרחוק (הדגל --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 הזו דרך Caddy עם basic auth במקום לפתוח את פורט 9090 גולמי.
הערות כנות
Prometheus מושך; זה מצוין לצי שרתים שבשליטתכם ומסורבל לכל מה שמאחורי NAT, ומכאן טריק ה-agent. האחסון המקומי שלו לא נועד לשנים של היסטוריה; לשמירה ארוכה תוסיפו בהמשך אחסון מרוחק. ודשבורדים הם רק חצי מהערך: הגדירו לפחות שלוש התראות מהיום הראשון (דיסק מעל 85%, לחץ זיכרון, יעד לא זמין), אחרת תסתכלו בגרפים רק אחרי שמשהו כבר נשבר.
קשור
- VPS לניטור זמינות (Uptime Kuma): התראות על נפילות ודפי סטטוס
- איך להגדיר חומת אש UFW
- כמה RAM צריך VPS?
תגובות
אין עדיין תגובות. היו הראשונים.