← شروع آموزش

WIUNIX ACADEMY

آموزش نصب Prometheus و Grafana در اوبونتو و دبیان

صفحهٔ 2 از 5؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.10بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من2 مقدار قابل‌تغییر

بازکردن فایل تنظیمات بعدی

فایل را باز کنید، محتوای پنل بعدی را در آن قرار دهید و ذخیره کنید. در nano با Ctrl+O و Enter ذخیره و با Ctrl+X خارج شوید. محتوای فایل را در ترمینال اجرا نکنید.

Bash

ترمینال سرور مانیتورینگ.

sudo nano /etc/systemd/system/prometheus.service
از کجا بدانم درست انجام شد؟

دستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.

06

قدم بعدی

تعریف سرویس Prometheus در systemd

این سرویس باعث می‌شود Prometheus زیر کنترل systemd بالا بیاید و داده‌ها را در /var/lib/prometheus نگه دارد. رابط وب Prometheus هم روی 127.0.0.1:9090 bind می‌شود تا به‌صورت پیش‌فرض مستقیم روی شبکه منتشر نشود.

اگر بعداً به دسترسی از بیرون نیاز داشتی، بهتر است Prometheus را پشت reverse proxy قابل‌اعتماد یا یک تونل کنترل‌شده قرار بدهی.

systemd · /etc/systemd/system/prometheus.service

محتوای فایل؛ در فایل نام‌برده ذخیره کنید، نه در خط فرمان.

[Unit]
Description=Prometheus Monitoring Server
Wants=network-online.target
After=network-online.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 \
  --storage.tsdb.retention.time=15d \
  --web.listen-address=127.0.0.1:9090
Restart=on-failure

[Install]
WantedBy=multi-user.target
از کجا بدانم درست انجام شد؟

فایل unit مربوط به Prometheus ساخته می‌شود و با مسیرهایی که در مراحل قبل ساخته‌ای هماهنگ است.

07

قدم بعدی

دانلود و نصب node_exporter

node_exporter متریک‌های پردازنده، حافظه، فایل‌سیستم و شبکه را در قالب Prometheus ارائه می‌کند. نسخهٔ 1.12.1 و هش آن با صفحهٔ رسمی دانلود تطبیق داده شده‌اند.

فعلاً باینری را روی سرور مانیتورینگ نصب کنید. در مرحلهٔ اختیاریِ سرور دوم، همین دانلود تأییدشده تکرار می‌شود.

Bash

ترمینال سرور مانیتورینگ.

(
set -euo pipefail
[ "$(uname -m)" = x86_64 ] || { echo 'This download requires amd64/x86_64' >&2; exit 1; }
work=$(mktemp -d)
cd "$work"
curl -fL --connect-timeout 10 --max-time 180 -o node_exporter-1.12.1.linux-amd64.tar.gz \
  https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
printf '%s  %s\n' 'b51d8a76aa2a9156a55d501aca6276fae09e262259a5e4e831d2c2222f084e63' 'node_exporter-1.12.1.linux-amd64.tar.gz' | sha256sum --check --strict -
tar -xzf node_exporter-1.12.1.linux-amd64.tar.gz
cd node_exporter-1.12.1.linux-amd64
sudo install -o root -g root -m 0755 node_exporter /usr/local/bin/
node_exporter --version
)
از کجا بدانم درست انجام شد؟

پیش از استخراج باید SHA256 نتیجهٔ OK بدهد و نسخهٔ node_exporter برابر 1.12.1 باشد. پوشهٔ موقت دانلود را تا پایان بررسی نگه دارید.

بازکردن فایل تنظیمات بعدی

فایل را باز کنید، محتوای پنل بعدی را در آن قرار دهید و ذخیره کنید. در nano با Ctrl+O و Enter ذخیره و با Ctrl+X خارج شوید. محتوای فایل را در ترمینال اجرا نکنید.

Bash

ترمینال سرور مانیتورینگ.

sudo nano /etc/systemd/system/node_exporter.service
از کجا بدانم درست انجام شد؟

دستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.

08

قدم بعدی

تعریف سرویس node_exporter در systemd

جمع‌آوری متریک‌های معمول میزبان روی loopback انجام می‌شود. collector اختیاری systemd در این آموزش فعال نیست؛ آن بخش به دسترسی D-Bus نیاز دارد، اما متریک‌های پردازنده، حافظه و فایل‌سیستم به آن وابسته نیستند.

systemd · /etc/systemd/system/node_exporter.service

محتوای فایل؛ در فایل نام‌برده ذخیره کنید، نه در خط فرمان.

[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=127.0.0.1:9100
Restart=on-failure

[Install]
WantedBy=multi-user.target
از کجا بدانم درست انجام شد؟

فایل unit مربوط به node_exporter ساخته می‌شود و مسیر باینری نصب‌شده را به‌درستی ارجاع می‌دهد.

09

قدم بعدی

راه‌اندازی و بررسی آمادگی سرویس‌ها

پیش از راه‌اندازی، پیکربندی را با حساب خود سرویس اعتبارسنجی کنید. حلقهٔ آمادگی فقط HTTP 200 را می‌پذیرد؛ تغییر مسیر، خطای اتصال و timeout موفقیت محسوب نمی‌شوند. فعال‌بودن سرویس به‌تنهایی کافی نیست.

پاسخ ready نشان می‌دهد Prometheus آمادهٔ پاسخ به کوئری است. در مرحلهٔ بعد، دریافت واقعی متریک از هر دو هدف جداگانه بررسی می‌شود.

Bash

ترمینال سرور مانیتورینگ.

(
set -euo pipefail
sudo chown root:prometheus /etc/prometheus/prometheus.yml
sudo chmod 0640 /etc/prometheus/prometheus.yml
sudo -u prometheus /usr/local/bin/promtool check config /etc/prometheus/prometheus.yml
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus node_exporter
systemctl is-active prometheus node_exporter
ok=0
for attempt in $(seq 1 12); do
  if code=$(curl -sS --connect-timeout 2 --max-time 5 -o /dev/null -w '%{http_code}' http://127.0.0.1:9090/-/ready); then
    if [ "$code" = 200 ]; then ok=1; break; fi
  fi
  sleep 2
done
[ "$ok" = 1 ] || { echo 'Endpoint did not become ready: http://127.0.0.1:9090/-/ready' >&2; exit 1; }
printf '%s -> 200\n' 'http://127.0.0.1:9090/-/ready'
ok=0
for attempt in $(seq 1 12); do
  if code=$(curl -sS --connect-timeout 2 --max-time 5 -o /dev/null -w '%{http_code}' http://127.0.0.1:9100/metrics); then
    if [ "$code" = 200 ]; then ok=1; break; fi
  fi
  sleep 2
done
[ "$ok" = 1 ] || { echo 'Endpoint did not become ready: http://127.0.0.1:9100/metrics' >&2; exit 1; }
printf '%s -> 200\n' 'http://127.0.0.1:9100/metrics'
)
خروجی نمونه
نمونهٔ موفقیت؛ پیام‌های اضافی promtool حذف شده‌اند:
active
active
http://127.0.0.1:9090/-/ready -> 200
http://127.0.0.1:9100/metrics -> 200
از کجا بدانم درست انجام شد؟

هر دو سرویس در وضعیت active قرار می‌گیرند و هر دو آدرس بررسی‌شده دقیقاً کد 200 برمی‌گردانند.

Prometheus active نمی‌ماند

لاگ‌های اخیر سرویس را ببین و مطمئن شو فایل پیکربندی و مسیر داده برای حساب کاربری Prometheus قابل‌خواندن و قابل‌نوشتن هستند.

Bash
sudo journalctl -u prometheus -n 80 --no-pager
sudo ls -ld /etc/prometheus /var/lib/prometheus
sudo ls -l /etc/prometheus/prometheus.yml
sudo -u prometheus /usr/local/bin/promtool check config /etc/prometheus/prometheus.yml
node_exporter روی پورت 9100 گوش نمی‌دهد

لاگ سرویس را بررسی کن و ببین آیا پردازش دیگری آدرس انتخابی را گرفته است یا نه.

Bash
sudo journalctl -u node_exporter -n 80 --no-pager
sudo ss -lntp | grep 9100 || true
همهٔ آموزش‌های آکادمی ↗