بلاگ/راه‌اندازی Zabbix برای مانیتورینگ چند سرور مجازی و اختصاصی در لوکیشن‌های مختلف
به‌روز شده

راه‌اندازی Zabbix برای مانیتورینگ چند سرور مجازی و اختصاصی در لوکیشن‌های مختلف

1405/07/020 بازدید
راه‌اندازی Zabbix برای مانیتورینگ چند سرور مجازی و اختصاصی در لوکیشن‌های مختلف

راه‌اندازی Zabbix برای مانیتورینگ چند سرور مجازی و اختصاصی در لوکیشن‌های مختلف

وقتی تعداد سرورهایی که مدیریت می‌کنید از دو یا سه تا بیشتر شود، و مخصوصاً وقتی این سرورها در چند دیتاسنتر یا چند لوکیشن جغرافیایی پخش باشند، سر زدن دستی به هرکدام دیگر جواب نمی‌دهد. یک سرور در تهران، یکی در فرانکفورت، یکی در سنگاپور — هرکدام با IP، پنل و شرایط شبکه خودش. این مقاله نحوه راه‌اندازی Zabbix برای مانیتورینگ سرور را از صفر توضیح می‌دهد: از معماری چند‌لوکیشنه گرفته تا نصب Server، Proxy، Agent، رمزنگاری ارتباطات و تنظیم هشدار ایمیل.

چرا به یک سیستم مانیتورینگ متمرکز نیاز دارید؟

بدون مانیتورینگ متمرکز معمولاً یکی از این اتفاق‌ها می‌افتد: یا از پرشدن دیسک یک سرور وقتی باخبر می‌شوید که سرویس روی آن از کار افتاده، یا برای فهمیدن اینکه چرا لود یک سرور بالا رفته باید لاگ‌ها را دستی چک کنید بدون هیچ داده تاریخچه‌ای از رفتار عادی آن سرور.

Zabbix این مشکل را با جمع‌آوری مداوم متریک‌ها (CPU، RAM، دیسک، ترافیک شبکه، وضعیت سرویس‌ها) از همه سرورها و نمایش آن‌ها در یک داشبورد واحد حل می‌کند، صرف‌نظر از اینکه سرور کجا میزبانی شده.

Zabbix چیست و چرا برای این سناریو مناسب است؟

Zabbix یک ابزار متن‌باز مانیتورینگ است که هم از agent-based monitoring (نصب یک Agent سبک روی هر سرور) و هم از چک‌های بدون agent (SNMP، ICMP، HTTP) پشتیبانی می‌کند. برای سناریوی چند لوکیشنه دو ویژگی مهم دارد:

  • Zabbix Proxy: یک نمونه سبک از Zabbix که در هر لوکیشن نصب می‌شود، داده سرورهای همان لوکیشن را جمع می‌کند و فقط یک اتصال به Server مرکزی برقرار می‌کند — به‌جای اینکه هر سرور جداگانه به مرکز وصل شود.
  • رمزنگاری PSK/TLS داخلی: چون سرورها روی اینترنت عمومی و بین چند ارائه‌دهنده پخش هستند، ترافیک مانیتورینگ باید رمزنگاری‌شده باشد، نه متن ساده.

اگر Zabbix تنها گزینه مدنظرتان نیست، مقاله راه‌اندازی مانیتورینگ سرور با Prometheus و Grafana پشته‌ی دیگری را با معماری متفاوت (کشیدن متریک به‌جای push از Agent) توضیح می‌دهد که برای برخی تیم‌ها انتخاب بهتری است.

معماری پیشنهادی: Server، Proxy و Agent

برای چند سرور در چند لوکیشن، ساختار سه‌لایه زیر معمول‌ترین حالت است:

  1. Zabbix Server روی یک سرور مرکزی (VPS یا اختصاصی) — پایگاه‌داده، پردازش داده‌ها و داشبورد اصلی اینجاست.
  2. Zabbix Proxy در هر لوکیشن — یکی برای هر دیتاسنتر یا هر ارائه‌دهنده که چند سرور آنجا دارید.
  3. Zabbix Agent روی تک‌تک سرورهای مجازی و اختصاصی — چه در همان لوکیشن Proxy، چه هر جای دیگر.

سوال رایج این است که آیا واقعاً به Proxy نیاز دارید یا Agentها می‌توانند مستقیم به Server وصل شوند. جدول زیر تفاوت را نشان می‌دهد:

حالت اتصالمناسب برایمزیت اصلینکته
اتصال مستقیم Agent به Serverچند سرور در یک لوکیشن یا شبکه واحدراه‌اندازی ساده‌تر، بدون لایه اضافهتعداد اتصال باز روی Server با رشد سرورها زیاد می‌شود
اتصال از طریق Zabbix Proxyچند لوکیشن/دیتاسنتر مختلففقط یک اتصال از هر لوکیشن به مرکز، تحمل قطعی شبکه بهتریک سرویس اضافه برای نصب و آپدیت در هر لوکیشن

اگر سرورهای شما در دو یا سه لوکیشن پخش هستند، Proxy معمولاً ارزشش را نشان می‌دهد، چون هم بار شبکه به سمت مرکز کم می‌شود و هم اگر اتصال اینترنت مرکز به یک لوکیشن قطع شود، Proxy داده‌ها را محلی بافر می‌کند تا وصل شدن دوباره.

نصب Zabbix Server روی سرور مرکزی

پیش‌نیازها

  • یک سرور (توصیه می‌شود VPS یا سرور اختصاصی با حداقل ۲ هسته CPU و ۴ گیگابایت RAM برای شروع، بسته به تعداد سرورهای تحت مانیتورینگ)
  • اوبونتو ۲۲.۰۴ یا دبیان ۱۲
  • دیتابیس MySQL یا PostgreSQL

نصب روی اوبونتو/دبیان

wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
sudo apt update
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2

بعد از نصب، دیتابیس را می‌سازید و اسکیمای اولیه را وارد می‌کنید:

mysql -uroot -p -e "create database zabbix character set utf8mb4 collate utf8mb4_bin;"
mysql -uroot -p -e "create user zabbix@localhost identified by 'PASSWORD_HERE';"
mysql -uroot -p -e "grant all privileges on zabbix.* to zabbix@localhost;"
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix

سپس مشخصات دیتابیس را در /etc/zabbix/zabbix_server.conf تنظیم می‌کنید (DBPassword=) و سرویس‌ها را بالا می‌آورید:

sudo systemctl restart zabbix-server zabbix-agent2 apache2
sudo systemctl enable zabbix-server zabbix-agent2 apache2

اگر روی این سرور فایروال فعال دارید، باید پورت‌های ۱۰۰۵۱ (Zabbix Server) و ۸۰ یا ۴۴۳ (فرانت‌اند وب) را باز کنید؛ برای تنظیم قواعد از صفر، راه‌اندازی فایروال nftables روی سرور لینوکس راهنمای کاملی است.

فرانت‌اند از طریق مرورگر روی http://IP-SERVER/zabbix در دسترس است و ویزارد نصب باقی تنظیمات را انجام می‌دهد.

داشبورد اصلی Zabbix با نمای کلی وضعیت چند سرور

نصب Zabbix Proxy در هر لوکیشن

روی یکی از سرورهای هر لوکیشن (یا یک VPS کوچک جداگانه فقط برای همین کار)، Proxy را نصب می‌کنید:

sudo apt install zabbix-sql-scripts zabbix-proxy-mysql
mysql -uroot -p -e "create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;"
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql -uzabbix -p zabbix_proxy

در /etc/zabbix/zabbix_proxy.conf آدرس Server مرکزی و نام یکتای Proxy را مشخص می‌کنید:

Server=IP-SERVER-MRKZI
Hostname=proxy-frankfurt

این نام (Hostname) را بعداً هنگام تعریف هر Host در فرانت‌اند به‌عنوان "Monitored by proxy" انتخاب می‌کنید تا آن سرور از طریق این Proxy مانیتور شود.

نصب Zabbix Agent روی سرورهای مجازی و اختصاصی

روی هر سرور (چه در لوکیشنی که Proxy دارد، چه بدون Proxy):

sudo apt install zabbix-agent2

در /etc/zabbix/zabbix_agent2.conf:

Server=IP-PROXY-YA-SERVER
ServerActive=IP-PROXY-YA-SERVER
Hostname=vps-tehran-01

اگر سرور از طریق Proxy مانیتور می‌شود، این آدرس‌ها به IP همان Proxy محلی اشاره می‌کنند، نه به Server مرکزی — این باعث می‌شود ترافیک Agent فقط در همان لوکیشن جابه‌جا شود.

رمزنگاری ارتباط بین Agent، Proxy و Server

چون سرورها در چند شبکه و چند ارائه‌دهنده پخش هستند، تنظیم پیش‌فرض (بدون رمزنگاری) توصیه نمی‌شود. Zabbix از PSK (Pre-Shared Key) پشتیبانی می‌کند که تنظیمش ساده‌تر از گواهی TLS کامل است:

openssl rand -hex 32 > /etc/zabbix/zabbix_agent2.psk

سپس در فایل کانفیگ Agent:

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=vps-tehran-01-psk
TLSPSKFile=/etc/zabbix/zabbix_agent2.psk

همین سه پارامتر (با کلید و Identity مطابق) باید در تعریف Host مربوطه در فرانت‌اند Zabbix هم وارد شوند، و در صورت وجود Proxy، در کانفیگ Proxy هم برای ارتباط با Server مرکزی تکرار می‌شوند.

رمزنگاری ترافیک مانیتورینگ فقط یک لایه از امنیت سرور است؛ برای سخت‌سازی خود دسترسی به سرورها هم بد نیست نگاهی به امن‌سازی دسترسی SSH به سرور لینوکس بیندازید.

گروه‌بندی سرورها بر اساس لوکیشن و تنظیم هشدار ایمیل

برای اینکه داشبورد و هشدارها معنادار بمانند، سرورها را بر اساس لوکیشن گروه‌بندی کنید — مثلاً Location: Tehran، Location: Frankfurt. این کار در Data collection → Host groups انجام می‌شود و بعد هر Host به گروه لوکیشن خودش اضافه می‌شود.

برای هشدار ایمیل:

  1. در Alerts → Media types گزینه Email را با اطلاعات SMTP خودتان (یا SMTP اریانت) تنظیم کنید.
  2. در Users → کاربر موردنظر، تب Media، آدرس ایمیل را اضافه کنید.
  3. در Alerts → Actions یک Action جدید بسازید که با شرط‌هایی مثل severity بالاتر از "Average" یا trigger خاص، ایمیل ارسال کند.

با این تنظیم، وقتی مثلاً دیسک یک سرور در سنگاپور به ۹۰ درصد برسد یا سرویسی در فرانکفورت down شود، ایمیل بلافاصله می‌رسد، بدون نیاز به چک دستی داشبورد.

مانیتورینگ متمرکز چند سرور در لوکیشن‌های مختلف از یک نقطه مرکزی با Zabbix

مشاهده همه سرورها از یک داشبورد مرکزی

بعد از این مراحل، در بخش Monitoring → Dashboards می‌توانید ویجت‌هایی مثل "Problems"، "Host availability" و "Geomap" اضافه کنید تا وضعیت همه سرورها — صرف‌نظر از لوکیشن — در یک صفحه دیده شود. ویجت Geomap مخصوصاً برای این سناریو مفید است چون هر سرور را روی نقشه در موقعیت جغرافیایی واقعی‌اش نشان می‌دهد و وضعیتش را با رنگ مشخص می‌کند.

اگر هنوز سرور مجازی جدیدی را در لوکیشن‌های مختلف تهیه نکرده‌اید، راهنمای خرید سرور مجازی ایران: قیمت، دیتاسنتر، پینگ و آی‌پی ثابت نکات انتخاب لوکیشن مناسب را پوشش می‌دهد.

اگر می‌خواهید سرور مرکزی Zabbix یا سرورهای تحت مانیتورینگ را روی زیرساخت پایدارتری راه‌اندازی کنید، می‌توانید از سرورهای مجازی اریانت استفاده کنید — با پهنای باند مناسب برای ترافیک مداوم Agent و Proxy و امکان انتخاب لوکیشن‌های مختلف برای همان معماری چند‌لوکیشنه‌ای که در این مقاله توضیح داده شد.

جمع‌بندی

راه‌اندازی Zabbix برای مانیتورینگ چند سرور در چند لوکیشن، بعد از چیدن معماری اولیه (Server، Proxy در هر لوکیشن، Agent روی هر سرور) کار تکراری و ساده‌ای است: نصب Agent، تنظیم PSK، اضافه‌کردن Host به گروه لوکیشن مربوطه. نکته‌ای که بیشتر نادیده گرفته می‌شود رمزنگاری ارتباطات است — چون سرورها روی اینترنت عمومی پخش‌اند، غیرفعال گذاشتن PSK یعنی متریک‌ها و اطلاعات زیرساخت به‌صورت متن ساده روی شبکه رد و بدل می‌شوند. با این تنظیمات، به‌جای سر زدن دستی به هر سرور، یک داشبورد واحد وضعیت همه را نشان می‌دهد و هر مشکل قبل از اینکه کاربر نهایی متوجه شود، به ایمیل شما می‌رسد.