مانیتورینگ سرور لینوکس با Prometheus و Node Exporter
تا وقتی مشکلی در سرور پیش نیامده، خیلی از مدیران سیستم به مصرف واقعی CPU، RAM، دیسک و شبکهٔ سرورشان توجه نمیکنند. مشکل اینجاست که وقتی سرور دیگر جواب نمیدهد، معمولاً برای بررسی علت خیلی دیر شده است. در این راهنما یاد میگیرید چطور با Prometheus و Node Exporter، متریکهای کامل سطح سیستمعامل سرور لینوکسی خود را جمعآوری و در Grafana بصریسازی کنید.
Node Exporter در برابر مانیتورینگ اپلیکیشنمحور
در مقالهٔ آموزش مانیتورینگ MongoDB با Grafana و Prometheus با نحوهٔ مانیتور کردن یک سرویس خاص (دیتابیس) آشنا شدید. اما پیش از مانیتورینگ سرویسها، معمولاً باید سلامت خودِ سرور را هم زیر نظر داشته باشید: مصرف CPU، حافظه، فضای دیسک، ترافیک شبکه و لود سیستم. این دقیقاً همان کاری است که Node Exporter انجام میدهد.
معماری مانیتورینگ با Prometheus
مدل کاری Prometheus بر پایهٔ Pull است، نه Push: خودِ Prometheus بهصورت دورهای به Exporterهای مختلف (مثل Node Exporter) وصل میشود و متریکها را جمعآوری میکند.
| جزء | وظیفه |
|---|---|
| Node Exporter | جمعآوری متریکهای سطح سیستمعامل (CPU، RAM، دیسک، شبکه) و انتشار آنها روی پورت ۹۱۰۰ |
| Prometheus Server | جمعآوری دورهای متریکها از Exporterها و ذخیرهٔ آنها بهصورت سریهای زمانی (Time Series) |
| Grafana | بصریسازی دادههای Prometheus در قالب داشبورد و تنظیم هشدار (Alert) |
نصب Node Exporter
useradd --no-create-home --shell /bin/false node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
tar -xvf node_exporter-1.8.0.linux-amd64.tar.gz
cp node_exporter-1.8.0.linux-amd64/node_exporter /usr/local/bin/
chown node_exporter:node_exporter /usr/local/bin/node_exporterساخت سرویس systemd برای اجرای دائمی:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter
curl http://localhost:9100/metrics | head -20معرفی Node Exporter به Prometheus
در فایل prometheus.yml سرور Prometheus (که مراحل نصب آن مشابه همان چیزی است که در مقالهٔ مانیتورینگ MongoDB دیدید)، یک Job جدید اضافه کنید:
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']systemctl restart prometheusبرای اطمینان از اتصال درست، در رابط وب Prometheus (پورت ۹۰۹۰) مسیر Status > Targets را بررسی کنید؛ وضعیت Job جدید باید UP باشد.
ساخت داشبورد در Grafana
بهجای طراحی داشبورد از صفر، میتوانید از داشبورد آمادهٔ رسمی Node Exporter در Grafana استفاده کنید:
- در Grafana وارد بخش Dashboards > New > Import شوید
- شناسهٔ داشبورد رسمی 1860 (Node Exporter Full) را وارد کنید
- منبع دادهٔ Prometheus خود را انتخاب و Import کنید
این داشبورد بلافاصله نمودارهای کاملی از CPU، حافظه، دیسک I/O، فضای باقیمانده و ترافیک شبکه نشان میدهد.
تنظیم هشدار (Alert) ساده
برای مثال، هشداری برای زمانی که مصرف دیسک از ۸۵ درصد بیشتر شود:
groups:
- name: node_alerts
rules:
- alert: HighDiskUsage
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
for: 10m
labels:
severity: warning
annotations:
summary: "فضای دیسک کمتر از ۱۵٪ باقی مانده است"اگر سرور شما Nginx هم اجرا میکند، حتماً مقالهٔ بهینهسازی کارایی Nginx را هم ببینید تا هم عملکرد و هم متریکهای آن را کامل تحت نظر داشته باشید.
جمعبندی
مانیتورینگ سطح سیستمعامل با Node Exporter و Prometheus پایهایترین و در عین حال مهمترین لایهٔ مانیتورینگ هر سرور تولید است. ترکیب آن با مانیتورینگ اختصاصی سرویسهایی مثل MongoDB (که در مقالهٔ مرتبط توضیح داده شد)، دید کاملی از سلامت زیرساخت به شما میدهد و امکان واکنش پیش از وقوع قطعی را فراهم میکند.
