Хочу поделиться небольшой заметкой на тему мониторинга за объектами популярного мессенджера. Я расскажу, как мониторить число подписчиков в каналах и группах telegram с помощью Zabbix. Благодаря гибкости как заббикса, так и телеграма, сделать это очень просто.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Для того, чтобы взаимодействовать с telegram, вам понадобится свой бот. Я не буду рассказывать, как его добавить, так как делал это в статье про настройку уведомлений из zabbix в telegram. Далее я буду считать, что вы уже создали своего бота и получили его токен.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Переходим непосредственно к настройке мониторинга за подписчиками.
Как получить информацию о подписчиках в telegram
У Telegram отличное api, с помощью которого можно взаимодействовать с мессенджером. Конкретно о числе подписчиков можно узнать с помощью метода getChatMembersCount. В качестве параметра ему нужно передать id чата или имя публичного канала. Покажу на примере своего чата https://t.me/srv_admins и канала https://t.me/srv_admin.
Протестируем запрос на количество подписчиков с помощью curl из консоли сервера мониторинга zabbix.
# curl -s https://api.telegram.org/bot654532507:AAHBacH_3OpjGtPeWwNmTrk12J6Hc/getChatMembersCount?chat_id=@srv_admin {"ok":true,"result":4325}
Получили ответ в формате json. Он отлично подходит для zabbix, так как последний умеет из коробки парсить json. У вас есть 2 варианта дальнейшей настройки мониторинга:
- Сделать скрипт на сервере, который будет слать запросы в api telegram и передавать полученное значение в zabbix с помощью агента. Плюс решения в том, что нагрузка на сервер мониторинга минимальная. Неудобство в том, что нужно куда-то добавлять скрипт.
- Слать запросы к api напрямую с zabbix сервера с помощью HTTP Агента. И сразу там же парсить полученный ответ. Плюс этого подхода в том, что все настройки хранятся в шаблоне и легко сохраняются или переносятся через экспорт шаблона. Минус в том, что все вычисления и запросы выполняются самим заббиксом.
Я обычно иду по второму пути, потому что так удобнее.
Мониторинг подписчиков telegram в Zabbix
Переходим в web интерфейс zabbix-server, создаем новый шаблон и добавляем туда новый item.
В качестве url указано следующее значение:
https://api.telegram.org/bot{$TOKEN_BOT}/getChatMembersCount?chat_id={$CHANNEL_NAME}
Ниже указан Тип информации: Числовой (целое положительное). В предобработке делаем фильтр по JSONPath, чтобы получить числовое значение из json.
Добавляем в шаблон макросы для названий группы и канала, а так же токена бота.
Из основного все. По аналогии делается мониторинг за пользователями группы (чата). Вот пример моего шаблона - zabbix-telegram.xml. Не забудьте указать свои макросы для названий канала, группы и токена бота.
В шаблоне несколько айтемов:
- TG Group - число подписчиков группы, обновляется раз в 10 минут;
- TG Chat - число подписчиков чата, обновляется раз в 10 минут;
- Изменение подписчиков - зависимый элемент данных, фиксирует относительное изменение числа подписчиков группы после каждой проверки;
- Изменения за сутки - сумма значений предыдущего айтема изменение подписчиков за последние 24 часа;
- Подписчики по дням - запускается раз в сутки в 23:59, чтобы зафиксировать количество подписчиков в этот день.
На этом у меня по мониторингу подписчиков телеграм в zabbix все.
Заключение
Вот так быстро и просто можно добавить мониторинг всего, что угодно, в Zabbix. У меня масса примеров самых разных метрик, за которыми можно наблюдать, несмотря на то, что у них нет каких-то очевидных возможностей интеграции с системами мониторинга. Вот несколько примеров:
и т.д. Больше примеров смотрите в разделе Zabbix.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Спасибо за статью.
Подскажите пожалуйста, как в заббиксе можно ввести в переменную(или макрос) имя массива json для создания прототипа элемента данных?
{"status":"running","cluster":"master","date":"09\/12\/2021","time":"04:13","lch":{"stest":{"active":false,"connect":true,"status":"-----","queueopen":true,"input":"10","output":"0","queue":"1"},"aftn":{"active":true,"connect":true,"status":"AC---","queueopen":true,"input":"17","output":"4","queue":"0"},"corpmail":{"active":true,"connect":true,"status":"A----","queueopen":true,"input":"0","output":"26","queue":"0"}}}
Имена масивов "stest, aftn, corpmail. Json в заббиксе получил, а вот как сделать что бы создавались элементы данных на основе имён массивов разобраться не могу...
Я так сходу не скажу. В Zabbix немного заморочено автообнаружение работает. Надо подготовить json, прежде чем передавать его в Zabbix. В таком виде, как он есть, его не передать на автообнаружение для автоматического создания элементов данных.
А подготовить, это вы имели ввиду добавить id например в массив?
Вся инфа по автообнаружению и созданию элементов данных тут - https://www.zabbix.com/documentation/5.4/ru/manual/discovery/low_level_discovery
Там есть примеры и для json. Я так сходу не скажу, можно ли Ваш json распарсить прямо в zabbix и использовать для создания итемов. Возможно, его придётся немного преобразовать. С этим надо разбираться.
Документацию читал, и операнды пробывал использовать, но они просто не предназначены для извлечения динамических имён массивов, поэтому и обратился сюда в надежде на совет. Но всё равно спасибо, за направление, буду дальше копать.
Я недавно занимался вопросом автообнаружения и придумал небольшой трюк. Он описан в заметке - https://t.me/srv_admin/1361 Если кратко, то для формирования списка для автообнаружения я использую предобработку с помощью javascript. В нём можно как угодно обработать в том числе и json и подать его в нужном виде. Посмотрите, может это поможет решить задачу.
>>> Не забудьте указать свои макросы для названий канала, группы и токена бота.
не совсем понял, дошёл этого момента.
как этот шаблон и куда подключать? просто к zabbix server узлу в шаблонах?
Просто добавляете шаблон через импорт на Zabbix Server. Потом прикрепляете его к любому хосту. Логичнее всего к самому Zabbix серверу его и прикрепить. Потом идете в этот хост, куда прикрепили шаблон, и изменяете в макросах информацию о канале и токен. Это все через стандартный функционал Zabbix делается, никаких костылей. Если что-то не понятно, можно нагуглить, типа "как импортировать шаблон" или "как изменить макрос" и т.д.
Спасибо) разобрался)
Статья супер.