خود نصب 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 کلیک کنید، توکن بات را در پارامتر 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 گروهی که هشدار از آن می آید دسترسی داشته باشد، وگرنه پیام ارسال نمی شود و علت این سکوت هم جایی داد نمی زند.
اگر محیط شما کانتینری است یا متریک برنامه می خواهید، Prometheus و Grafana را هم مقایسه کنید. برای دیدن اینکه Zabbix یک دستگاه را UP یا DOWN نشان می دهد، اصل ping را در ping چیست ببینید.
چک لیست بعد از نصب Zabbix
- رمز کاربر Admin را عوض کنید و برای هر نفر از تیم کاربر جدا بسازید.
- رابط وب را پشت HTTPS ببرید و دسترسی آن را به شبکه داخلی محدود کنید.
- از دیتابیس Zabbix بکاپ منظم بگیرید و بازیابی آن را یک بار تست کنید.
- Housekeeping و مدت نگهداری داده را متناسب با فضای دیسک تنظیم کنید.
- برای سرور Zabbix هم یک بررسی مستقل از بیرون بگذارید تا خوابیدن خودش دیده شود.
- هنگام به روزرسانی های برنامه ریزی شده، از Maintenance استفاده کنید تا هشدار الکی صادر نشود.
- مسیر هشدار را با متوقف کردن یک سرویس آزمایشی تست کنید و ببینید پیام واقعا به دست کسی می رسد.
- برای هر هشدار مهم یک راهنمای کوتاه بنویسید: چه چیزی را بررسی کنیم و چه کسی را خبر کنیم.
اشتباه های رایج در راه اندازی Zabbix
- Zabbix را روی همان سرور اصلی نصب نکنید. مانیتورینگ باید از بیرون به سیستم نگاه کند و جایش روی ماشینی که پایش می شود نیست.
- آستانه های پیش فرض را دست نخورده نگذارید. مصرف 80 درصدی حافظه روی یک سرور دیتابیس ممکن است کاملا عادی باشد؛ چند هفته داده جمع کنید و بعد آستانه ها را تنظیم کنید.
- برای همه چیز هشدار تعریف نکنید. وقتی روزی ده ها پیام کم اهمیت می رسد، پیام مهم هم بین آن ها گم می شود.
- حواستان به دیسک خود Zabbix باشد. جدول history با گذشت زمان بزرگ می شود و اگر دیسک پر شود، اول از همه خود سیستم مانیتورینگ از کار می افتد.
نگه داری Zabbix بعد از راه اندازی
راه اندازی Zabbix چند ساعت وقت می برد. بعد از آن، آستانه ها باید بر اساس رفتار واقعی سرورها تنظیم شوند، خود سیستم باید به روز بماند و کسی باید در ساعت غیرکاری به هشدارها جواب بدهد. در تیم IT یک یا دو نفره، معمولا همین آخری زمین می ماند.
اگر به تشخیص حمله از روی لاگ ها نیاز دارید، SIEM چیست را ببینید.
منابع و مستندات رسمی
- راهنمای رسمی دانلود و نصب Zabbix
- مستندات رسمی Zabbix درباره نصب از بسته ها
- مستندات رسمی Zabbix درباره تنظیم trigger
در سرویس مانیتورینگ پیشگیرانه سرور و شبکه ما Zabbix را روی زیرساخت شما نصب و تنظیم می کنیم، هشدارها را دریافت و بررسی می کنیم و گزارش دوره ای می فرستیم؛ دامنه کار و زمان پاسخ در قرارداد مشخص می شود. اگر نیاز اصلی شما داشبورد، متریک اپلیکیشن و لاگ مرکزی است، مسیر Observability با Grafana و Prometheus به نیاز شما نزدیک تر است. برای مشورت درباره اینکه کدام شاخص ها برای محیط شما معنی دارند، از صفحه مانیتورینگ شبکه و سرور با ما تماس بگیرید.



