WIUNIX ACADEMY
آموزش نصب Prometheus و Grafana در اوبونتو و دبیان
نصب Prometheus، node_exporter و Grafana با دسترسی امن و بررسی مسیر جمعآوری تا نمایش متریکها.
محیطت را انتخاب کنآموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
ویرایش 2 مقدار این آموزش
از اینجا شروع کن
در پایان چه چیزی خواهی داشت؟
یک استک مانیتورینگ خودمیزبان بساز که متریکهای محلی سیستم را در Prometheus ذخیره کند، آنها را در Grafana نمایش بدهد و بعداً هم مسیر تمیزی برای اضافهکردن نودهای لینوکسی بیشتر در اختیارت بگذارد.
سیستمعاملها و نسخههای پوششدادهشده
منابع رسمی در ۲۰۲۶-۱۰-۲۰ بررسی شدند. باینریهای 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 فعال نکنید.
قدم بعدی
انتخاب سرور و محدودهٔ مانیتورینگ
در این راهاندازی، node_exporter متریکهای میزبان را ارائه میکند، Prometheus آنها را ذخیره میکند و Grafana نمودار میسازد. دستورها برای سرور تازه با معماری amd64 و systemd نوشته شدهاند، نه ارتقای نصب موجود.
پورتهای محلی 3000، 9090 و 9100 باید آزاد باشند. آنها را عمومی نکنید؛ ورود و تغییر رمز Grafana از اتصال رمزگذاریشدهٔ SSH انجام خواهد شد.
ترمینال سرور مانیتورینگ. دستورهایی که با sudo شروع میشوند به دسترسی مدیریتی نیاز دارند.
hostnamectl
hostname -I
uname -m
sudo ss -lntupنام میزبان، IPها و معماری سرور مشخص میشود و میتوانی بررسی کنی که پورت 3000 آزاد است و پورتهای محلی 9090 و 9100 هم از قبل در اختیار استک دیگری نیستند.
قدم بعدی
نصب ابزارهای پایه
ابزارهای دانلود، پردازش JSON، بازکردن آرشیو و ویرایش فایل را نصب کنید. ابزار SHA256 در coreutils سیستم موجود است. Grafana از مخزن رسمی و امضاشدهٔ APT نصب میشود.
ترمینال سرور مانیتورینگ.
(
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 در دسترس قرار میگیرند.
قدم بعدی
ساخت حسابهای سرویس و مسیرها
استفاده از کاربرهای اختصاصی باعث میشود باینریها، فایل تنظیمات و دادههای سریزمانی از هم تفکیک شوند. Prometheus به مسیر ذخیرهسازی قابلنوشتن نیاز دارد و node_exporter فقط یک کاربر سیستمی و باینری خودش را لازم دارد.
چیدمان مسیرها در این مرحله با سرویسهای systemd مراحل بعدی هماهنگ است.
ترمینال سرور مانیتورینگ.
(
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 خواندنی است؛ سرویس فقط در مسیر داده اجازهٔ نوشتن دارد.
قدم بعدی
دانلود و نصب Prometheus
در صفحهٔ رسمی دانلودِ بررسیشده در ۲۰۲۶-۱۰-۲۰، نسخهٔ جدید Prometheus برابر 3.15.0 و شاخهٔ LTS برابر 3.13.4 است. این آموزش نسخهٔ 3.15.0 را با SHA256 رسمی linux-amd64 نصب میکند؛ خطای دانلود یا هش، اجرای بلوک را پیش از نصب متوقف میکند.
از Prometheus 3 به بعد، پوشههای نمونهٔ consoles و console_libraries در آرشیو عرضه نمیشوند. فقط دو باینری نصب میشوند و این پیکربندی نیازی به گزینههای کنسول ندارد.
ترمینال سرور مانیتورینگ.
(
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 خارج شوید. محتوای فایل را در ترمینال اجرا نکنید.
ترمینال سرور مانیتورینگ.
sudo nano /etc/prometheus/prometheus.ymlدستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
تنظیم jobهای Prometheus
برای شروع، یک پیکربندی جمعوجور کافی است که خودِ Prometheus و node_exporter محلی را هر 15 ثانیه scrape کند. این کار برای اثبات سلامت کل استک کافی است و بعداً میتوانی سرورهای دیگر یا Alerting را به آن اضافه کنی.
فایل را دقیقاً مانند نمونهٔ زیر بساز و در این مرحله targetها را روی localhost نگه دار.
محتوای فایل؛ در فایل نامبرده ذخیره کنید، نه در خط فرمان.
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 خارج شوید. محتوای فایل را در ترمینال اجرا نکنید.
ترمینال سرور مانیتورینگ.
sudo nano /etc/systemd/system/prometheus.serviceدستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
تعریف سرویس Prometheus در systemd
این سرویس باعث میشود Prometheus زیر کنترل systemd بالا بیاید و دادهها را در /var/lib/prometheus نگه دارد. رابط وب Prometheus هم روی 127.0.0.1:9090 bind میشود تا بهصورت پیشفرض مستقیم روی شبکه منتشر نشود.
اگر بعداً به دسترسی از بیرون نیاز داشتی، بهتر است Prometheus را پشت reverse proxy قابلاعتماد یا یک تونل کنترلشده قرار بدهی.
محتوای فایل؛ در فایل نامبرده ذخیره کنید، نه در خط فرمان.
[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 ساخته میشود و با مسیرهایی که در مراحل قبل ساختهای هماهنگ است.
قدم بعدی
دانلود و نصب node_exporter
node_exporter متریکهای پردازنده، حافظه، فایلسیستم و شبکه را در قالب Prometheus ارائه میکند. نسخهٔ 1.12.1 و هش آن با صفحهٔ رسمی دانلود تطبیق داده شدهاند.
فعلاً باینری را روی سرور مانیتورینگ نصب کنید. در مرحلهٔ اختیاریِ سرور دوم، همین دانلود تأییدشده تکرار میشود.
ترمینال سرور مانیتورینگ.
(
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 خارج شوید. محتوای فایل را در ترمینال اجرا نکنید.
ترمینال سرور مانیتورینگ.
sudo nano /etc/systemd/system/node_exporter.serviceدستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
قدم بعدی
تعریف سرویس node_exporter در systemd
جمعآوری متریکهای معمول میزبان روی loopback انجام میشود. collector اختیاری systemd در این آموزش فعال نیست؛ آن بخش به دسترسی D-Bus نیاز دارد، اما متریکهای پردازنده، حافظه و فایلسیستم به آن وابسته نیستند.
محتوای فایل؛ در فایل نامبرده ذخیره کنید، نه در خط فرمان.
[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 ساخته میشود و مسیر باینری نصبشده را بهدرستی ارجاع میدهد.
قدم بعدی
راهاندازی و بررسی آمادگی سرویسها
پیش از راهاندازی، پیکربندی را با حساب خود سرویس اعتبارسنجی کنید. حلقهٔ آمادگی فقط HTTP 200 را میپذیرد؛ تغییر مسیر، خطای اتصال و timeout موفقیت محسوب نمیشوند. فعالبودن سرویس بهتنهایی کافی نیست.
پاسخ ready نشان میدهد Prometheus آمادهٔ پاسخ به کوئری است. در مرحلهٔ بعد، دریافت واقعی متریک از هر دو هدف جداگانه بررسی میشود.
ترمینال سرور مانیتورینگ.
(
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 قابلخواندن و قابلنوشتن هستند.
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.ymlnode_exporter روی پورت 9100 گوش نمیدهد
لاگ سرویس را بررسی کن و ببین آیا پردازش دیگری آدرس انتخابی را گرفته است یا نه.
sudo journalctl -u node_exporter -n 80 --no-pager
sudo ss -lntp | grep 9100 || true