WIUNIX ACADEMY
آموزش نصب Prometheus و Grafana در اوبونتو و دبیان
صفحهٔ 2 از 5؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من2 مقدار قابلتغییر
بازکردن فایل تنظیمات بعدی
فایل را باز کنید، محتوای پنل بعدی را در آن قرار دهید و ذخیره کنید. در 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