Мониторинг TrueConf Server с помощью Zabbix
Мониторинг корпоративных серверов является удобным способом отслеживания работы и поиска неисправностей.
В данной статье будет рассмотрено как работает система мониторинга TrueConf Server на примере внедрения Zabbix. В данном примере мы будем мониторить работу машины с установленным TrueConf Server, получать необходимые сведения о конференциях, а также отправлять уведомления через бота Telegram. Компоненты структуры:
- TrueConf Server (объект мониторинга);
- Zabbix (инструмент мониторинга).
Схема работы мониторинга выглядит следующим образом:
Описание Zabbix и возможностей TrueConf API
Zabbix — система мониторинга статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, и других узлов системы. Zabbix позволяет отслеживать состояние работы различных компонентов, например:
- сетей;
- серверов;
- облачных ресурсов;
- приложений;
- сервисов.
Данное решение популярно среди системных администраторов ввиду своей гибкости настройки и масштабируемости, что позволяет производить мониторинг систем от «умного дома» до корпоративных сред. Zabbix обеспечивает надёжность и безопасность конфиденциальной информации, используя шифрование.
Одна из самых главных функций решения — возможность взаимодействия со сторонним API, в нашем случае с TrueConf API. Это позволяет программно извлекать и обрабатывать данные с необходимых сервисов.
TrueConf Server имеет в своем распоряжении RESTful API. С его помощью можно управлять множеством параметров сервера видеосвязи и получать различные данные. Подробнее с TrueConf Server API можно ознакомиться в базе знаний TrueConf.
Настройка интеграции TrueConf Server API и Zabbix
Для примера рассмотрим структуру, состоящую из двух разных серверов: на одном установлен TrueConf Server, на другом — Zabbix. Стоит отметить, что оба решения можно установить на виртуальную машину.
Передаваемые данные от TrueConf Server к Zabbix:
- состояние сервера;
- количество активных конференций;
- количество участников во всех активных конференциях.
Настройка TrueConf Server
Для корректной работы интеграции необходима правильная настройка всех компонентов. Начнём с TrueConf Server. Подробнее о его установке можно узнать в документации. Взаимодействие с Zabbix происходит посредством TrueConf Server API.
Данный набор реализует архитектуру RESTful API и в основе его работы лежат HTTP-запросы GET, POST, PUT, DELETE. Ответы сервер возвращает в формате JSON.
Сначала настроим HTTPS в панели управления сервером в разделе Веб → HTTPS. На открывшейся странице в блоке Конфигурация HTTPS настройте необходимые параметры. Рекомендуем использовать коммерческий сертификат, например, Let’s Encrypt, но возможна работа и с самоподписанным.
Скачивание и настройка Zabbix
На данном этапе требуется настроить Zabbix. Поскольку этот компонент разделён на две части, клиентскую (собирает данные и направляет их на сервер) и серверную (объединяет данные со всех клиентов в удобный для анализа вид), рассмотрим их по отдельности.
Для серверной части Zabbix нужно выбрать подходящий вариант развёртывания: доступна установка на множество ОС Linux, с помощью готовых образов для разных гипервизоров (KVM, Qemu, Hyper-V и пр.), и в качестве Docker-контейнера. Зайдите на страницу скачивания, выберите свой вариант и следуйте инструкциям для него. Мы для теста скачали вариант в формате OVF и развернули его в VirtualBox.
При запуске виртуальная машина с Zabbix Server запускается в режиме терминала, это основной способ взаимодействия напрямую с сервером. Также доступен веб-интерфейс, с помощью которого будем настраивать мониторинг TrueConf Server.
В терминале будут запрошены учётные данные для авторизации на стороне Zabbix Server. Укажите следующие данные (установлены по умолчанию):
- Логин — root;
- Пароль — zabbix.
Для повышения безопасности измените пароль на свой с помощью команды passwd <имя пользователя>
. Для входа в веб-интерфейс Zabbix вам нужно узнать IP-адрес машины с ним. Для этого выполните команду ip -c a
.
По найденному адресу заходим в панель управления Zabbix.
Вход в веб-интерфейс осуществляется по другому логину и паролю, его мы получили после запуска сервера в терминале, в пункте Zabbix frontend credentials. Для входа введите:
- Username — Admin;
- Password — zabbix.
После входа в веб-интерфейс отображается панель мониторинга, в ней содержится вся необходимая информация. Есть возможность изменения и настройки виджетов под определённые задачи.
Скачивание и настройка Zabbix агента
Zabbix агент необходим для работы интеграции, с его помощью сервер получает данные от объекта мониторинга.
Установка агента Zabbix аналогична Zabbix server: скачайте подходящую версию со страницы загрузки агента и следуйте инструкциям инсталлятора.
После установки Zabbix Agent необходимо проверить его работоспособность. Для этого нужно зайти на сервер Zabbix и выполнить подключение по протоколу TELNET командой:
1 |
telnet agent_ip port |
где:
agent_ip
— IP-адрес компьютера с установленным Zabbix Agent;port
— порт прослушивания.
Настройка мониторинга
Для настройки мониторинга какого-либо параметра с помощью Zabbix Agent нужно настроить следующее:
- Группу узлов (Host group);
- Узел (Host);
- Элемент данных (Item).
Сначала нужно создать группу узлов, она для хранения узлов, своего рода “папка” для них, так будет удобнее их искать, группировать по назначению. Для этого:
- В панели веб-интерфейса перейдите в раздел Data collection → Host groups.
- Нажмите кнопку Create host group.
- Затем укажите название группы (например, «TrueConf Server») и нажмите кнопку Add.
После создания группы узлов создайте сам узел:
- Перейдите в раздел Data collection → Hosts.
- В открывшемся разделе нажмите Create host.
- Откроется окно создания узла, в нем нужно заполнить поля:
- Host name;
- Host groups (выберите созданную ранее группу — TrueConfServer_agent_group);
- Interfaces (Interfaces → Add → Agent).
После создания узла добавьте элемент данных. В той же вкладке Hosts, внизу вы увидите таблицу со списком подключений. В ней переходите в Items → Create item.
В открывшемся окне заполните поля:
- Name —
zabbix_agent_ping
; - Type —
Zabbix agent
; - Key —
agent.ping
; - Type of information —
Numeric (unsigned)
; - Host interface —
10.140.2.230:10050
; - Update interval —
10s
.
Остальное по ситуации, в данном примере оставьте по умолчанию. Чтобы сохранить элемент, нажмите кнопку Add.
Вы увидите созданный элемент в списке подключений:
Теперь вы можете мониторить наличие связи с машиной с TrueConf Server, используя созданный узел. Для этого в панели перейдите в раздел Monitoring → Lastest data, ниже выберите созданный узел zabbix_agent_ping, и нажмите Graph.
В открывшейся вкладке отображается график параметра zabbix_agent_ping:
На графике выше мы видим, что с 15:44 по 15:46 с сервером не было связи (не проходил ping).
Для более удобного отслеживания данных выведите график на панель мониторинга Zabbix. Для перехода в режим редактирования нажмите на Edit dashboard в правом верхнем углу панели мониторинга.
Чтобы добавить виджет:
- Нажмите на пустую область панели, откроется окно добавления виджета.
- Выберите тип виджета, в нашем случае график (Type → Graph).
- Выбирайте необходимые данные для мониторинга (в данном примере следует выбрать Host → zabbix_agent_ping → Item → zabbix_agent_ping).
Вы можете настроить параметры отображения виджета, например, отображаемые данные, тип графика, цвет, прозрачность, толщину, и другие.
В результате получился график zabbix_agent_ping, который мы настроили для удобного отображения на панели мониторинга.
Мониторинг служб TrueConf Server
Следующим шагом настроим мониторинг всех служб TrueConf Server с помощью Zabbix. Например, при установке сервера видеосвязи на Windows добавляются такие службы:
- TrueConf Server – основная служба.
- TrueConf Database – отвечает за базу данных, от этой службы зависит работа TrueConf Server Manager.
- TrueConf Web Manager – отвечает за работу всех веб-интерфейсов.
- TrueConf Server Manager – менеджер работы с БД и файлами настроек.
- TrueConf Bridge – служба, которая способна получать websocket команды от веб-приложений и преобразовывать их в понятные Trueconf Server транспортные сообщения и который, помимо этого, может взаимодействовать с БД.
Чтобы отслеживать состояние служб, снова создадим элементы данных. При мониторинге служб на ОС Windows важно указать имя службы, а не отображаемое имя. Имя можно узнать в свойствах каждой службы (например, перейдя в оснастку Службы с помощью команды services.msc
). У TrueConf Server начиная с версии 5.4 название службы и отображаемое имя совпадают.
В итоге должен получиться такой список служб:
- TrueConf;
- TrueConf Database;
- TrueConf Web Manager;
- TrueConf Server Manager;
- TrueConf Bridge.
Следующий шаг — реализация мониторинга служб. Для этого аналогично ранее показанному выше примеру создайте элемент данных для каждой службы. Для этого создайте узел TrueConfServer_services_monitoring_test, в нём создайте элементы данных, для удобства укажите отображаемое имя каждой службы:
- TrueConf Server;
- TrueConf Database;
- TrueConf Server Manager;
- TrueConf Web Manager;
- TrueConf Bridge.
Элемент данных создаётся как в примере с zabbix_agent_ping, за исключением поля ключа (Key). В нём указываем service.info[service_name], где service_name — имя службы, которую необходимо мониторить, из списка выше. В результате получается такой список элементов данных:
Для удобного мониторинга добавьте для созданных элементов отображение данных в виде графиков в панели мониторинга. Как показано выше для zabbix_agent_ping, чтобы добавить виджет нажмите на Edit dashboard в правом верхнем углу и выберите тип Type → Graph. В этом случае укажите такие параметры:
- Host pattern — TrueConfServer_services_monitoring_test;
- Item pattern — Службу для мониторинга.
Для отображения на графике состояния служб TrueConf Server, добавьте каждый элемент данных в отдельный набор данных, тогда можно установить разные цвета для отображения на графике. Ниже настройте параметры отображения, нажмите Add, сохраните изменения главной панели, нажав Save changes в правом верхнем углу.
В результате получается настроенный график мониторинга нужных служб на главной панели Zabbix:
Проверка доступа к серверу с помощью HTTP-запроса
Zabbix предоставляет готовый компонент для отправки HTTP-запросов. Чтобы отслеживать состояние сервера с помощью HTTP-запроса потребуется создать:
- Узел по IP и порту сервера;
- Веб-сценарий.
Создание узла описано выше, вот что должно получиться:
В данном случае IP адрес TrueConf Server 10.140.2.230, порт для проверки HTTP-запросом — 4307. Для создания веб-сценария:
- Перейдите в раздел Data collection → Hosts.
- В строке узла нажмите Web.
- Создайте там сценарий во вкладке Scenario, нажав на Create web scenario.
Заполните поля:
- Name —
TrueConfServer_check_avaibility
; - Update interval —
10s
; - Attempts —
1
; - Agent —
Zabbix
.
Теперь надо задать операцию, которую должен выполнять сценарий (в терминологии Zabbix шаг), для этого перейдите во вкладку Steps, в ней заполните поля:
- Name —
check_trueconfserver_avaibility
; - URL —
http://10.140.2.230:4307/vsstatus/
; - Timeout —
10s
; - Required status code —
200
.
После заполнения нажмите Update во вкладке Steps. Так выглядит настроенный шаг веб-сценария:
Для сохранения сценария нажмите кнопку Update во вкладке Scenario.
Готовый веб-сценарий:
Для проверки созданного сценария:
- Перейдите в боковой панели в раздел Monitoring → Hosts.
- Нажмите Web в строке TrueConfServer_host_test.
Таблица отображает что все ОК, то есть HTTP-запрос отрабатывает успешно:
Для более подробной информации перейдите к веб сценарию, нажав на check_TrueConfServer_avaibility. Открывается следующий график:
Для удобства мониторинга добавьте виджет на главный экран, как показано ранее. В настройках укажите такие параметры:
- Type — Graph;
- Data set — Add new data set;
- host pattern → Select — TrueConfServer_host_test;
- item pattern → Select — выбираете необходимые вам данные.
Далее последовательно нажмите кнопки Add и Save changes.
Zabbix и TrueConf Server API
Теперь настроим получение по TrueConf Server API количества активных конференций и их участников. Для этого нам нужно создать узел, получить JSON данные с помощью HTTP-запроса, преобразовать JSON данные в читаемый формат, вывести их на главную панель.
Следует начать с создания узла, здесь всё как показано ранее. Создайте предмет данных HTTP-агент, HTTP-запрос составляется согласно документации TrueConf Server API.
Используйте запрос Get Call List для получения списка сессий (сеансов связи):
1 |
https://{{$server_name}}/api/v3.7/logs/calls?access_token={{$access_token}} |
где:
{{$server_name}} — адрес TrueConf Server
;{{$access_token}} — токен TrueConf Server
.
Например:
1 |
https://10.140.2.230:10066/api/v3.7/logs/calls?access_token=5halVyMDtoT1aoqhOGTDLyERXTN0uRQk |
В итоге должен получиться такой HTTP-агент:
В списке сессий будут в том числе уже завершившиеся сеансы связи (см. параметр end_time
). Также надо учесть, что будут все типы сессий: как звонки, так и конференции. Они отличаются значением параметра class
у звонков он равен 1. Потому чтобы выбрать только конференции, нужно сделать выборку по условию class != 1
. Для этого:
- Перейдите на вкладку Preprocessing.
- В блоке Preprocessing steps нажмите Add.
- Укажите такие параметры:
- Name : JSONPath;
- parameters :
1$.list[?(@.end_time == 'null' && @.class != 1)].end_time.length()(то есть выражение, составленное согласно официальной документации Zabbix JSONPath functionality).
В итоге получаем настроенный элемент данных, который возвращает нам количество активных конференций.
По такому же принципу создайте предмет данных, который возвращает количество участников в активных конференциях. В результате получается данное выражение:
1 |
$.list[?(@.end_time == 'null' && class != 1)].participant_count.sum() |
Нужно учесть, что при отсутствии участников конференций некорректно выводится значение на главную панель. Чтобы исправить это, в блоке Custom on fail выберите вариант Set value to и введите свой поясняющий текст, например “Нет участников”.
В результате получим два элемента данных, которые обрабатывают полученный по API JSON и возвращают количество активных конференций и участников в них.
Проверка обработки API запроса
Перед тестированием следует проверить что возвращает API запрос, для этого выполните его в браузере:
1 |
https://10.140.2.230:10066/api/v3.7/logs/calls?access_token=5halVyMDtoT1aoqhOGTDLyERXTN0uRQk |
где:
10.140.2.230:10066
— адрес сервера;5halVyMDtoT1aoqhOGTDLyERXTN0uRQk
— токен TrueConf Server API.
Пример полученных данных в виде JSON:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
"cnt": 8, "list": [ { "conference_id": "00000015074db9fe@testserver1.trueconf#vcs", "named_conf_id": "906277858941", "topic": null, "class": 1, "type": 0, "subtype": 0, "owner": "testuser4.roman@testserver1.trueconf", "participant_count": 2, "start_time": { "date": "2024-03-07 08:57:59.000000", "timezone_type": 3, "timezone": "Europe/London" }, "duration": 12, "end_time": { "date": "2024-03-07 08:58:11.000000", "timezone_type": 3, "timezone": "Europe/London" } } |
В полученном JSON для каждой конференции (объекта списка) ищем нужные параметры:
“end_time”: null
— время окончания конференции, пустое значение, значит она активна. Нас интересуют только такие конференции, их количество и надо посчитать;“class”: 10
— тип конференции. Для мониторинга необходимо проверять значение на соответствие условию не равно 1 (выбираем все типы кроме звонков 1 на 1);“participant_count”
— количество участников конференции у каждой конференции, удовлетворяющей условию 1.
В панели управления TrueConf Server также можно отследить активные сессии для конференций и число участников в них. Для этого перейдите в раздел Отчёты → История звонков и обратите внимание на строки, у которых значение в столбце Режим отличается от видеозвонка.
Исходя из ранее показанных примеров создаём виджеты отображения предметов данных (items) на главной панели. В результате должно получиться так:
Информация при выполнении запроса в браузере, в TrueConf Server и на главной панели Zabbix совпадает, следовательно функция мониторинга работает корректно.
Уведомления от бота Telegram
Осталось настроить бота Telegram для получения уведомлений от Zabbix. Для работы данного метода нужен токен бота и ID пользователя или группы куда присылать уведомления. Агент Zabbix собирает данные о службах TrueConf Server, отправляет их через заранее указанный узел (IP-адрес, порт) на сервер Zabbix. И если на Zabbix срабатывает какой-то из настроенных триггеров, то отправляются уведомления через Telegram.
Создание Telegram-бота
Начните с создания бота, для этого:
- Найдите пользователя BotFather в Telegram и в чате с ним нажмите кнопку Start или напишите команду
/start
. - Далее отправьте команду
/newbot
. - Придумайте для бота имя пользователя, чтобы его можно было легко искать в списке чатов.
- Бот ответит сообщением в котором будет токен для управления Telegram ботом.
После создания узнайте ID пользователя или группы куда следует отправлять уведомления. В данном примере рассмотрим отправку уведомлений на свой аккаунт Telegram. Для этого узнаем свой ID с помощью бота. Найдите ID бота написав в поиске ID bot, далее напишите ему команду /start
. В сообщении бот напишет наш ID.
Интеграция Telegram с сервером Zabbix
Теперь настроим интеграцию с Telegram:
- В Zabbix переходите в пункт меню Alerts → Media types.
- Откроется таблица, в ней найдите Telegram, и отметьте ссылку Disabled чтобы включить данный способ оповещения, ссылка должна измениться на Enabled.
- Далее нажав на Telegram перейдите в настройки данного типа оповещения, и укажите такие параметры:
- Name — Telegram;
- Type — Webhook;
- Message — {ALERT.MESSAGE};
- Subject — {ALERT.SUBJECT};
- To — ID пользователя или группы;
- Token — токен бота Telegram.
- После заполнения нажмите Update для применения изменений.
После применения изменений сразу проверьте работоспособность оповещений, для этого в строке Telegram нажмите на кнопку Test.
Заполните поля:
- Message — текст сообщения;
- Parse mode — можно оставить пустым;
- Subject — субъект (о каком компоненте идет речь, узел, служба, и другое);
- To — кому отправить, здесь нужен ID пользователя или группы;
- Token — токен бота.
После заполнения нажмите кнопку Test, в поле Response будет выведен ответ теста (ошибка или ОК).
Если всё настроено правильно, вы получите сообщение в Telegram от бота.
Осталось настроить отправку всех добавленных выше метрик через Telegram бота, для этого:
- На боковой панели переходите Users → Users.
- Нажмите на пользователя Admin.
- Перейдите во вкладку Media, в ней нажмите Add.
- В открывшемся окне заполните поля:
- Type — Telegram;
- Send to — Telegram ID пользователя/группы;
- When active — Время активности данного способа оповещения;
- Use if severity — важность уведомления, настраивается в зависимости от вашего случая, от простого уведомления (Information), до оповещения о серьезной неисправности (High, Disaster).
- После заполнения всех полей нажмите Add и потом Update.
Последний шаг настройки системы оповещения. Нужно настроить триггеры, которые будут реагировать на изменение состояния выбранных предметов данных:
- Нажмите на боковой панели Data collection → Hosts.
- В строке TrueConfServer_services_monitoring_test нажмите Triggers.
- В открывшейся вкладке нажмите Create trigger.
- В открывшемся окне триггера заполните параметры:
- Name — TrueConf Server;
- Event name — <Заполнится автоматически после поля Name>;
- Severity — Warning;
- Expression — Add.
- В окне Condition заполните:
- Item → Select — TrueConf Server;
- Function — last() — Last (most recent) T value;
- Result — 6 (в нашем случае 6, этот код возвращает функция
service.info[service_name]
если служба отключена). - После заполнения нажмите Insert, получается такое выражение:
last(/TrueConfServer_services_monitoring_test/service.info[TrueConf])=6
. - После заполнения всех полей нажмите Add.
Создайте по данному принципу триггеры для остальных служб TrueConf Server, в итоге должен получиться список триггеров:
Следующее — создание действия триггера (Trigger action). Для этого:
- Перейдите по панели Alerts → Actions → Trigger actions.
- Нажмите кнопку Create action для создания действия триггера:
- В открывшемся окне New action заполните поля:
- Name — название действия триггера;
- Type of calculation — And (Необходимо для срабатывания при соответствия всех условий одновременно);
- Conditions — создаем 3 условия :
- Host equals TrueConfServer_services_monitoring_test (Подключение через которое производится мониторинг);
- Trigger equals TrueConfServer_services_monitoring_test: TrueConf Web Manager (Триггер: служба TrueConf Server);
- Trigger severity equals Warning (Важность триггера).
- Статус — Enabled.
- Далее переходите во вкладку Operations, там настраиваются действия при срабатывании триггера:
- Operation (действия при срабатывании триггера);
- Recovery operation (действия при восстановлении);
- Update operation (действия при обновлении).
- Нажмите Add чтобы добавить действие.
- Заполните поля в окне Operation details:
- Send to users — Admin;
- Send only to — Telegram.
s
Остальные значения оставьте по умолчанию, после нажмите Add. Добавьте аналогичным способом действия при обновлении (Recovery operation) и восстановлении (Update operation). В итоге должно получиться так:
Проверка работы оповещений через Telegram бота
Для проверки работы системы оповещений было выбрано остановить службы TrueConf Server и TrueConf Web Manager, результат:
Telegram бот прислал оповещение, в котором присутствует информация о неисправности. График на главной панели отображает состояние служб:
Верните службы обратно в рабочее состояние, и Telegram бот оповещает о возобновлении их работы:
График на главной панели также отображает возобновление работы служб: