Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Интеграция Zabbix ↔ ABillS

Table of Contents

...

Цель интеграции

Обеспечить мониторинг ключевых метрик ABillS через Zabbix:

  • Общее количество пользователей
  • Количество заблокированных
  • Пользователи с долгами/кредитом
  • Онлайн/офлайн статистика

...

...


Предусловия

Операционная система: Ubuntu 24.04
Zabbix: 6.4 LTS
ABillS: 1.60.25 (рекомендация, не критично)
СУБД: MariaDB/MySQL (уже установлена с ABillS)
Доступы: root на сервере

...

Архитектура решения

Решение построено на одном Zabbix Agent с логическим разделением метрик по хостам в Zabbix.

Info
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. Добавление репозитория

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 

Expand
zabbix_export:
  version: '6.4'
  template_groups:
    - uuid: fd4a65755652473987656d02b16b58a4
      name: Шаблоны
  templates:
    - uuid: 6127246501214ee1b16124c97467ab95
      template: Abills
      name: Abills
      groups:
        - name: Шаблоны
      items:
        - uuid: f30f04215d5d4c51b945b19458fbf6c0dd8166f08b8e4e3a8feaaecce07c08aa
          name: 'User TotalPayments Method 1 Count'
          key: abills.Payments.UserAll.value1.count
          delay: 30m
        - uuid: 08c25a4ce9f34b6b97ea7ef5923a8a1403eef56361bf40fd82c3f83a56f0bbde
          name: 'User CreditPayments Method 1 Sum'
          key: abills.Payments.UserCredit1.valuesum
        -  uuiddelay: bfdfa9d359b1479e8364bf7c73d25f9230m
          namevalue_type: 'User Debt'FLOAT
         - keyuuid: abills.UserDebt.valuef30f04215d5d4c51b945b19458fbf6c0
        -  uuidname: 0d1bc4b2c8624c269c6ef2c1ed1a1e92'User Total'
          namekey: 'User Disabled'abills.UserAll.value
          keydelay: abills.UserDisabled.value30m
        - uuid: b31ba8c8b63745199e639aa34adf579108c25a4ce9f34b6b97ea7ef5923a8a14
          name: 'User OnlineCredit'
          key: abills.UserOnlineUserCredit.value

В Zabbix Web:

  1. Configuration → Templates → Import
  2. Выбрать файл zbx_export_abills.yaml
  3. 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

⚠️ Критично: IP должен быть 127.0.0.1 (локальный агент).

9.3. Привязка шаблона

В настройках хоста Abills:

  1. Templates → Link new template
  2. Выбрать Abills
  3. 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

...

          delay: 30m
        - uuid: bfdfa9d359b1479e8364bf7c73d25f92
          name: 'User Debt'
          key: abills.UserDebt.value
          delay: 30m
        - uuid: 0d1bc4b2c8624c269c6ef2c1ed1a1e92
          name: 'User Disabled'
          key: abills.UserDisabled.value
          delay: 30m
        - uuid: b31ba8c8b63745199e639aa34adf5791
          name: 'User Online'
          key: abills.UserOnline.value
          delay: 30m
        - uuid: dc3f176a55894e7a97ee68ac39618a55
          name: UserReconnect
          key: abills.UserReconnect.value
          delay: 30m
        - uuid: bb14269e71b0496b88ad5c0f5be6c2e1
          name: 'User Recovery'
          key: abills.UserRecovery.value
          delay: 30m
        - uuid: c8a8862cd6b149d7a7c0d7475813402f
          name: 'User Zapped'
          key: abills.UserZapped.value
          delay: 30m


В Zabbix Web:

  1. Configuration → Templates → Import
  2. Выбрать файл zbx_export_abills.yaml
  3. 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

⚠️ Критично: IP должен быть 127.0.0.1 (локальный агент).

6.3. Привязка шаблона

В настройках хоста Abills:

  1. Templates → Link new template
  2. Выбрать Abills
  3. 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.

...