Как превратить Zabbix и Prometheus в data provider с понятным интерфейсом
В компании существует развитая система инфраструктурного мониторинга на базе Zabbix и Prometheus-экспортеров. Данные о состоянии серверов, сетей и приложений постоянно собираются и хранятся. Эти данные потенциально ценны для множества внутренних команд:
До создания сервиса каждая интеграция превращалась в исследовательский проект. Разработчик, желающий получить, например, загрузку CPU конкретного сервера, сталкивался с рядом препятствий:
В результате процесс растягивался на недели, а часто команды и вовсе отказывались от интеграции, ища обходные пути или разворачивая собственные "коробочные" решения для сбора тех же данных, что вело к дублированию инфраструктуры и дополнительным затратам.
Назрела очевидная потребность в создании единого интеграционного слоя, который превратил бы инфраструктурный мониторинг из закрытой системы в поставщика данных (data provider) с понятным и стабильным интерфейсом.
Был разработан микросервис, предоставляющий унифицированный HTTP API для доступа к метрикам мониторинга. Ключевая идея — абстрагировать потребителей от сложности нижележащих систем (Zabbix, Prometheus, экспортеры) и языка PromQL.
Вдохновляясь подходом Zabbix (где ключи выглядят как system.cpu.util), был введен аналогичный, но расширенный стандарт именования метрик:
zabbix.cpu.util_percent
node_exporter.disk.latency
Потребитель может запросить все метрики, доступные по конкретному хосту.
Ответ возвращает полный перечень метрик в точечной нотации для данного узла.
Запрос метрики за определенный период (временные метки в Unix-time).
Поддерживается запрос нескольких метрик и нескольких хостов в одном вызове.
Если параметры time_start и time_end опущены, API возвращает только последнее актуальное значение по метрике.
Поддерживается дополнительный параметр filter для более тонкой выборки данных (например, по конкретному диску или сетевому интерфейсу).
Сердце системы — база данных PostgreSQL, хранящая маппинг (словарь соответствий):
Микросервис выступает в роли прокси-слоя между потребителями и системами мониторинга.
Проверка входных данных на корректность
Защита от дестабилизации системы
Redis для снижения нагрузки
Защита от "выкачивания всего"
Было: недели → Стало: часы
Не нужно быть экспертом мониторинга
Данные из всех сегментов сети через единый эндпоинт
Изменения в мониторинге не ломают интеграции
Этот проект превратил инфраструктурный мониторинг из закрытой технической системы в полноценную платформу данных, доступную для всего остального ИТ-ландшафта компании.