Скрипт для мониторинга состояния узлов (компьютеров) в одной или нескольких сетях 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
.
- Формат: