نصب Zabbix کار سختی نیست؛ چیزی که وقت تیم را می گیرد جزئیات است: اسکیمایی که وارد نشده، agent ای که نام میزبانش با رابط وب یکی نیست و هشداری که هیچ وقت نمی رسد. در این آموزش نصب Zabbix را روی Ubuntu Server قدم به قدم انجام می دهیم: مخزن رسمی، دیتابیس، رابط وب، نصب agent روی سرورهای دیگر، ساختن اولین host و trigger و تنظیم هشدار با ایمیل و تلگرام.
پیش از نصب: چه چیزی لازم است؟
Zabbix از چهار جزء اصلی ساخته شده است: سرویس Zabbix Server، یک دیتابیس، رابط وب PHP و agent هایی که روی سرورهای مقصد نصب می شوند. برای شبکه های چند شعبه ای جزء پنجمی هم به نام Zabbix Proxy وجود دارد که داده را در محل جمع می کند و به سرور مرکزی می فرستد.
در محیط عملیاتی نسخه LTS را انتخاب کنید. نسخه LTS فعلی سه سال پشتیبانی کامل دارد و نسخه های استاندارد که هر شش ماه منتشر می شوند فقط یک سال. پیش از شروع، صفحه دانلود Zabbix را باز کنید و ببینید LTS فعلی کدام است و برای توزیع شما بسته دارد. نمونه دستورهای این مقاله بر پایه Zabbix 7.0 LTS و Ubuntu 24.04 نوشته شده اند؛ برای Ubuntu 26.04 فقط بخش ubuntu24.04 در نام فایل مخزن را به ubuntu26.04 تغییر دهید.
| مورد | مقدار مورد نیاز |
|---|---|
| دیتابیس | MySQL از 8.0.30 به بعد، MariaDB از 10.5 به بعد یا PostgreSQL از 13 به بعد، با موتور InnoDB |
| PHP | 8.0 به بعد، با افزونه های mysqli یا pgsql، bcmath، mbstring، gd، xml و sockets |
| وب سرور | Apache 2.4 یا Nginx 1.20 به بعد |
| سخت افزار | طبق مستندات Zabbix برای محیط کوچک (حدود 1000 متریک) دو هسته پردازنده و 8 گیگابایت حافظه کافی است؛ با رشد تعداد متریک، دیتابیس را روی سرور جدا ببرید |
| پورت ها | 10051 روی سرور برای دریافت داده active و 10050 روی agent برای درخواست passive |
گام 1: آماده کردن سرور و نصب دیتابیس
ابتدا سیستم را به روز کنید، منطقه زمانی را درست کنید و دیتابیس را نصب کنید. منطقه زمانی مهم است، چون گراف ها و زمان رویدادها بر همین اساس نمایش داده می شوند.
sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone Asia/Tehran
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
گام 2: افزودن مخزن رسمی و نصب بسته ها
بسته های موجود در مخزن خود اوبونتو معمولا قدیمی هستند. مخزن رسمی Zabbix را اضافه کنید تا نسخه ای که می خواهید و به روزرسانی های بعدی آن را داشته باشید.
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2
اگر می خواهید رابط وب روی Nginx اجرا شود، به جای zabbix-apache-conf بسته zabbix-nginx-conf را نصب کنید و بعد از نصب، خط های listen و server_name را در فایل /etc/zabbix/nginx.conf از حالت توضیح خارج کنید. اگر دانلود از repo.zabbix.com کند بود، همان فایل را از یک آینه داخلی یا با پروکسی بگیرید؛ ساختار مسیر یکی است.
گام 3: ساخت دیتابیس و وارد کردن اسکیما
دیتابیس باید با کاراکترست utf8mb4 و collation برابر utf8mb4_bin ساخته شود. این جزئیات را رد نکنید؛ اگر collation اشتباه باشد، نصب رابط وب در همان مرحله بررسی پیش نیازها متوقف می شود.
sudo mysql -uroot -p
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'RamzeQavi';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;
حالا اسکیما و داده اولیه را وارد کنید. این کار روی سرورهای معمولی چند دقیقه طول می کشد و خروجی هم نمی دهد؛ صبر کنید تا به خط فرمان برگردد.
zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
مسیر این فایل بین نسخه ها تغییر کرده است. اگر پیدا نشد، به جای حدس زدن، مسیر واقعی بسته را بپرسید:
dpkg -L zabbix-sql-scripts | grep server.sql.gz
بعد از وارد شدن اسکیما، تنظیم موقت دیتابیس را برگردانید:
sudo mysql -uroot -p -e "set global log_bin_trust_function_creators = 0;"
گام 4: تنظیم zabbix_server.conf و راه اندازی سرویس
در فایل /etc/zabbix/zabbix_server.conf رمز دیتابیس را وارد کنید. در فایل های تنظیم Zabbix، توضیح باید در خط جداگانه باشد و بعد از مقدار نوشته نمی شود.
# /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=RamzeQavi
چون این فایل رمز دارد، دسترسی آن را محدود نگه دارید و بعد سرویس ها را راه اندازی کنید:
sudo chown root:zabbix /etc/zabbix/zabbix_server.conf
sudo chmod 640 /etc/zabbix/zabbix_server.conf
sudo systemctl restart zabbix-server zabbix-agent2 apache2
sudo systemctl enable zabbix-server zabbix-agent2 apache2
sudo tail -f /var/log/zabbix/zabbix_server.log
در لاگ باید خط شروع سرور و راه افتادن پروسه ها را ببینید. خطای مربوط به اتصال دیتابیس تقریبا همیشه یعنی رمز یا نام کاربر در conf با چیزی که در MySQL ساخته اید فرق دارد.
گام 5: راه اندازی رابط وب
آدرس http://SERVER-IP/zabbix را باز کنید. جادوگر نصب از شما زبان، اطلاعات اتصال به دیتابیس، نام سرور و منطقه زمانی می خواهد. منطقه زمانی را روی Asia/Tehran بگذارید. اگر پیام خطای مربوط به تنظیمات PHP دیدید، مقدارها در /etc/zabbix/apache.conf (یا برای Nginx در /etc/zabbix/php-fpm.conf) قابل تغییر هستند و بعد از تغییر باید وب سرور را ریستارت کنید.
ورود اولیه با نام کاربری Admin و رمز zabbix انجام می شود و اولین کار، تغییر همین رمز است. بعد از آن رابط وب را پشت HTTPS ببرید و دسترسی به آن را به شبکه داخلی یا VPN محدود کنید؛ کنسول مانیتورینگ نقشه کاملی از زیرساخت شما دارد.
نصب Zabbix agent روی سرورهای دیگر
روی هر سروری که می خواهید پایش شود، agent نصب می شود. نسخه Zabbix Agent 2 با زبان Go نوشته شده و پلاگین هایی برای MySQL، PostgreSQL، Docker و Redis دارد.
اوبونتو و دبیان
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update && sudo apt install -y zabbix-agent2
AlmaLinux و Rocky Linux
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
sudo dnf clean all
sudo dnf install -y zabbix-agent2
سه خط اصلی فایل تنظیم agent این ها هستند:
# /etc/zabbix/zabbix_agent2.conf
Server=10.0.0.5
ServerActive=10.0.0.5
Hostname=web-01
مقدار Hostname باید دقیقا با نام میزبانی که در رابط وب می سازید یکی باشد، وگرنه بررسی های active هیچ داده ای نمی فرستند. Server تعیین می کند چه آدرسی اجازه دارد از agent داده بخواهد و ServerActive مقصد ارسال داده در حالت active است. برای سرورهای پشت NAT، حالت active دردسر کمتری دارد.
پورت agent را فقط برای سرور Zabbix باز کنید:
# Ubuntu
sudo ufw allow from 10.0.0.5 to any port 10050 proto tcp
# AlmaLinux
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5/32" port port="10050" protocol="tcp" accept'
sudo firewall-cmd --reload
از روی سرور Zabbix ارتباط را تست کنید. اگر بسته zabbix-get نصب باشد، پاسخ باید عدد 1 باشد:
zabbix_get -s 10.0.0.11 -k agent.ping
اولین host و اولین trigger
در رابط وب به مسیر Data collection و سپس Hosts بروید و با Create host شروع کنید. چهار چیز را پر کنید: نام میزبان (همان مقدار Hostname در agent)، حداقل یک host group، رابط Agent با آدرس IP و پورت 10050، و در زبانه Templates قالب Linux by Zabbix agent را انتخاب کنید. این قالب ده ها آیتم آماده دارد: مصرف پردازنده، حافظه، فضای دیسک، وضعیت سرویس ها، تعداد پروسه ها و زمان روشن بودن سیستم.
چند دقیقه بعد در Monitoring و سپس Latest data باید داده ها را ببینید. اگر داده نیامد، به ترتیب این سه چیز را بررسی کنید: فایروال بین دو سرور، یکی بودن Hostname، و لاگ agent در /var/log/zabbix/zabbix_agent2.log.
برای ساختن trigger دستی، در همان host به زبانه Triggers بروید. چند نمونه از عبارت هایی که در عمل بیشتر به کار می آیند:
| هدف | عبارت trigger |
|---|---|
| فضای خالی ریشه کمتر از 10 درصد | last(/web-01/vfs.fs.size[/,pfree])<10 |
| agent در دسترس نیست | nodata(/web-01/agent.ping,5m)=1 |
| سرویس وب پاسخ نمی دهد | last(/web-01/net.tcp.service[https])=0 |
برای هر trigger یک سطح اهمیت (Severity) تعیین کنید. همین سطح بندی بعدا تعیین می کند چه چیزی نصف شب به تلفن کسی برسد و چه چیزی صبح در ایمیل دیده شود.
تنظیم هشدار: ایمیل و تلگرام
هشدار در Zabbix سه بخش دارد و نبودن هر کدام یعنی پیام نمی رسد: یک media type فعال، یک media روی کاربر گیرنده، و یک action که می گوید کدام رویداد به کدام کاربر برود.
ایمیل
به مسیر Alerts و سپس Media types بروید و Email را باز کنید. آدرس سرور SMTP، پورت، نوع رمزنگاری و نام کاربری و رمز را وارد کنید و با دکمه Test یک پیام آزمایشی بفرستید.
تلگرام
Zabbix یک media type آماده برای تلگرام دارد و لازم نیست اسکریپتی بنویسید. با BotFather یک بات بسازید و توکن آن را بردارید. سپس در Media types روی Telegram کلیک کنید، مقدار api_token را بگذارید، media type را Enabled کنید و ذخیره کنید.
بعد در بخش Users، برای کاربر گیرنده یک Media از نوع Telegram اضافه کنید و در فیلد Send to شناسه عددی چت کاربر یا گروه را بنویسید. توجه کنید که سرور Zabbix باید بتواند به api.telegram.org دسترسی خروجی HTTPS داشته باشد؛ اگر شبکه شما این اجازه را نمی دهد، در پارامترهای همین webhook می توانید پروکسی تعریف کنید.
action
در Alerts و سپس Actions و Trigger actions یک action بسازید. در Conditions شرط بگذارید (مثلا فقط رویدادهای با سطح High و بالاتر) و در Operations کاربر یا گروه گیرنده را انتخاب کنید. کاربر باید به host گروهی که هشدار از آن می آید دسترسی داشته باشد، وگرنه پیام ارسال نمی شود و علت این سکوت هم جایی داد نمی زند.
چک لیست بعد از نصب
- رمز کاربر Admin را عوض کنید و برای هر نفر از تیم کاربر جدا بسازید.
- رابط وب را پشت HTTPS ببرید و دسترسی آن را به شبکه داخلی محدود کنید.
- از دیتابیس Zabbix بکاپ منظم بگیرید و بازیابی آن را یک بار تست کنید.
- Housekeeping و مدت نگهداری داده را متناسب با فضای دیسک تنظیم کنید.
- برای سرور Zabbix هم یک بررسی مستقل از بیرون بگذارید تا خوابیدن خودش دیده شود.
- هنگام به روزرسانی های برنامه ریزی شده، از Maintenance استفاده کنید تا هشدار الکی صادر نشود.
- مسیر هشدار را با متوقف کردن یک سرویس آزمایشی تست کنید؛ تنها راه مطمئن شدن همین است.
- برای هر هشدار مهم یک راهنمای کوتاه بنویسید: چه چیزی را بررسی کنیم و چه کسی را خبر کنیم.
اشتباه های رایج
- نصب روی همان سرور اصلی: مانیتورینگ باید از بیرون به سیستم نگاه کند، نه از داخل همان ماشین.
- آستانه های پیش فرض: مصرف 80 درصدی حافظه روی یک سرور دیتابیس ممکن است کاملا عادی باشد. چند هفته داده جمع کنید و بعد آستانه ها را تنظیم کنید.
- هشدار برای همه چیز: وقتی روزی ده ها پیام کم اهمیت می رسد، پیام مهم هم بین آن ها گم می شود.
- فراموش کردن دیسک خود Zabbix: جدول history با گذشت زمان بزرگ می شود؛ اگر دیسک پر شود، سیستم مانیتورینگ اولین قربانی است.
نصب تمام ماجرا نیست
راه اندازی Zabbix چند ساعت وقت می برد؛ کاری که ادامه پیدا می کند تنظیم آستانه ها بر اساس رفتار واقعی سرورها، به روز نگه داشتن خود سیستم و پاسخ دادن به هشدار در ساعت غیرکاری است. اگر تیم IT شما یک یا دو نفر است، معمولا همین بخش آخر زمین می ماند.
در سرویس مانیتورینگ پیشگیرانه سرور و شبکه ما Zabbix را روی زیرساخت شما نصب و تنظیم می کنیم، هشدارها را دریافت و بررسی می کنیم و گزارش دوره ای می فرستیم؛ دامنه کار و زمان پاسخ در قرارداد مشخص می شود. اگر بیشتر به داشبورد و متریک اپلیکیشن و لاگ مرکزی نیاز دارید، مسیر Observability با Grafana و Prometheus به نیاز شما نزدیک تر است. برای مشورت درباره اینکه کدام شاخص ها برای محیط شما معنی دارند، از صفحه مانیتورینگ شبکه و سرور با ما تماس بگیرید.



