Endpoint-Monitoring Operator: мониторинг внутри Kubernetes

Почему ещё один монитор?

Традиционные инструменты проверки доступности лишь сообщают, открыт ли порт. Endpoint-Monitoring Operator работает прямо внутри кластера, что позволяет ему:

  • Обращаться к реальным бизнес-адресам вроде /v1/status, которые не опубликованы во внешнюю сеть.

  • Проверять содержимое JSON-полей, а не только код ответа HTTP 200.

  • Мониторить распределённые системы (Trino, OpenSearch) и сетевые примитивы (DNS, TCP, Ping).

  • Отправлять уведомления через подключаемые (pluggable) нотификаторы — сегодня это Slack, в ближайших планах e-mail и PagerDuty.

Поддерживаемые драйверы

Драйвер Типичный сценарий

http

Базовая проверка кода ответа (200, 302 и т.д.)

http-json

Валидация JSON-тела и кода ответа

tcp

Проверка того, что сервис слушает порт

dns

Проверка того, что домен резолвится в ожидаемые IP-адреса

ping

Простая проверка ICMP-доступности

trino

Проверка готовности координатора Trino (READY)

opensearch

Проверка состояния кластера (green / yellow)

Добавить новый драйвер или нотификатор — дело нескольких строк: всё подключается через паттерн «Фабрика» (Factory pattern).

Быстрый обзор CRD

apiVersion: monitoring.licious.app/v1alpha1
kind: EndpointMonitor
metadata:
  name: my-check
spec:
  driver: http-json                 # см. таблицу выше
  endpoint: https://api.example.com/v1/status
  checkInterval: 30                 # секунды
  httpJsonCheck:                    # блок, специфичный для драйвера
    expectedStatusCode: 200
    jsonAssertions:
      status: "UP"
      version: "v1.2.3"
  notify:
    slack:
      enabled: true
      webhookUrl: https://hooks.slack.com/services/XXX/YYY/ZZZ
      alertOn:                       # необязательно — по умолчанию ["failure"]
        - success
        - failure

Основные поля spec (сокращённо):

driver – какую реализацию пробы использовать
endpoint – URL/хост/кластер в зависимости от драйвера
checkInterval – интервал между проверками в секундах
notify – список из одного или нескольких нотификаторов (Slack, e-mail)
Блоки, специфичные для драйвера – например, httpJsonCheck для драйвера http-json

Полная схема описана в определениях типов Go.

Установка (одной командой)

kubectl apply -f https://raw.githubusercontent.com/iam404/endpoint-monitoring-operator/main/dist/install.yaml

Примеры для быстрого старта

1. Мониторинг DNS-резолвинга

kubectl apply -f examples/dns.yaml

2. Глубокая проверка работоспособности JSON-эндпоинта

kubectl apply -f examples/http-json.yaml

Дорожная карта

  • Дополнительные нотификаторы: PagerDuty, OpsGenie, Webhook

  • Экспорт метрик в Prometheus (через CRD)

  • Сценарии синтетических транзакций (например, вход + оформление заказа)

  • Беспарольные учётные данные через CSI-драйверы

  • Новые драйверы: Redis, MySQL, Kafka

Не стесняйтесь открывать Issue или Pull Request!

Участие в разработке

  1. Сделайте форк и клонируйте репозиторий.

  2. Создайте ветку для новой функции.

  3. Запустите make test и golangci-lint run.

Отправьте Pull Request — любой вклад приветствуется!

Подробности — в файле CONTRIBUTING.md.

© 2026 meganuke