«سرور کند است» گزارش خطای بیفایدهای است، مگر اینکه بتوانید یک نمودار باز کنید و ببینید حافظه سه روز پیش از خرابی مدام بالا رفته است. Prometheus و Grafana همین را به شما میدهند: CPU، RAM، دیسک و شبکه هر سرور، ثبتشده هر ۱۵ ثانیه و رسمشده به شکل نمودارهایی که میتوانید در آنها به عقب بروید. آنها را روی VPS کوچک مخصوص خودشان بگذارید تا حتی وقتی یک سرور تولید زمین میخورد، به پاییدن ادامه دهند.
اجزا
- node_exporter روی هر سروری که میخواهید بپایید: متریکهای سیستم را روی پورت ۹۱۰۰ ارائه میدهد.
- Prometheus روی VPS مانیتورینگ: آن متریکها را میخواند (scrape) و ذخیره میکند.
- Grafana: داشبوردها، پشت HTTPS.
- به صورت اختیاری Alertmanager یا هشدارهای Grafana تا وقتی چیزی از حدی گذشت به شما پیام دهد.
چه چیزهایی لازم دارید
- Micro-IP (۱۰ دلار در ماه، ۲ vCPU، ۲ گیگابایت RAM، ۲۵ گیگابایت) ده تا بیست سرور را میپاید. برای میزبانهای بیشتر، متریکهای سفارشی اپلیکیشن یا نگهداری چندماهه: Small-IP.
- یک IPv4 اختصاصی برای سرور مانیتورینگ: Grafana از طریق HTTPS ارائه میشود و سرورهای هدف شما میتوانند یک آدرس ثابت را برای پورت ۹۱۰۰ در لیست سفید بگذارند.
۱. 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 مانیتورینگ خود جایگزین کنید. هرگز پورت ۹۱۰۰ را برای همه باز نگذارید؛ اطلاعات زیادی درباره سرور شما لو میدهد.
۲. 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 آن را scrape کند. جهت را برعکس کنید: Prometheus را در حالت agent روی سرور NAT اجرا کنید و به سرور مانیتورینگ push کنید که از قبل نوشتن از راه دور را میپذیرد (گزینه --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 در دسترس بگذارید.
نکات صادقانه
Prometheus میکشد (pull)؛ این برای مجموعه سرورهایی که کنترلشان میکنید عالی است و برای هر چیزی پشت NAT دستوپاگیر، و ترفند agent از همینجا میآید. ذخیرهسازی محلی آن برای سالها تاریخچه ساخته نشده؛ برای نگهداری طولانی بعداً یک ذخیرهساز راه دور اضافه میکنید. و داشبوردها فقط نیمی از ارزشاند: از روز اول دستکم سه هشدار تنظیم کنید (دیسک بالای ۸۵٪، فشار حافظه، هدف از دسترس خارج)، وگرنه فقط وقتی به نمودارها نگاه میکنید که چیزی از قبل خراب شده است.
مرتبط
- VPS برای مانیتورینگ uptime (Uptime Kuma): هشدار قطعی و صفحه وضعیت
- چطور فایروال UFW را پیکربندی کنیم
- یک VPS چقدر RAM لازم دارد؟
نظرات
هنوز نظری نیست. اولین نفر باشید.