Метрики Prometheus
InfraVision поддерживает опциональное предоставление нативных метрик Prometheus из приложения. Prometheus — это популярная платформа метрик временных рядов, используемая для мониторинга.
InfraVision предоставляет метрики по HTTP-точке /metrics, например https://netbox.local/metrics. Предоставление метрик можно переключить с помощью параметра конфигурации METRICS_ENABLED. По умолчанию метрики не предоставляются.
Типы метрик
InfraVision использует библиотеку django-prometheus для экспорта различных типов метрик, включая:
- Счётчики вставок, обновлений и удалений для каждой модели
- Счётчики запросов для каждого представления
- Гистограммы задержки запросов для каждого представления
- Запросы REST API (по эндпоинту и методу)
- Запросы GraphQL API
- Гистограммы размера тела запроса
- Гистограммы размера тела ответа
- Счётчики кодов ответа
- Счётчики подключений к базе данных, выполнения и ошибок
- Счётчики попаданий, промахов и инвалидации кэша
- Гистограммы задержки Django middleware
- Другие метрики метаданных, связанные с Django
Для получения исчерпывающего списка предоставляемых метрик посетите точку /metrics на вашем экземпляре InfraVision.
Примечания по многопроцессорности
При развёртывании InfraVision в многопроцессорном режиме (например, запуск нескольких воркеров Gunicorn) клиентская библиотека Prometheus требует использования общего каталога для сбора метрик от всех рабочих процессов. Чтобы настроить это, сначала создайте или определите локальный каталог, к которому рабочие процессы имеют доступ на чтение и запись, а затем настройте вашу службу WSGI (например, Gunicorn) для определения этого пути как переменной окружения prometheus_multiproc_dir.
Внимание
Если наличие точных долгосрочных метрик в многопроцессорной среде критично для вашего развёртывания, рекомендуется использовать библиотеку uwsgi вместо gunicorn. Проблема заключается в том, как gunicorn отслеживает рабочие процессы (по сравнению с uwsgi), что помогает управлять файлами метрик, создаваемыми вышеуказанными конфигурациями. Если вы используете InfraVision с gunicorn в контейнеризированной среде, следуя методологии один-процесс-на-контейнер, вам, вероятно, не нужно переходить на uwsgi. Более подробную информацию можно найти в issue #3779.