Скрипт для мониторинга состояния узлов (компьютеров) в одной или нескольких сетях ZeroTier. Он отслеживает онлайн-статус, актуальность версии клиента и отправляет уведомления о проблемах в Telegram.
- Мониторинг нескольких сетей: Поддержка нескольких сетей ZeroTier с разными токенами доступа.
- Отслеживание статуса: Проверяет, находится ли узел в сети, и как давно он был активен.
- Проверка версии клиента: Сравнивает версию клиента ZeroTier на узле с последней официальной версией на GitHub.
- Уведомления о проблемах: Отправляет сообщения в Telegram только при обнаружении проблем или при восстановлении работоспособности.
- Эскалация оповещений: Разные уровни уведомлений в зависимости от длительности офлайна (например, через 5 минут, 15 минут, 1 час).
- Пинг-проверка: При обнаружении офлайна дополнительно проверяет доступность узла по IP-адресу с помощью ICMP (ping).
- Ежедневные отчеты: Каждый день в полночь отправляет сводный отчет о количестве проверок и выявленных инцидентах за прошедший день.
- Локальная база данных: Использует SQLite для хранения состояния узлов между проверками, что позволяет избежать ложных срабатываний.
- Обнаружение аномалий: Сглаживает редкие аномальные скачки в данных
lastSeenот API ZeroTier. - Поддержка языков: По умолчанию используется русский язык, но все сообщения так же переведены на английский. Язык указывается в настройках.
- Python 3.7+. В проекте используются возможности (
dataclasses,datetime.fromisoformat), появившиеся в этой версии. - Доступ к API ZeroTier. Необходим токен, сгенерированный в личном кабинете ZeroTier.
- Telegram-бот. Нужен токен бота и ID чата для отправки уведомлений.
Важное примечание о пинг-проверке: Для корректной работы ICMP (ping) проверки скрипт должен быть запущен на компьютере, который подключен к той же ZeroTier сети, что и отслеживаемые узлы.
git clone https://github.com/Sarvensky/zero_monitor.git
cd zero_monitorТак же можно просто скачать архив с последней версией.
pip install -r requirements.txtСоздайте файл .env в корневой папке проекта, скопировав содержимое из .env.example, и заполните его вашими данными.
cp .env.example .envОткройте файл .env в текстовом редакторе и укажите значения для следующих переменных:
ZEROTIER_NETWORKS_JSON: JSON-строка с данными ваших сетей.MEMBER_IDS_CSV: ID узлов для мониторинга, перечисленные через запятую.TELEGRAM_BOT_TOKEN: Токен вашего Telegram-бота.TELEGRAM_CHAT_ID: ID чата или канала в Telegram для отправки уведомлений.CHECK_INTERVAL_SECONDS(опционально): Интервал проверок в секундах (по умолчанию 300).LANGUAGE(опционально): Язык логов и уведомлений.RUилиEN(по умолчаниюRU).
Для запуска мониторинга используйте START.bat (для Windows) или start.sh (для Linux), либо выполните команду напрямую:
python main.pyСкрипт начнет работу в консоли, будет выводить логи и отправлять уведомления в Telegram при необходимости.
-
ZEROTIER_NETWORKS_JSON:- Формат: JSON-массив (список) объектов.
- Каждый объект должен содержать:
token: API-токен для доступа к сети ZeroTier.network_id: ID вашей сети ZeroTier.
- Пример для одной сети:
[{"token": "YOUR_ZEROTIER_API_TOKEN", "network_id": "YOUR_NETWORK_ID"}] - Пример для двух сетей:
[ {"token": "TOKEN_1", "network_id": "NETWORK_ID_1"}, {"token": "TOKEN_2", "network_id": "NETWORK_ID_2"} ]
-
MEMBER_IDS_CSV:- Формат: Строка, содержащая 10-значные ID узлов ZeroTier, разделенные запятыми.
- Пример:
1234567890,0987654321,abcdef1234
-
TELEGRAM_BOT_TOKEN:- Токен, полученный от @BotFather при создании бота.
-
TELEGRAM_CHAT_ID:- Уникальный идентификатор чата, куда бот будет отправлять сообщения. Чтобы его узнать, можно воспользоваться ботом @userinfobot.
-
CHECK_INTERVAL_SECONDS:- Формат: Целое число.
- Описание: Как часто (в секундах) скрипт будет выполнять проверку.
- По умолчанию:
300(5 минут).
-
LANGUAGE:- Формат:
RUилиEN. - Описание: Устанавливает язык для вывода в консоль и уведомлений в Telegram.
- По умолчанию:
RU.
- Формат: