Интеграция Zabbix ↔ ABillS
Цель интеграции
Обеспечить мониторинг ключевых метрик ABillS через Zabbix:
- Общее количество пользователей
- Количество заблокированных
- Пользователи с долгами/кредитом
- Онлайн/офлайн статистика
Предусловия
Операционная система: Ubuntu 24.04
Zabbix: 6.4 LTS
ABillS: 1.60.25 (рекомендация, не критично)
СУБД: MariaDB/MySQL (уже установлена с ABillS)
Доступы: root на сервере
Архитектура решения
Решение построено на одном Zabbix Agent с логическим разделением метрик по хостам в Zabbix.
Zabbix Server
↓ запрос через localhost:10051
Zabbix Agent (127.0.0.1:10050)
↓ выполняет UserParameter
Perl-скрипты ABillS (/usr/abills/misc/zabbix/*.pl)
↓ читают данные
БД ABillS (MariaDB)
Критично:
- Agent работает от пользователя
zabbix - Скрипты должны быть executable для группы
zabbix - Agent слушает только
127.0.0.1(закрыт от сети)
1. Установка Zabbix Server
1.1. Добавление репозитория
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu24.04_all.deb dpkg -i zabbix-release_6.4-1+ubuntu24.04_all.deb apt update
1.2. Установка компонентов
apt install -y zabbix-server-mysql zabbix-sql-scripts zabbix-agent zabbix-frontend-php php8.3-mysql
1.3. Создание БД для Zabbix
mysql
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
EXIT;
⚠️ Замените STRONG_PASSWORD_HERE на реальный пароль.
1.4. Импорт схемы
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -u zabbix -p zabbix
Введите пароль пользователя zabbix.
Ожидаемо: импорт занимает 1-2 минуты, предупреждения Using a password — норма.
1.5. Конфигурация Zabbix Server
nano /etc/zabbix/zabbix_server.conf
Найти и задать:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=STRONG_PASSWORD_HERE
1.6. Запуск сервисов
systemctl restart zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent
systemctl status zabbix-server
Ожидаемо: active (running)
2. Настройка Apache для Web-интерфейса
2.1. Конфигурация порта
nano /etc/apache2/ports.conf
Добавить (если нет):
Listen 8080
2.2. VirtualHost для Zabbix
nano /etc/apache2/sites-available/zabbix.conf
<VirtualHost *:8080>
ServerName zabbix.local
DocumentRoot /usr/share/zabbix
<Directory /usr/share/zabbix>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /usr/share/zabbix/conf>
Require all denied
</Directory>
ErrorLog ${APACHE_LOG_DIR}/zabbix_error.log
CustomLog ${APACHE_LOG_DIR}/zabbix_access.log combined
</VirtualHost>
2.3. Включение PHP-FPM
a2enmod proxy_fcgi setenvif rewrite
a2enconf php8.3-fpm
a2ensite zabbix
systemctl restart php8.3-fpm
systemctl reload apache2
2.4. Настройка PHP
nano /etc/php/8.3/fpm/php.ini
Изменить:
post_max_size = 16M
upload_max_filesize = 16M
max_execution_time = 300
max_input_time = 300
systemctl restart php8.3-fpm
2.5. Генерация locale (если нужно)
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8
systemctl reload apache2
3. Web Setup Wizard
Открыть в браузере: http://YOUR_SERVER_IP:8080
Шаги мастера:
- Welcome → Next
- Pre-requisites → все должно быть OK → Next
- Database connection:
- Type: MySQL
- Host: localhost
- Name: zabbix
- User: zabbix
- Password:
STRONG_PASSWORD_HERE→ Next
- Zabbix server details:
- Host: localhost
- Port: 10051
- Name:
Abills Monitoring→ Next
- Summary → Next/Finish
Первый вход:
Login: Admin
Password: zabbix
⚠️ КРИТИЧНО: сразу после входа сменить пароль Admin:User settings → Change password
4. Защита Zabbix Agent
4.1. Ограничение сетевого доступа
nano /etc/zabbix/zabbix_agentd.conf
ListenIP=127.0.0.1
Server=127.0.0.1
ServerActive=127.0.0.1
EnableRemoteCommands=0
4.2. Запрет небезопасных команд
nano /etc/zabbix/zabbix_agentd.conf
Убедиться:
DenyKey=system.run[*]
Или явно разрешить только для ABillS (см. раздел 8.3).
systemctl restart zabbix-agent
4.3. Проверка
ss -tulpn | grep 10050
Ожидаемо: 127.0.0.1:10050 (НЕ 0.0.0.0)
5. Интеграция с ABillS
5.1. Проверка наличия скриптов
ls -l /usr/abills/misc/zabbix/
Ожидаемо:
5.2. Установка прав доступа (КРИТИЧНО)
Проблема: по умолчанию скрипты принадлежат root:root с правами 644 — Zabbix Agent не может их выполнить.
Решение:
chgrp zabbix /usr/abills/misc/zabbix/*.pl
chmod 750 /usr/abills/misc/zabbix/*.pl
Проверка:
ls -l /usr/abills/misc/zabbix/zabbix_users.pl
Ожидаемо: -rwxr-x--- root zabbix
5.3. Создание UserParameter
Создать файл:
bash
nano
/etc/zabbix/zabbix_agentd.d/abills_users.confВставить:
UserParameter=abills.UserAll.value,/usr/abills/misc/zabbix/zabbix_users.pl total UserParameter=abills.UserDisabled.value,/usr/abills/misc/zabbix/zabbix_users.pl disabled UserParameter=abills.UserDebt.value,/usr/abills/misc/zabbix/zabbix_users.pl debt UserParameter=abills.UserCredit.value,/usr/abills/misc/zabbix/zabbix_users.pl credit UserParameter=abills.UserOnline.value,/usr/abills/misc/zabbix/zabbix_internet_online.pl online UserParameter=abills.UserReconnect.value,/usr/abills/misc/zabbix/zabbix_internet_online.pl reconnect UserParameter=abills.UserRecovery.value,/usr/abills/misc/zabbix/zabbix_internet_online.pl recovery UserParameter=abills.UserZapped.value,/usr/abills/misc/zabbix/zabbix_internet_online.pl zapped
⚠️ Примечание: это не стандартная конфигурация ABillS, добавляется вручную.
5.4. Разрешение выполнения (только если был установлен DenyKey)
Если в zabbix_agentd.conf явно запрещены все команды:
nano /etc/zabbix/zabbix_agentd.conf
Добавить ДО строки DenyKey=system.run[*]:
AllowKey=system.run[/usr/abills/misc/zabbix/*.pl *]
⚠️ Внимание: порядок важен — AllowKey должен быть ДО DenyKey.
5.5. Перезапуск агента
systemctl restart zabbix-agent
5.6. Локальная проверка
sudo -u zabbix /usr/abills/misc/zabbix/zabbix_users.pl total
Ожидаемо: число (например, 17100)
zabbix_agentd -t abills.UserAll.value
Ожидаемо: abills.UserAll.value [t|17100]
6. Настройка в Zabbix Web
6.1. Импорт шаблона
Файл zbx_export_abills.yaml
В Zabbix Web:
Configuration → Templates → Import- Выбрать файл
zbx_export_abills.yaml Import
Результат: появится шаблон Abills.
6.2. Создание отдельного хоста для ABillS
Configuration → Hosts → Create host
- Host name:
Abills - Groups:
Linux servers(или создать свою) - Interfaces → Add:
- Type:
Agent - IP:
127.0.0.1 - Port:
10050
- Type:
⚠️ Критично: IP должен быть 127.0.0.1 (локальный агент).
6.3. Привязка шаблона
В настройках хоста Abills:
Templates → Link new template- Выбрать
Abills Add → Update
6.4. Проверка данных
Через 1-2 минуты:
Monitoring → Latest data → Host: Abills
Ожидаемо:
User Total— числоUser Debt— числоUser Credit— числоUser Disabled— числоUser Online— число- Все items в статусе
Supported
Критичные моменты
1. Права доступа к скриптам
Симптом: Permission denied в значениях items.
Причина: скрипты не executable для пользователя zabbix.
Решение: см. раздел 8.2.
2. Проверка всего пути к скриптам
Если sudo -u zabbix не работает, проверить права на каталоги:
namei -l /usr/abills/misc/zabbix/zabbix_users.pl
Все каталоги должны иметь x (execute) для group или others.
3. Type mismatch (string вместо numeric)
Симптом: Value of type "string" is not suitable for value type "Numeric (unsigned)"
Причина: скрипт не может выполниться → возвращает текст ошибки вместо числа.
Решение: исправить права (см. 8.2), затем перепроверить локально (см. 8.6).
4. AllowKey vs DenyKey
Если в zabbix_agentd.conf есть DenyKey=system.run[*] без предшествующих AllowKey, агент не сможет выполнять скрипты ABillS.
Решение: см. раздел 8.4 (добавить AllowKey ДО DenyKey).
Безопасность
Доступ к Web-интерфейсу
- Сразу после установки сменить пароль
Admin - Создать отдельного пользователя для работы (не использовать
Adminпостоянно) - Рассмотреть добавление
Require ip X.X.X.X/24в VirtualHost для ограничения доступа
Скрипты ABillS
Скрипты должны быть доступны только root и zabbix:
chmod 750 /usr/abills/misc/zabbix/*.pl
chown root:zabbix /usr/abills/misc/zabbix/*.pl
НЕ использовать 777 или 755.
Troubleshooting
1. Zabbix Server не стартует
Проверка:
systemctl status zabbix-server
journalctl -u zabbix-server -n 50
Частые причины:
- Неверный пароль БД в
/etc/zabbix/zabbix_server.conf - БД не создана или схема не импортирована
2. Items в статусе "Unsupported"
Проверка в Web: Monitoring → Hosts → Abills → Items → смотреть Error.
Локальная проверка:
zabbix_agentd -t abills.UserAll.value
Частые причины:
- UserParameter не создан (
/etc/zabbix/zabbix_agentd.d/abills_users.conf) - Агент не перезапущен после изменений
- Права доступа к скриптам (см. 8.2)
3. Web-интерфейс не открывается
Проверка:
ss -tulpn | grep 8080
systemctl status apache2
systemctl status php8.3-fpm
Частые причины:
- Apache не слушает 8080 (см. 5.1)
- VirtualHost не включен (
a2ensite zabbix) - PHP-FPM не запущен
4. Логи
- Zabbix Server:
/var/log/zabbix/zabbix_server.log - Zabbix Agent:
/var/log/zabbix/zabbix_agentd.log - Apache:
/var/log/apache2/zabbix_error.log
Что НЕ делать
1. Не давать SUPER привилегии пользователю zabbix в MariaDB
Используйте SET GLOBAL log_bin_trust_function_creators = 1 вместо SUPER.
2. Не использовать chmod 777 на скрипты
Это создает угрозу безопасности. Используйте 750 с группой zabbix.
3. Не оставлять Agent доступным из сети
ListenIP должен быть 127.0.0.1, НЕ 0.0.0.0.
4. Не оставлять стандартный пароль Admin
Это главная причина компрометации Zabbix.
5. Не использовать EnableRemoteCommands=1
Это устаревший и небезопасный параметр. Используйте AllowKey/DenyKey.