Skip to content

Sarvensky/zero_monitor

Repository files navigation

ZeroTier Monitor

English version

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

Установка и настройка

1. Клонирование репозитория

git clone https://github.com/Sarvensky/zero_monitor.git
cd zero_monitor

Так же можно просто скачать архив с последней версией.

2. Установка зависимостей

pip install -r requirements.txt

3. Настройка конфигурации

Создайте файл .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 при необходимости.

Детальное описание конфигурации (.env)

  • 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.

About

Мониторинг устройств в сети ZeroTier Cental

Topics

Resources

Stars

Watchers

Forks

Languages