March 18

Сбор метрик 3X-UI, интеграция с Prometheus и визуализация данных в Grafana

Лирическое отступление: обусловимся на том, что я совсем не DevOps инженер, а скорее недо-программист и мои познания в мире развертывания на большом количестве продакшн серверов заканчиваются на рассылке команд, или запуске Docker-контейнеров. Не бейте палками, если решите что мой способ развертывая инфраструктуры сбора метрик не самый лучший.

Инструмент для сбора и экспорта метрик 3X-UI

Представляю вашему вниманию 3X-UI Metrics Exporter — удобный и гибкий инструмент для сбора и экспорта метрик в Prometheus.
Экспортер был написан мною как небольшая пародия на уже имеющийся https://github.com/kutovoys/marzban-exporter, тем не менее, аналогов для своих нужд на просторах Github я не обнаружил.

https://github.com/hteppl/3x-ui-exporter

Инструмент обязательно нужен для тех, кому важно анализировать тенденцию использования продуктов, иметь представление о текущей нагрузке в виде пользователей, а так-же своевременно и оперативно реагировать на аномалии в работе сервиса.
3X-UI Metrics Exporter предотставлят функционал для отслеживания количества пользователей, активность пользователей, потребление трафика, общую нагрузку на сервер + немного системной информации для общего понимания.

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

Установка 3X-UI Metrics Exporter предельно проста. Для удобства, я подготовил несколько вариантов по установке:

  • Ручная установка
  • Автоматическая установка + системный процесс
  • Docker Image

В целом не вижу смысла рассказывать про каждый вид установки отдельно, о конфигурации и параметрах запуска можно прочитать в репо проекта https://github.com/hteppl/3x-ui-exporter. Далее я рассмотрю автоматическую установку и базовые настройки конфига.

Автоматическая установка

Для автоматической установки будем пользоваться командой из репо проекта:

bash <(curl -fsSL raw.githubusercontent.com/hteppl/3x-ui-exporter/main/install.sh)

Инсталлер сам в состоянии определить ваш Linux дистрибутив и загрузить нужную версию исполняемого файла вместе с конфигом, далее последуют наводящие вопросы про URL панели, порт и пароль для входа:

Процесс настройки

После завершения настройки, экспортер само собой стоит проверить на работоспособность. Сначала проверяем процесс:

systemctl status x-ui-exporter.service

Процесс экспортера в systemctl

Далее идем по адресу: http://<айпи-вашей-машины>:9090/metrics
И убеждаемся что страница открывается, а в самом низу есть данные, подписанные префиксом x_ui.

Пример выгруженных метрик

На данном этапе можно сказать, что базовая настройка метрик завершена, но я бы все-таки советовал или закрыть порт метрик (9090 по умолчанию) через доступ по айпи, или настроить базовую авторизацию на странице. Подробнее можно прочитать в репо проекта.

Интеграция и выгрузка в Prometheus

Опять-же, не буду рассказывать как ставить Prometheus и делать его настройку, статья немного не об этом. Для получения данных метрик достаточно отредактировать конфиг prometheus.yml и найти блок scrape_configs

scrape_configs:
  - job_name: "x-ui_exporter"
    static_configs:
      - targets: [ "<exporter-ip-1>:9090" ]
        labels:  
          name: "my_server_1"
      - targets: [ "<exporter-ip-2>:9090" ]
        labels:  
          name: "my_server_2"

По аналогии можем добавить все сервера, как нам потребуется. После изменения конфига не забудьте перезапустить Prometheus.

Проверить получение данных в Prometheus можно на странице
http://<prometheus-ip>:9090/targets

Кстати, этот порт тоже совтую закрыть или использовать реверс-прокси, по аналогии с серверами метрик.

Построение графиков Grafana

Если все настроено и работает правильно, то можно приступать к самомому интересному - визуализации получаемых данных в интерактивных дашбордах графаны.

Для своих заказчиков я реализовал несколько дашбордов с графиками, которые визуализируют основные данные, получаемые из метрик:

Визуализация количества пользователей

В данном примере была использована метрика x_ui_total_online_users с различными базовыми агрегирующими функциями, по типу sum или avg_over_time. Так-же ниже собрал распределние пользователей и максимальные значения по параметрам:

Распределние пользователей

Не только онлайн. В данных визуализациях постарался собрать основные данные по серверам одного из крупных проектов (количество серверов немного не сопадает с первым скрином, упала одна выгрузка).

Общие данные по серверам

Тут уже используется не только 3X-UI Exporter, а еще и Node Exporter, а кто говорил что данные нельзя собирать сразу с нескольких экспортеров?

Общие данные по серверам

Нижняя часть на фото - те самые метрики 3X-UI Exporter.

Текущая нагрузка на сеть

Это опять-же небольшое смешение экспортеров, данные по нескольким метрикам можно использовать в 1 визуализации.

Итоги

3X-UI Metrics Exporter — по моему мнению, достаточно удобный инструмент для сбора метрик, позволяющий мониторить активность пользователей и нагрузку на сервер. Установка достаточно простая даже для обычных пользователей, а так-же доступка в нескольких вариантах, включая автоматическую настройку. Интеграция с Prometheus выполняется через стандартную конфигурацию, а визуализацию данных можно построить где угодно, даже не обязательно в Grafana.

🥕 Связаться со мной: @morkowka_22
Могу помочь построить такие-же или подобные графики под ваши нужды.

Кстати, лично от себя рекомендую использовать сервера TimeWeb Cloud, достаточно приличная контора, которая показала себя с лучшей стороны за несколько лет использования.

Поддержать автора

https://pay.cloudtips.ru/p/32741af9