Почему ещё один монитор?
Традиционные инструменты проверки доступности лишь сообщают, открыт ли порт. Endpoint-Monitoring Operator работает прямо внутри кластера, что позволяет ему:
-
Обращаться к реальным бизнес-адресам вроде
/v1/status, которые не опубликованы во внешнюю сеть. -
Проверять содержимое JSON-полей, а не только код ответа
HTTP 200. -
Мониторить распределённые системы (Trino, OpenSearch) и сетевые примитивы (DNS, TCP, Ping).
-
Отправлять уведомления через подключаемые (pluggable) нотификаторы — сегодня это Slack, в ближайших планах e-mail и PagerDuty.
Поддерживаемые драйверы
| Драйвер | Типичный сценарий |
|---|---|
|
Базовая проверка кода ответа (200, 302 и т.д.) |
|
Валидация JSON-тела и кода ответа |
|
Проверка того, что сервис слушает порт |
|
Проверка того, что домен резолвится в ожидаемые IP-адреса |
|
Простая проверка ICMP-доступности |
|
Проверка готовности координатора Trino (READY) |
|
Проверка состояния кластера ( |
Добавить новый драйвер или нотификатор — дело нескольких строк: всё подключается через паттерн «Фабрика» (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!
Участие в разработке
-
Сделайте форк и клонируйте репозиторий.
-
Создайте ветку для новой функции.
-
Запустите
make testиgolangci-lint run.
Отправьте Pull Request — любой вклад приветствуется!
Подробности — в файле CONTRIBUTING.md.