WIUNIX ACADEMY
آموزش نصب Prometheus و Grafana در اوبونتو و دبیان
صفحهٔ 4 از 5؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من2 مقدار قابلتغییر
قدم بعدی
راهاندازی و بررسی سلامت Grafana
پس از ذخیرهٔ provisioning سرویس را یک بار restart کنید؛ enable کردن سرویسِ در حال اجرا، تنظیمات آن را دوباره بارگذاری نمیکند. HTTP 200 و database=ok را بررسی کنید؛ سپس مطمئن شوید شنونده پیش از ورود فقط روی 127.0.0.1:3000 است.
ترمینال سرور مانیتورینگ.
(
set -euo pipefail
sudo chown root:grafana /etc/grafana/provisioning/datasources/prometheus.yaml
sudo chmod 0640 /etc/grafana/provisioning/datasources/prometheus.yaml
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl restart grafana-server
systemctl is-active grafana-server
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:3000/api/health); 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:3000/api/health' >&2; exit 1; }
printf '%s -> 200\n' 'http://127.0.0.1:3000/api/health'
curl -fsS --connect-timeout 2 --max-time 5 http://127.0.0.1:3000/api/health | jq -e '.database == "ok"'
sudo ss -lntp 'sport = :3000'
)نمونهٔ خلاصهشده:
active
http://127.0.0.1:3000/api/health -> 200
true
Listener: 127.0.0.1:3000واحد grafana-server در وضعیت active قرار میگیرد، endpoint سلامت دقیقاً 200 برمیگرداند و پاسخ JSON مقدار database را ok نشان میدهد.
Grafana کد 200 برنمیگرداند
لاگ سرویس Grafana را بررسی کن و مطمئن شو فایل provisioning مربوط به data source در مسیر درست قرار دارد.
sudo journalctl -u grafana-server -n 100 --no-pager
sudo ls -l /etc/grafana/provisioning/datasources
sudo sed -n "1,120p" /etc/grafana/provisioning/datasources/prometheus.yamlقدم بعدی
ورود امن و بررسی منبع داده
روی رایانهٔ خودتان، دو مقدار نمونهٔ SSH را با حساب موجود و آدرس سرور جایگزین کنید و ترمینال تونل را باز نگه دارید. در مرورگر http://127.0.0.1:13000 را باز کنید؛ سرویس روی سرور خصوصی میماند و مسیر شبکه با SSH رمزگذاری میشود.
در نصب تازه، نام کاربری و رمز اولیه admin است؛ بلافاصله رمز قوی و منحصربهفرد تعیین کنید. رمز جدید را در دستور، فایل منبع یا تصویر ثبت نکنید. سرور SSH باید local forwarding را مجاز کرده باشد.
در Connections منبع Prometheus را پیدا کنید. در Explore همین منبع را انتخاب و کوئری up را اجرا کنید؛ هر دو هدف محلی باید مقدار 1 داشته باشند. پاسخ health بهتنهایی اتصال منبع داده را اثبات نمیکند.
ترمینال رایانهٔ خودتان، نه سرور مانیتورینگ؛ YOUR_SSH_USER و MONITORING_SERVER را پیش از اجرا جایگزین کنید.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13000:127.0.0.1:3000 YOUR_SSH_USER@MONITORING_SERVERورود به Grafana انجام میشود، گذرواژهٔ اولیه تغییر میکند و data source provisionشدهٔ Prometheus در رابط Grafana دیده میشود.
قدم بعدی
ساخت اولین داشبورد با PromQL
یک داشبورد و سه پنل برای مصرف پردازنده، استفاده از حافظه و فضای آزاد فایلسیستم بسازید. برای هر پنل، منبع Prometheus را انتخاب کنید.
هر عبارت را جداگانه در ویرایشگر کوئریِ یک پنل قرار دهید و نام و واحد پنل را متناسب با آن تنظیم کنید.
ویرایشگر پنل داشبورد Grafana در مرورگر.
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))
node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}هر پنل بهجای حالت خالی یا خطا، دادهٔ زنده نمایش میدهد و ثابت میکند Grafana میتواند از Prometheus داده بگیرد.
اختیاری: آمادهسازی امن سرور دوم
روی سرور تازهٔ دوم با معماری amd64، ابتدا نصب ابزارهای پایه، ساخت حساب node_exporter، دانلود تأییدشده و سرویس loopback آن را طبق مراحل قبل انجام دهید؛ آنجا نیازی به Prometheus یا Grafana نیست. در مثال، IP مانیتورینگ 10.20.30.10 و IP سرور دوم 10.20.30.41 است؛ هر دو را یکدست جایگزین کنید. در UFW فعال با رد ورودی پیشفرض، فقط سرور مانیتورینگ را مجاز کنید. قواعد موجود را هم ببینید و اجازههای عمومی پورت 9100 را با روش مدیریت معمول فایروال خودتان حذف کنید؛ دسترسی SSH باید حفظ شود. در فایروال دیگر، همین محدودیت را پیش از ادامه اعمال کنید.
ترمینال سرور مانیتورینگ.
(
set -euo pipefail
sudo ufw status verbose
sudo ufw status verbose | grep -q '^Status: active'
sudo ufw status verbose | grep -q '^Default: deny (incoming)'
sudo ufw allow proto tcp from 10.20.30.10 to 10.20.30.41 port 9100
sudo ufw status numbered
sudo install -d -m 0755 /etc/systemd/system/node_exporter.service.d
sudo nano /etc/systemd/system/node_exporter.service.d/private.conf
)دستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.
شنوندهٔ خصوصی exporter سرور دوم
این override را روی سرور دوم با IP خصوصی واقعی ذخیره کنید. برای جایگزینی ExecStart، ابتدا مقدار قبلی خالی میشود. متریکها در این روش بدون احراز هویتاند؛ شبکه باید خصوصی و قابل اعتماد یا VPN باشد، وگرنه TLS و احراز هویت exporter را جداگانه تنظیم کنید.
محتوای فایل؛ در فایل نامبرده ذخیره کنید، نه در خط فرمان.
[Service]
ExecStart=
ExecStart=/usr/local/bin/node_exporter --web.listen-address=10.20.30.41:9100
override فقط IP خصوصی را انتخاب میکند.
راهاندازی شنوندهٔ خصوصی سرور دوم
پس از بررسی فایروال، این دستورها را روی سرور دوم اجرا کنید. سپس روی میزبان مانیتورینگ، فایل تنظیم Prometheus را با پنل ویرایشگر قبلی باز کنید.
ترمینال سرور مانیتورینگ.
(
set -euo pipefail
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl restart node_exporter
systemctl is-active node_exporter
sudo ss -lntp 'sport = :9100'
)دستور باید بدون خطا تمام شود؛ در صورت خطا، پیش از ادامه علت را برطرف کنید.