Yuna در حال کار با یک نمایشگر مانیتورینگ در فضای نمایشی آکادمی ویونیکس.

WIUNIX ACADEMY

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

نصب Prometheus، node_exporter و Grafana با دسترسی امن و بررسی مسیر جمع‌آوری تا نمایش متریک‌ها.

متوسط75 دقیقه مطالعهبه‌روزرسانی
محیطت را انتخاب کن

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

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

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

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

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

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

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

ویرایش 2 مقدار این آموزش

از اینجا شروع کن

در پایان چه چیزی خواهی داشت؟

یک استک مانیتورینگ خودمیزبان بساز که متریک‌های محلی سیستم را در Prometheus ذخیره کند، آن‌ها را در Grafana نمایش بدهد و بعداً هم مسیر تمیزی برای اضافه‌کردن نودهای لینوکسی بیشتر در اختیارت بگذارد.

01نودهای لینوکسیروی هر سرور node_exporter اجرا می‌شود تا متریک‌ها را در قالب Prometheus منتشر کند.
02سرور Prometheustargetها را دوره‌ای scrape می‌کند و داده‌های سری‌زمانی را محلی نگه می‌دارد.
03Grafanaاز Prometheus به‌عنوان منبع‌داده استفاده می‌کند و داشبورد می‌سازد.
04دسترسی مرورگرمدیر سیستم از طریق Grafana متریک‌ها را به‌صورت بصری بررسی می‌کند.
05رشد بعدیبعداً می‌توانی exporterها و alerting بیشتری اضافه کنی بدون آن‌که پایهٔ کار را عوض کنی.
سیستم‌عامل‌ها و نسخه‌های پوشش‌داده‌شده

منابع رسمی در ۲۰۲۶-۱۰-۲۰ بررسی شدند. باینری‌های Prometheus 3.15.0، node_exporter 1.12.1 و Grafana 13.2.4، پیکربندی، provisioning و مسیر کوئری در کانتینر جداشدهٔ Ubuntu 22.04.5 اجرا شدند. این بررسی، آزمون نصب کامل APT و systemd یا آزمون همهٔ سیستم‌های قابل انتخاب نیست؛ مبنای پوشش آن‌ها مستندات رسمی است. تصاویر DEMO و خروجی‌های نمونه، نمایشی‌اند.

قبل از شروع

  • یک سرور تازهٔ اوبونتو یا دبیان با معماری amd64، systemd، دسترسی sudo و اینترنت؛ برای این آزمایش کوچک دست‌کم ۲ گیگابایت رم و ۱۰ گیگابایت فضای آزاد در نظر بگیرید. ظرفیت محیط واقعی به تعداد سری‌ها و مدت نگه‌داری بستگی دارد.
  • حساب SSH موجود روی سرور و کلاینت SSH روی رایانهٔ خودتان. هر سه سرویس فقط روی loopback گوش می‌دهند و دسترسی مرورگر به Grafana از تونل SSH انجام می‌شود.
  • برای سرور دومِ اختیاری، شبکهٔ خصوصی قابل اعتماد و UFW فعال با سیاست پیش‌فرض رد ورودی، یا قواعد معادل در فایروال شبکه لازم است. فایروال تازه را بدون حفظ دسترسی SSH فعال نکنید.
01

قدم بعدی

انتخاب سرور و محدودهٔ مانیتورینگ

در این راه‌اندازی، node_exporter متریک‌های میزبان را ارائه می‌کند، Prometheus آن‌ها را ذخیره می‌کند و Grafana نمودار می‌سازد. دستورها برای سرور تازه با معماری amd64 و systemd نوشته شده‌اند، نه ارتقای نصب موجود.

پورت‌های محلی 3000، 9090 و 9100 باید آزاد باشند. آن‌ها را عمومی نکنید؛ ورود و تغییر رمز Grafana از اتصال رمزگذاری‌شدهٔ SSH انجام خواهد شد.

Bash

ترمینال سرور مانیتورینگ. دستورهایی که با sudo شروع می‌شوند به دسترسی مدیریتی نیاز دارند.

hostnamectl
hostname -I
uname -m
sudo ss -lntup
از کجا بدانم درست انجام شد؟

نام میزبان، IPها و معماری سرور مشخص می‌شود و می‌توانی بررسی کنی که پورت 3000 آزاد است و پورت‌های محلی 9090 و 9100 هم از قبل در اختیار استک دیگری نیستند.

02

قدم بعدی

نصب ابزارهای پایه

ابزارهای دانلود، پردازش JSON، بازکردن آرشیو و ویرایش فایل را نصب کنید. ابزار SHA256 در coreutils سیستم موجود است. Grafana از مخزن رسمی و امضاشدهٔ APT نصب می‌شود.

Bash

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

(
set -euo pipefail
sudo apt-get update
sudo apt-get install -y curl tar adduser ca-certificates gnupg apt-transport-https jq nano
)
از کجا بدانم درست انجام شد؟

به‌روزرسانی APT بدون خطای وابستگی تمام می‌شود و ابزارهای لازم برای دریافت Prometheus، node_exporter و کلید مخزن Grafana در دسترس قرار می‌گیرند.

03

قدم بعدی

ساخت حساب‌های سرویس و مسیرها

استفاده از کاربرهای اختصاصی باعث می‌شود باینری‌ها، فایل تنظیمات و داده‌های سری‌زمانی از هم تفکیک شوند. Prometheus به مسیر ذخیره‌سازی قابل‌نوشتن نیاز دارد و node_exporter فقط یک کاربر سیستمی و باینری خودش را لازم دارد.

چیدمان مسیرها در این مرحله با سرویس‌های systemd مراحل بعدی هماهنگ است.

Bash

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

(
set -euo pipefail
sudo adduser --system --no-create-home --group prometheus
sudo adduser --system --no-create-home --group node_exporter
sudo install -d -o root -g prometheus -m 0750 /etc/prometheus
sudo install -d -o prometheus -g prometheus -m 0750 /var/lib/prometheus
)
از کجا بدانم درست انجام شد؟

پیکربندی متعلق به root و برای گروه Prometheus خواندنی است؛ سرویس فقط در مسیر داده اجازهٔ نوشتن دارد.

04

قدم بعدی

دانلود و نصب Prometheus

در صفحهٔ رسمی دانلودِ بررسی‌شده در ۲۰۲۶-۱۰-۲۰، نسخهٔ جدید Prometheus برابر 3.15.0 و شاخهٔ LTS برابر 3.13.4 است. این آموزش نسخهٔ 3.15.0 را با SHA256 رسمی linux-amd64 نصب می‌کند؛ خطای دانلود یا هش، اجرای بلوک را پیش از نصب متوقف می‌کند.

از Prometheus 3 به بعد، پوشه‌های نمونهٔ consoles و console_libraries در آرشیو عرضه نمی‌شوند. فقط دو باینری نصب می‌شوند و این پیکربندی نیازی به گزینه‌های کنسول ندارد.

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 prometheus-3.15.0.linux-amd64.tar.gz \
  https://github.com/prometheus/prometheus/releases/download/v3.15.0/prometheus-3.15.0.linux-amd64.tar.gz
printf '%s  %s\n' '2a542df32eac02ee17b9d844fb2aa1de00dafa5476579ba8a3ba862e9d572ea0' 'prometheus-3.15.0.linux-amd64.tar.gz' | sha256sum --check --strict -
tar -xzf prometheus-3.15.0.linux-amd64.tar.gz
cd prometheus-3.15.0.linux-amd64
sudo install -o root -g root -m 0755 prometheus promtool /usr/local/bin/
prometheus --version
)
از کجا بدانم درست انجام شد؟

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

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

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

Bash

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

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

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

05

قدم بعدی

تنظیم jobهای Prometheus

برای شروع، یک پیکربندی جمع‌وجور کافی است که خودِ Prometheus و node_exporter محلی را هر 15 ثانیه scrape کند. این کار برای اثبات سلامت کل استک کافی است و بعداً می‌توانی سرورهای دیگر یا Alerting را به آن اضافه کنی.

فایل را دقیقاً مانند نمونهٔ زیر بساز و در این مرحله targetها را روی localhost نگه دار.

YAML · /etc/prometheus/prometheus.yml

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

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
          - 127.0.0.1:9090

  - job_name: node-exporter
    static_configs:
      - targets:
          - 127.0.0.1:9100
از کجا بدانم درست انجام شد؟

فایل پیکربندی Prometheus شامل دو scrape job است و برای راه‌اندازی سرویس آماده می‌شود.

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

فایل را باز کنید، محتوای پنل بعدی را در آن قرار دهید و ذخیره کنید. در 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
همهٔ آموزش‌های آکادمی ↗