WIUNIX ACADEMY
آموزش مانیتورینگ با Prometheus، Grafana و Docker Compose
صفحهٔ 4 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من11 مقدار قابلتغییر
قدم بعدی
پیش از اجرای سرویس، فایلها را اعتبارسنجی کنید
مجوز را فقط برای فایلهای غیرمحرمانه یکدست کنید، Compose را بررسی کنید و promtool همان ایمیج ثابت را اجرا کنید. pull کردن، راهاندازی استک نیست. تنظیم مؤثر باید bind محلی، digest ثابت و mount فقطخواندنی داشته باشد؛ فقط مسیر فایل رمز را میبینید، نه محتویات آن. اعتبار JSON سازگاری همهٔ گزینههای گرافانا را ثابت نمیکند؛ داشبورد را پس از اجرا هم بررسی میکنیم.
سرور اختصاصی لینوکس؛ پوستهٔ 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 میدهد.
قدم بعدی
اجرا کنید و آمادهبودن را جدا بسنجید
فقط همین پروژه را اجرا کنید. وضعیت ps کافی نیست؛ هنگام ساخت دیتابیس اولیه تا یک دقیقه probeها را تکرار کنید. healthy پرومتئوس پاسخگویی فرایند را نشان میدهد و ready آمادهبودن برای کوئری را. health گرافانا باید database را ok نشان دهد. نباید listener عمومی تازهای ایجاد شود. مانیتورینگی که روی همان میزبان است، با خاموششدن کل میزبان نمیتواند بهتنهایی خبر بدهد.
سرور اختصاصی لینوکس؛ پوستهٔ 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 است و سرویس با کاربر مشخص میتواند داده بنویسد.
قدم بعدی
تونل SSH محلی باز کنید
روی رایانهٔ خود از حساب مجاز فعلی و host key تأییدشده استفاده کنید و جلسه را باز نگه دارید. اگر پورت محلی اشغال است، پیش از کپی در تنظیم بالای صفحه پورت آزاد بگذارید تا تونل و URL هماهنگ بمانند. عدم تطابق host key یعنی توقف؛ بررسی آن را خاموش نکنید. مسیر انتقال SSH رمزنگاریشده است و HTTP زیر مستقیم از اینترنت عبور نمیکند.
رایانهٔ مجاز شما؛ 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 راهحل نیست.
قدم بعدی
جمعآوری را از API کوئری بررسی کنید
پس از حداقل ۳۰ ثانیه روی میزبان اجرا کنید. هر دو تارگت مورد انتظار باید وجود داشته باشند و سالم باشند؛ HTTP موفق با بردار خالی نتیجهٔ قابل قبول نیست. این کوئری خصوصی پرومتئوس رمز ندارد. خروجی عملیاتی تارگتها را عمومی منتشر نکنید.
سرور اختصاصی لینوکس؛ پوستهٔ 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 هستند؛ مصرف واقعی منابع و دیسک را هم ببینید.
قدم بعدی
شکست واقعی scrape را ببینید
تمرین اختیاری و فقط آزمایشگاهی: توقف گرافانا UI را قطع میکند. پرومتئوس را روشن بگذارید و بعد از ۴۵ ثانیه از API آن کوئری بگیرید. up گرافانا باید صفر شود و پرومتئوس یک بماند. سپس گرافانا را روشن کنید و برگشت هر دو را ببینید. این نتیجه فقط شکست scrape محلی را ثابت میکند و آزمون ارسال هشدار یا HA نیست. پس از برگشت، تاریخچهٔ داشبورد باید قطعی را نشان دهد. برای خاموشی کل میزبان، بررسی بیرونی و گیرندهٔ هشدار مستقل لازم است.
سرور اختصاصی لینوکس؛ پوستهٔ 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])'
گرافانا از ۱ به صفر و دوباره ۱ میرسد و کمینهٔ دهدقیقهای قطعی را نگه میدارد.