← شروع آموزش

WIUNIX ACADEMY

آموزش مانیتورینگ با Prometheus، Grafana و Docker Compose

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

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

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

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

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

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

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

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

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

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

قدم بعدی

پیش از اجرای سرویس، فایل‌ها را اعتبارسنجی کنید

مجوز را فقط برای فایل‌های غیرمحرمانه یکدست کنید، Compose را بررسی کنید و promtool همان ایمیج ثابت را اجرا کنید. pull کردن، راه‌اندازی استک نیست. تنظیم مؤثر باید bind محلی، digest ثابت و mount فقط‌خواندنی داشته باشد؛ فقط مسیر فایل رمز را می‌بینید، نه محتویات آن. اعتبار JSON سازگاری همهٔ گزینه‌های گرافانا را ثابت نمی‌کند؛ داشبورد را پس از اجرا هم بررسی می‌کنیم.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo find '/srv/academy-monitor/config' '/srv/academy-monitor/dashboards' -type f -exec chmod 0644 {} +
sudo docker compose -f '/srv/academy-monitor/compose.yaml' config --quiet
sudo docker compose -f '/srv/academy-monitor/compose.yaml' config
sudo python3 -m json.tool '/srv/academy-monitor/config/targets/services.json' >/dev/null
sudo python3 -m json.tool '/srv/academy-monitor/dashboards/compose.json' >/dev/null
sudo docker compose -f '/srv/academy-monitor/compose.yaml' pull
sudo docker compose -f '/srv/academy-monitor/compose.yaml' run --rm --no-deps --entrypoint /bin/promtool prometheus check config /etc/prometheus/prometheus.yml
از کجا بدانم درست انجام شد؟

همهٔ بررسی‌ها موفق‌اند و promtool پیش از راه‌اندازی SUCCESS می‌دهد.

14

قدم بعدی

اجرا کنید و آماده‌بودن را جدا بسنجید

فقط همین پروژه را اجرا کنید. وضعیت ps کافی نیست؛ هنگام ساخت دیتابیس اولیه تا یک دقیقه probeها را تکرار کنید. healthy پرومتئوس پاسخ‌گویی فرایند را نشان می‌دهد و ready آماده‌بودن برای کوئری را. health گرافانا باید database را ok نشان دهد. نباید listener عمومی تازه‌ای ایجاد شود. مانیتورینگی که روی همان میزبان است، با خاموش‌شدن کل میزبان نمی‌تواند به‌تنهایی خبر بدهد.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo docker compose -f '/srv/academy-monitor/compose.yaml' up -d
sudo docker compose -f '/srv/academy-monitor/compose.yaml' ps
curl --fail --show-error http://127.0.0.1:19090/-/healthy
curl --fail --show-error http://127.0.0.1:19090/-/ready
curl --fail --show-error http://127.0.0.1:13000/api/health
sudo docker compose -f '/srv/academy-monitor/compose.yaml' port prometheus 9090
sudo docker compose -f '/srv/academy-monitor/compose.yaml' port grafana 3000
sudo ss -lntp
از کجا بدانم درست انجام شد؟

هر دو API آماده‌اند؛ پورت میزبان فقط 127.0.0.1 است و سرویس با کاربر مشخص می‌تواند داده بنویسد.

15

قدم بعدی

تونل SSH محلی باز کنید

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

Bash

رایانهٔ مجاز شما؛ OpenSSH

ssh -N -o ExitOnForwardFailure=yes -p 22   -L 127.0.0.1:13000:127.0.0.1:13000   -L 127.0.0.1:19090:127.0.0.1:19090   operator@192.0.2.40
از کجا بدانم درست انجام شد؟

تونل بدون خطای forwarding باز می‌ماند.

داشبورد آماده را بازبینی کنید

در مرورگر رایانه، http://127.0.0.1:13000/ را باز کنید و با admin و رمز فایل محافظت‌شده وارد شوید. از Dashboards، پوشهٔ Academy و سپس Compose service health را باز کنید. بعد از دو فاصلهٔ scrape، هر دو سری up باید 1 شوند. صفحهٔ http://127.0.0.1:19090/targets نام واقعی endpoint و خطای scrape را نشان می‌دهد. برای مشاهدهٔ روزمره کاربر با حداقل مجوز بسازید و admin اولیه را مشترک نکنید. تغییر رمز مدیر موجود از روند حساب گرافانا یا بازیابی رسمی CLI انجام می‌شود، نه ویرایش فایل اولیه. انتشار عمومی با HTTPS و SSO به طراحی proxy trust، URL، کوکی، CSRF، TLS و خروجی شبکه نیاز دارد؛ بازکردن سادهٔ پورت 3000 راه‌حل نیست.

16

قدم بعدی

جمع‌آوری را از API کوئری بررسی کنید

پس از حداقل ۳۰ ثانیه روی میزبان اجرا کنید. هر دو تارگت مورد انتظار باید وجود داشته باشند و سالم باشند؛ HTTP موفق با بردار خالی نتیجهٔ قابل قبول نیست. این کوئری خصوصی پرومتئوس رمز ندارد. خروجی عملیاتی تارگت‌ها را عمومی منتشر نکنید.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

curl --fail --show-error -G http://127.0.0.1:19090/api/v1/query --data-urlencode 'query=up'
curl --fail --show-error http://127.0.0.1:19090/api/v1/targets
sudo docker stats --no-stream
sudo du -sh '/srv/academy-monitor/prometheus-data' '/srv/academy-monitor/grafana-data'
از کجا بدانم درست انجام شد؟

دو سری مورد انتظار up=1 هستند؛ مصرف واقعی منابع و دیسک را هم ببینید.

17

قدم بعدی

شکست واقعی scrape را ببینید

تمرین اختیاری و فقط آزمایشگاهی: توقف گرافانا UI را قطع می‌کند. پرومتئوس را روشن بگذارید و بعد از ۴۵ ثانیه از API آن کوئری بگیرید. up گرافانا باید صفر شود و پرومتئوس یک بماند. سپس گرافانا را روشن کنید و برگشت هر دو را ببینید. این نتیجه فقط شکست scrape محلی را ثابت می‌کند و آزمون ارسال هشدار یا HA نیست. پس از برگشت، تاریخچهٔ داشبورد باید قطعی را نشان دهد. برای خاموشی کل میزبان، بررسی بیرونی و گیرندهٔ هشدار مستقل لازم است.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo docker compose -f '/srv/academy-monitor/compose.yaml' stop grafana
sleep 45
curl --fail --show-error -G http://127.0.0.1:19090/api/v1/query --data-urlencode 'query=up'
sudo docker compose -f '/srv/academy-monitor/compose.yaml' start grafana
sleep 30
curl --fail --show-error -G http://127.0.0.1:19090/api/v1/query --data-urlencode 'query=up'
curl --fail --show-error -G http://127.0.0.1:19090/api/v1/query --data-urlencode 'query=min_over_time(up{service="grafana"}[10m])'
از کجا بدانم درست انجام شد؟

گرافانا از ۱ به صفر و دوباره ۱ می‌رسد و کمینهٔ ده‌دقیقه‌ای قطعی را نگه می‌دارد.

همهٔ آموزش‌های آکادمی ↗