مانیتورینگ منابع سرور لینوکس با استفاده از Prometheus و Grafana

اگر سرور لینوکسی شما به‌عنوان قلب تپنده‌ی وب‌سایت یا سرویس ابری‌تان عمل می‌کند، می‌دانید که غافل‌گیری در مصرف منابع، تجربه‌ای تلخ است؛ از ناگهانی پر شدن RAM گرفته تا بالا رفتن بی‌مقدمه‌ی CPU که می‌تواند به Downtime و از دست رفتن مشتری منجر شود. در این مقاله به‌عنوان یک راهنمای عملی و تخصصی، به سراغ دو ابزار قدرتمند و متن‌باز می‌رویم: Prometheus برای جمع‌آوری متریک‌ها و Grafana برای مصورسازی آن‌ها. شما یاد خواهید گرفت که چگونه یک سیستم مانیتورینگ کامل برای منابع سرور لینوکس (CPU، RAM، دیسک، شبکه و …) راه‌اندازی کنید، هشدارهای هوشمند بسازید و بینش واقعی از سلامت زیرساخت خود به دست آورید. تا پایان این مقاله، می‌توانید یک داشبورد زنده و حرفه‌ای داشته باشید که در هر لحظه وضعیت سرور را نشان می‌دهد.

چرا به مانیتورینگ منابع سرور با Prometheus و Grafana نیاز داریم؟

روش‌های سنتی مانند مشاهده‌ی دستی `top` یا `htop` فقط برای بازه‌های کوتاه جواب می‌دهند و هیچ تصویر تاریخی و تحلیلی از روند مصرف منابع به شما نمی‌دهند. Prometheus به‌عنوان یک پایگاه‌داده‌ی سری زمانی (Time Series Database)، متریک‌ها را با دقت بالا جمع‌آوری و ذخیره می‌کند. Grafana نیز رابط کاربری غنی برای ترسیم نمودارها، ساخت داشبوردهای تعاملی و مدیریت هشدارها فراهم می‌کند. این ترکیب نه‌تنها برای یک VPS کوچک، بلکه برای زیرساخت‌های چند سروره و حتی کلاسترهای Kubernetes استاندارد طلایی صنعت محسوب می‌شود. با استفاده از این ابزارها شما می‌توانید ناهنجاری‌ها را پیش از بحران تشخیص دهید، روند استفاده از حافظه و پردازنده را در بازه‌های زمانی مختلف تحلیل کنید و برای آینده برنامه‌ریزی دقیق‌تری داشته باشید.

آشنایی با معماری و اجزای اصلی

قبل از شروع نصب، بهتر است با ساختار این اکوسیستم آشنا شوید. Prometheus به‌صورت Pull مدل کار می‌کند؛ یعنی روی سرور اصلی نصب می‌شود و به‌طور دوره‌ای از اکسپورترها (Exporterها) که بر روی سرورهای هدف اجرا می‌شوند، متریک می‌گیرد. مشهورترین اکسپورتر برای منابع سیستم، `node_exporter` است که اطلاعات کامل سخت‌افزاری و هسته لینوکس را در معرض دید قرار می‌دهد. Grafana نیز به‌عنوان یک ابزار مصورسازی، به Prometheus متصل می‌شود و داده‌ها را به صورت نمودارهای زنده و چندلایه نمایش می‌دهد.

نقش هر جزء در مانیتورینگ

  • Prometheus Server: وظیفه جمع‌آوری، ذخیره‌سازی و کوئری‌گیری از متریک‌ها را بر عهده دارد. این سرویس به‌صورت پیش‌فرض از پورت 9090 استفاده می‌کند.
  • node_exporter: بر روی هر سرور لینوکس (میزبان یا VPS) نصب می‌شود و متریک‌هایی مانند CPU، حافظه، دیسک، ورودی/خروجی و بار شبکه را در پورت 9100 در اختیار می‌گذارد.
  • Grafana: یک داشبورد تحت وب بر روی پورت 3000 ارائه می‌دهد. شما در این رابط می‌توانید پنل‌های مختلف سفارشی بسازید و از طریق داده‌های Prometheus نمودارهای زنده تولید کنید.
  • Alertmanager: (اختیاری اما پیشنهادی) برای مدیریت هشدارها و ارسال نوتیفیکیشن به تلگرام، ایمیل یا سایر کانال‌ها، از این مؤلفه استفاده می‌شود.

راهنمای گام‌به‌گام راه‌اندازی

در ادامه، فرض می‌کنیم که یک سرور لینوکس (اوبونتو 22.04 یا سنت‌اواس 9) در دسترس دارید و دسترسی روت (sudo) دارید. این مراحل را به‌ترتیب اجرا کنید.

گام اول: نصب Prometheus Server

ابتدا فایل‌های باینری جدیدترین نسخه را از وب‌سایت رسمی دانلود و در مسیر مناسب قرار دهید. برای راحتی، می‌توانید از مخازن رسمی استفاده کنید، اما روش زیر کنترل بیشتری به شما می‌دهد:

cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xvf prometheus-2.53.0.linux-amd64.tar.gz
sudo mv prometheus-2.53.0.linux-amd64 prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv prometheus/prometheus /usr/local/bin/
sudo mv prometheus/promtool /usr/local/bin/
sudo mv prometheus/consoles /etc/prometheus/
sudo mv prometheus/console_libraries /etc/prometheus/

حال فایل پیکربندی اصلی را با ویرایشگر دلخواه (مثلاً nano) ایجاد کنید:

sudo nano /etc/prometheus/prometheus.yml

محتویات زیر را در آن قرار دهید:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

سپس سرویس را به‌صورت systemd تعریف کنید تا در بوت خودکار اجرا شود:

sudo nano /etc/systemd/system/prometheus.service

با محتوای:

[Unit]
Description=Prometheus Server
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/
Restart=always
[Install]
WantedBy=multi-user.target

بعد از ذخیره، دستورات زیر را اجرا کنید:

sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus /etc/prometheus
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

با بررسی `curl localhost:9090` می‌توانید مطمئن شوید سرویس فعال است.

گام دوم: نصب node_exporter

این اکسپورتر باید بر روی همان سرور یا سرورهای دیگری که می‌خواهید مانیتور کنید نصب شود. برای سیستم عامل هدف:

cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo nano /etc/systemd/system/node_exporter.service

محتویات فایل سرویس:

[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target

سپس:

sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

متریک‌ها از آدرس `http://localhost:9100/metrics` در دسترس خواهند بود.

گام سوم: اضافه کردن سرور به Prometheus

برای اینکه Prometheus متریک‌های node_exporter شما را جمع‌آوری کند، بخش `scrape_configs` فایل پیکربندی را به‌روزرسانی کنید:

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']  # اگر روی همین سرور است

در صورت داشتن چند سرور، لیستی بنویسید:
targets: ['192.168.1.10:9100', '10.0.0.5:9100']

پس از ویرایش، سرویس را ریستارت کنید:

sudo systemctl restart prometheus

گام چهارم: نصب و پیکربندی Grafana

Grafana را می‌توانید از مخازن رسمی نصب کنید. برای اوبونتو:

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana

سپس سرویس را اجرا و فعال کنید:

sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

از طریق مرورگر به `http://your-server-ip:3000` بروید. نام کاربری و رمز پیش‌فرض هر دو `admin` است (در اولین ورود از شما خواسته می‌شود رمز را تغییر دهید). سپس مراحل زیر را دنبال کنید:

  • از منوی Configuration، گزینه Data Sources را باز کنید.
  • منبع داده «Prometheus» را انتخاب کنید.
  • آدرس سرور Prometheus را (مثلاً http://localhost:9090) وارد کنید.
  • روی Save & Test کلیک کنید تا اتصال تأیید شود.

ساخت اولین داشبورد و پنل‌های کلیدی

پس از اتصال، حالا می‌توانید یک داشبورد جدید بسازید. برای نمونه، برای نمایش درصد مصرف CPU از کوئری زیر استفاده کنید:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

برای حافظه RAM:

(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

فضای دیسک:

(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100

می‌توانید این پنل‌ها را به‌ترتیب اضافه کنید، عنوان، رنگ و واحدها را تنظیم نمایید. برای دسترسی سریع‌تر، از داشبوردهای آماده (Import Dashboard) با شناسه‌ی معروف مانند 1860 استفاده کنید و شناسه آن را در Grafana وارد کنید تا به‌صورت خودکار پنل‌های استاندارد سیستم‌عامل لود شود.

مقایسه کارایی: Prometheus در برابر ابزارهای سنتی

برای انتخاب درست، تفاوت‌های اساسی را در جدول زیر می‌بینید:

ویژگیPrometheus + GrafanaNagios / Zabbix
مدل جمع‌آوری دادهPull (کشیدن متریک)Push (ارسال داده)
ذخیره‌سازی دادهپایگاه‌داده سری زمانی اختصاصیبانک اطلاعاتی رابطه‌ای (یا فایل)
مقیاس‌پذیریعالی، مناسب برای محیط‌های ابری پویامحدود برای زیرساخت‌های بزرگ
انعطاف کوئریبسیار بالا با زبان PromQLوابسته به قالب‌ها و ماکروهای محدود
نمودار و داشبوردپیشرفته و تعاملی با Grafanaساده‌تر اما قابل قبول
مناسب برایVPSهای ابری، کلاستر، کانتینرهافروارد سنتی با مؤلفه‌های سخت‌افزاری ثابت

همانطور که مشخص است، ترکیب Prometheus و Grafana برای مانیتورینگ مدرن منابع سرور لینوکس، انعطاف و قدرت بیشتری ارائه می‌دهد، به‌خصوص اگر بخواهید زیرساخت خود را به سمت مقیاس‌پذیری اتوماتیک پیش ببرید.

بهترین شیوه‌ها و نکات بهینه‌سازی

  • نگهداشت بلندمدت داده‌ها: برای ذخیره‌ی طولانی‌تر، از –storage.tsdb.retention.time یا نگاشت به سیستم‌های خارجی مانند Thanos استفاده کنید.
  • هشدارهای هوشمند: در Prometheus می‌توانید قوانینی بنویسید تا در شرایط بحرانی، اعلان ارسال شود. به‌عنوان مثال زمانی که مصرف RAM بالای ۹۰٪ به مدت ۱۰ دقیقه باشد.
  • استفاده از میانگین و نرخ: به‌جای نمایش لحظه‌ای، از توابع rate و irate برای پردازنده و شبکه بهره ببرید تا نویز کاهش یابد.
  • امنیت: پورت‌های 9100 و 9090 را تنها در شبکه داخلی در دسترس قرار دهید و از فایروال استفاده کنید. برای Grafana حتماً احراز هویت را فعال کنید.
  • مانیتورینگ خود Prometheus: خود سرویس را نیز توسط متریک‌های داخلی (در هدف localhost:9090) زیرنظر بگیرید.

یکپارچه‌سازی با سرویس‌های ابری و هاستینگ

اگر سرور لینوکس شما روی یک VPS یا پلتفرم ابری اجرا می‌شود، این ابزارها کاملاً مستقل از زیرساخت هستند. تنها کافی است به SSH دسترسی داشته باشید و بتوانید پورت‌های موردنیاز را باز کنید. اگر از پنل‌های مدیریتی مانند cPanel یا DirectAdmin استفاده می‌کنید، باز هم نصب دستی این ابزارها امکان‌پذیر است. بسیاری از ارائه‌دهندگان هاستینگ، خدمات مانیتورینگ داخلی دارند اما شفافیت و عمق داده‌های Prometheus بی‌رقیب است. برای مثال، اگر متوجه افزایش ناگهانی ترافیک ورودی شدید، می‌توانید به‌سرعت سرور را ارتقا دهید یا از منابع ابری اضافی استفاده کنید. این بینش واقعاً ارزشمند است، به‌ویژه در شرایطی که وب‌سایت شما با کمپین‌های تبلیغاتی یا رویدادهای فصلی روبه‌رو می‌شود.

جمع‌بندی و نتیجه‌گیری

در این مقاله، یک مسیر کامل برای راه‌اندازی مانیتورینگ منابع سرور لینوکس با استفاده از Prometheus و Grafana طی کردیم. شما با مفاهیم پایه، فرآیند نصب، پیکربندی، اتصال به Grafana و ساخت داشبورد آشنا شدید. به‌مرور می‌توانید هشدارهای خودکار، ذخیره‌سازی بلندمدت و مانیتورینگ چند سروره را اضافه کنید. این ابزارها نه‌تنها به شما و تیم فنی‌تان دید دقیق‌تری نسبت به سلامت زیرساخت می‌دهند، بلکه هزینه‌های نگهداری را کاهش داده و از بروز بحران‌های غیرمنتظره جلوگیری می‌کنند. پیشنهاد می‌کنم همین امروز پیاده‌سازی را شروع کنید و در کمترین زمان، داشبورد زنده خود را مشاهده نمایید. اگر به دنبال یک راهکار آماده‌ی مانیتورینگ برای سرور خود هستید یا نیاز به راهنمایی بیشتر دارید، می‌توانید از تجربه تیم پشتیبانی فنی ما در زمینه‌ی مدیریت زیرساخت بهره‌مند شوید.

سوالات متداول

۱. آیا برای استفاده از Prometheus و Grafana، نیاز به خرید لایسنس داریم؟
خیر، هر دو ابزار متن‌باز و تحت مجوز Apache 2.0 هستند و می‌توانید آزادانه آن‌ها را نصب، استفاده و توزیع کنید.

۲. آیا مانیتورینگ با این ابزارها برای یک VPS با منابع کم (مثلاً ۱GB RAM) هم مناسب است؟
بله، Prometheus و Grafana نسبتاً سبک هستند. با تنظیم فواصل جمع‌آوری (مثلاً ۳۰ ثانیه) و استفاده از نصب بهینه، می‌توانید روی یک VPS کوچک نیز اجرا کنید؛ اما بهتر است سرور جداگانه یا حداقل دو گیگابایت رم را اختصاص دهید.

۳. چه اکسپورترهای دیگری برای مانیتورینگ نرم‌افزارهای خاص وجود دارد؟
اکسپورترهای آماده‌ای برای MySQL، Nginx، Apache، PostgreSQL، Redis و حتی داکر وجود دارند. می‌توانید آن‌ها را مشابه node_exporter نصب و به Prometheus متصل کنید.

۴. چگونه هشدار را در تلگرام دریافت کنم؟
می‌توانید از Alertmanager و Webhook تلگرام استفاده کنید. یک ربات بسازید، توکن بگیرید و در پیکربندی Alertmanager، endpoint تلگرام را اضافه کنید. جایگزین ساده تر، استفاده از کانکتور داخلی Grafana برای نوتیفیکیشن است.

۵. داده‌های تاریخی چه مدت ذخیره می‌شوند؟
پیش‌فرض Prometheus داده‌ها را برای ۱۵ روز نگه می‌دارد. با فلگ `–storage.tsdb.retention.time` می‌توانید این مدت را به دلخواه افزایش دهید، اما به فضای دیسک بیشتری نیاز خواهید داشت. برای ذخیره‌سازی طولانی‌تر، به راهکارهایی مانند Thanos یا VictoriaMetrics فکر کنید.