Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Current »

Интеграция 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

Шаги мастера:

  1. Welcome → Next
  2. Pre-requisites → все должно быть OK → Next
  3. Database connection:
    • Type: MySQL
    • Host: localhost
    • Name: zabbix
    • User: zabbix
    • Password: STRONG_PASSWORD_HERE → Next
  4. Zabbix server details:
    • Host: localhost
    • Port: 10051
    • Name: Abills Monitoring → Next
  5. 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/

Ожидаемо:

zabbix_users.pl

zabbix_internet_online.pl

zabbix_payments_types.pl

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_export:
  version: '6.4'
  template_groups:
    - uuid: fd4a65755652473987656d02b16b58a4
      name: Шаблоны
  templates:
    - uuid: 6127246501214ee1b16124c97467ab95
      template: Abills
      name: Abills
      groups:
        - name: Шаблоны
      items:
        - uuid: f30f04215d5d4c51b945b19458fbf6c0
          name: 'User Total'
          key: abills.UserAll.value
        - uuid: 08c25a4ce9f34b6b97ea7ef5923a8a14
          name: 'User Credit'
          key: abills.UserCredit.value
        - uuid: bfdfa9d359b1479e8364bf7c73d25f92
          name: 'User Debt'
          key: abills.UserDebt.value
        - uuid: 0d1bc4b2c8624c269c6ef2c1ed1a1e92
          name: 'User Disabled'
          key: abills.UserDisabled.value
        - uuid: b31ba8c8b63745199e639aa34adf5791
          name: 'User Online'
          key: abills.UserOnline.value


В 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 не работает, проверить права на каталоги:

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.


  • No labels