Интеграция Zabbix ↔ ABillS
...
| Table of Contents |
|---|
Цель интеграции
Обеспечить мониторинг ключевых метрик ABillS через Zabbix:
- Общее количество пользователей
- Количество заблокированных
- Пользователи с долгами/кредитом
- Онлайн/офлайн статистика
Результат: работающие items в Zabbix с численными значениями без ошибок Permission denied.
...
Предусловия
Операционная система: Ubuntu 24.04
Zabbix: 6.4 LTS
ABillS: 1.60.25 (рекомендация, не критично)
СУБД: MariaDB/MySQL (уже установлена с ABillS)
Доступы: root на сервере
...
Архитектура решения
Решение построено на одном Zabbix Agent с логическим разделением метрик по хостам в Zabbix.
| Info |
|---|
|
...
Критично:
- Agent работает от пользователя
zabbix - Скрипты должны быть executable для группы
zabbix - Agent слушает только
127.0.0.1(закрыт от сети)
...
1. Установка Zabbix Server
...
1.1. Добавление репозитория
| Code Block |
|---|
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. Установка компонентов
| Code Block |
|---|
apt install -y zabbix-server-mysql zabbix-sql-scripts zabbix-agent zabbix-frontend-php php8.3-mysql |
...
...
1.3. Создание БД для Zabbix
mysql
| Code Block |
|---|
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. Импорт схемы
| Code Block |
|---|
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
| Code Block |
|---|
nano /etc/zabbix/zabbix_server.conf |
...
Найти и задать:
| Code Block |
|---|
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=STRONG_PASSWORD_HERE |
...
...
1.6. Запуск сервисов
| Code Block |
|---|
systemctl restart zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent
systemctl status zabbix-server |
...
Ожидаемо: active (running)
...
2. Настройка Apache для Web-интерфейса
...
2.1. Конфигурация порта
| Code Block |
|---|
nano /etc/apache2/ports.conf |
...
Добавить (если нет):
| Code Block |
|---|
Listen 8080 |
...
...
2.2. VirtualHost для Zabbix
| Code Block |
|---|
nano /etc/apache2/sites-available/zabbix.conf |
...
| Code Block |
|---|
<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
| Code Block |
|---|
a2enmod proxy_fcgi setenvif rewrite
a2enconf php8.3-fpm
a2ensite zabbix
systemctl restart php8.3-fpm
systemctl reload apache2 |
...
...
2.4. Настройка PHP
| Code Block |
|---|
nano /etc/php/8.3/fpm/php.ini |
...
Изменить:
post_max_size
...
=
...
16M
...
upload_max_filesize
...
=
...
16M
...
max_execution_time
...
=
...
300
...
max_input_time
...
=
...
300
...
| Code Block |
|---|
systemctl restart php8.3-fpm |
...
...
2.5. Генерация locale (если нужно)
| Code Block |
|---|
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
...
⚠️ КРИТИЧНО: сразу после входа сменить пароль Admin:User settings → Change password
...
4. Защита Zabbix Agent
...
4.1. Ограничение сетевого доступа
| Code Block |
|---|
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. Запрет небезопасных команд
| Code Block |
|---|
nano /etc/zabbix/zabbix_agentd.conf |
...
Убедиться:
DenyKey=system.run[*]
Или явно разрешить только для ABillS (см. раздел 8.3).
| Code Block |
|---|
systemctl restart zabbix-agent |
...
...
4.3. Проверка
| Code Block |
|---|
ss -tulpn | grep 10050 |
...
Ожидаемо: 127.0.0.1:10050 (НЕ 0.0.0.0)
...
5. Интеграция с ABillS
...
5.1. Проверка наличия скриптов
| Code Block |
|---|
ls -l /usr/abills/misc/zabbix/ |
...
Ожидаемо:
zabbix_users.pl
zabbix_internet_online.pl
zabbix_payments_types.pl
...
5.2. Установка прав доступа (КРИТИЧНО)
Проблема: по умолчанию скрипты принадлежат root:root с правами 644 — Zabbix Agent не может их выполнить.
Решение:
| Code Block |
|---|
chgrp zabbix /usr/abills/misc/zabbix/*.pl
chmod 750 /usr/abills/misc/zabbix/*.pl |
...
Проверка:
| Code Block |
|---|
ls -l /usr/abills/misc/zabbix/zabbix_users.pl |
...
Ожидаемо: -rwxr-x--- root zabbix
...
5.3. Создание UserParameter
...
Создать файл:
bash
| Code Block |
|---|
nano /etc/zabbix/zabbix_agentd.d/abills_users.conf |
...
Вставить:
| Code Block |
|---|
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 явно запрещены все команды:
| Code Block |
|---|
nano /etc/zabbix/zabbix_agentd.conf |
...
Добавить ДО строки DenyKey=system.run[*]:
...
⚠️ Внимание: порядок важен — AllowKey должен быть ДО DenyKey.
...
5.5. Перезапуск агента
| Code Block |
|---|
systemctl restart zabbix-agent |
...
...
5.6. Локальная проверка
| Code Block |
|---|
sudo -u zabbix /usr/abills/misc/zabbix/zabbix_users.pl total |
...
Ожидаемо: число (например, 17100)
...
Ожидаемо: abills.UserAll.value [t|17100]
...
6. Настройка в Zabbix Web
...
6.1. Импорт шаблона
Получить файл Файл zbx_export_abills.yaml от клиента/разработчика ABillS.
В Zabbix Web:
Configuration → Templates → Import- Выбрать файл
zbx_export_abills.yaml Import
Результат: появится шаблон Abills.
9.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 (локальный агент).
9.3. Привязка шаблона
В настройках хоста Abills:
Templates → Link new template- Выбрать
Abills Add → Update
9.4. Проверка данных
Через 1-2 минуты:
Monitoring → Latest data → Host: Abills
Ожидаемо:
User Total— числоUser Debt— числоUser Credit— числоUser Disabled— числоUser Online— число- Все items в статусе
Supported
10. Критичные моменты
10.1. Права доступа к скриптам
Симптом: Permission denied в значениях items.
Причина: скрипты не executable для пользователя zabbix.
Решение: см. раздел 8.2.
10.2. Проверка всего пути к скриптам
Если sudo -u zabbix не работает, проверить права на каталоги:
namei -l /usr/abills/misc/zabbix/zabbix_users.pl
Все каталоги должны иметь x (execute) для group или others.
10.3. Type mismatch (string вместо numeric)
Симптом: Value of type "string" is not suitable for value type "Numeric (unsigned)"
Причина: скрипт не может выполниться → возвращает текст ошибки вместо числа.
Решение: исправить права (см. 8.2), затем перепроверить локально (см. 8.6).
10.4. AllowKey vs DenyKey
Если в zabbix_agentd.conf есть DenyKey=system.run[*] без предшествующих AllowKey, агент не сможет выполнять скрипты ABillS.
Решение: см. раздел 8.4 (добавить AllowKey ДО DenyKey).
11. Безопасность
11.1. Пароли БД
НЕ публиковать в wiki:
- Пароль пользователя
zabbixдля MariaDB
Использовать placeholder: STRONG_PASSWORD_HERE
11.2. Файлы с паролями
Файл /etc/zabbix/zabbix_server.conf содержит пароль БД → права 640:
chmod 640 /etc/zabbix/zabbix_server.conf
chown root:zabbix /etc/zabbix/zabbix_server.conf
...
| Expand |
|---|
zabbix_export: |
В 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 не работает, проверить права на каталоги:
| Code Block |
|---|
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:
| Code Block |
|---|
chmod 750 /usr/abills/misc/zabbix/*.pl
chown root:zabbix /usr/abills/misc/zabbix/*.pl |
...
НЕ использовать 777 или 755.
...
Troubleshooting
...
1. Zabbix Server не стартует
Проверка:
| Code Block |
|---|
systemctl status zabbix-server
journalctl -u zabbix-server -n 50 |
...
Частые причины:
- Неверный пароль БД в
/etc/zabbix/zabbix_server.conf - БД не создана или схема не импортирована
...
2. Items в статусе "Unsupported"
Проверка в Web: Monitoring → Hosts → Abills → Items → смотреть Error.
Локальная проверка:
| Code Block |
|---|
zabbix_agentd -t abills.UserAll.value |
...
Частые причины:
- UserParameter не создан (
/etc/zabbix/zabbix_agentd.d/abills_users.conf) - Агент не перезапущен после изменений
- Права доступа к скриптам (см. 8.2)
...
3. Web-интерфейс не открывается
Проверка:
| Code Block |
|---|
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.
...