پیکوسیستم خدمات فنی IT

آموزش نصب Zabbix روی اوبونتو: از صفر تا اولین هشدار

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

آموزش نصب Zabbix روی اوبونتو: از صفر تا اولین هشدار

نصب 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 گروهی که هشدار از آن می آید دسترسی داشته باشد، وگرنه پیام ارسال نمی شود و علت این سکوت هم جایی داد نمی زند.

چک لیست بعد از نصب

  1. رمز کاربر Admin را عوض کنید و برای هر نفر از تیم کاربر جدا بسازید.
  2. رابط وب را پشت HTTPS ببرید و دسترسی آن را به شبکه داخلی محدود کنید.
  3. از دیتابیس Zabbix بکاپ منظم بگیرید و بازیابی آن را یک بار تست کنید.
  4. Housekeeping و مدت نگهداری داده را متناسب با فضای دیسک تنظیم کنید.
  5. برای سرور Zabbix هم یک بررسی مستقل از بیرون بگذارید تا خوابیدن خودش دیده شود.
  6. هنگام به روزرسانی های برنامه ریزی شده، از Maintenance استفاده کنید تا هشدار الکی صادر نشود.
  7. مسیر هشدار را با متوقف کردن یک سرویس آزمایشی تست کنید؛ تنها راه مطمئن شدن همین است.
  8. برای هر هشدار مهم یک راهنمای کوتاه بنویسید: چه چیزی را بررسی کنیم و چه کسی را خبر کنیم.

اشتباه های رایج

  • نصب روی همان سرور اصلی: مانیتورینگ باید از بیرون به سیستم نگاه کند، نه از داخل همان ماشین.
  • آستانه های پیش فرض: مصرف 80 درصدی حافظه روی یک سرور دیتابیس ممکن است کاملا عادی باشد. چند هفته داده جمع کنید و بعد آستانه ها را تنظیم کنید.
  • هشدار برای همه چیز: وقتی روزی ده ها پیام کم اهمیت می رسد، پیام مهم هم بین آن ها گم می شود.
  • فراموش کردن دیسک خود Zabbix: جدول history با گذشت زمان بزرگ می شود؛ اگر دیسک پر شود، سیستم مانیتورینگ اولین قربانی است.

نصب تمام ماجرا نیست

راه اندازی Zabbix چند ساعت وقت می برد؛ کاری که ادامه پیدا می کند تنظیم آستانه ها بر اساس رفتار واقعی سرورها، به روز نگه داشتن خود سیستم و پاسخ دادن به هشدار در ساعت غیرکاری است. اگر تیم IT شما یک یا دو نفر است، معمولا همین بخش آخر زمین می ماند.

در سرویس مانیتورینگ پیشگیرانه سرور و شبکه ما Zabbix را روی زیرساخت شما نصب و تنظیم می کنیم، هشدارها را دریافت و بررسی می کنیم و گزارش دوره ای می فرستیم؛ دامنه کار و زمان پاسخ در قرارداد مشخص می شود. اگر بیشتر به داشبورد و متریک اپلیکیشن و لاگ مرکزی نیاز دارید، مسیر Observability با Grafana و Prometheus به نیاز شما نزدیک تر است. برای مشورت درباره اینکه کدام شاخص ها برای محیط شما معنی دارند، از صفحه مانیتورینگ شبکه و سرور با ما تماس بگیرید.

مقاله های مرتبط

استعلام

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

چند خط درباره وضعیت فعلی و چیزی که می خواهید بنویسید. یک مهندس خودش تماس می گیرد، نه واحد فروش.

  1. 01درخواست را می خوانیم و اگر ابهامی بود تماس می گیریم.
  2. 02در صورت نیاز، بررسی اولیه ریموت یا بازدید انجام می شود.
  3. 03پیشنهاد مکتوب با دامنه کار، زمان بندی و هزینه می فرستیم.

اطلاعات شما فقط برای پاسخ به همین درخواست استفاده می شود.