Метрики высоконагруженных сервисов
Метрики — это числовые значения, которые отражают состояние системы или приложения в определенный момент времени или в течение определенного периода времени. В высоконагруженных сервисах метрики могут использоваться для отслеживания производительности, доступности и надежности системы.
Golang, Prometheus и Grafana — это технологии, которые могут использоваться для мониторинга высоконагруженных сервисов. Golang — это язык программирования, который позволяет разрабатывать высокопроизводительные приложения. Prometheus — это система мониторинга, которая позволяет собирать и агрегировать метрики от различных сервисов. Grafana — это инструмент визуализации данных, который позволяет отображать метрики в виде графиков и дашбордов.
Prometheus
Prometheus использует стратегию pull для сбора метрик. Это означает, что Prometheus запрашивает метрики у приложений и сервисов, которые настроены для предоставления метрик на определенных эндпоинтах.
В случае с приложением на Go, которое мы написали в предыдущем примере, мы настроили HTTP-сервер на эндпоинте/metrics, чтобы позволить Prometheus запрашивать метрики из нашего приложения. Prometheus будет запрашивать метрики у нашего приложения на этом эндпоинте в определенные интервалы времени, чтобы собрать их и сохранить в свою базу данных.
Затем мы можем использовать Grafana или другой инструмент визуализации, чтобы отображать метрики, которые были собраны Prometheus, в удобном виде для мониторинга и анализа производительности нашего приложения.
Для запуска prometheus используй докер:
docker run -d --name prometheus -p 9090:9090 prom/prometheus
Пример работы golang с prometheus ты можешь найти по ссылке.
Grafana
Когда мы говорим о метриках в контексте мониторинга и анализа производительности приложений, мы обычно имеем в виду числовые данные, которые представляют различные аспекты работы приложения.
В примере с приложением на Go мы создали три различных типа метрик:
-
Счетчик (counter) — это метрика, которая увеличивается на один при каждом событии, которое мы хотим отслеживать. Например, мы можем создать счетчик для отслеживания количества запросов, получаемых нашим сервером на каждом эндпоинте.
-
Мерный прибор (gauge) — это метрика, которая может увеличиваться и уменьшаться в зависимости от текущего значения. Например, мы можем создать мерный прибор для отслеживания количества активных пользователей на нашем сайте в данный момент.
-
Гистограмма (histogram) — это метрика, которая используется для измерения распределения значений. Например, мы можем создать гистограмму для измерения времени ответа на запросы нашего сервера и отслеживания различных процентилей времени ответа.
Каждая метрика имеет имя, которое должно быть уникальным в рамках реестра Prometheus, и помогает идентифицировать, какие данные мы собираем. Мы также можем определить дополнительные метаданные, такие как описание метрики и единицы измерения, которые могут быть полезны для анализа и визуализации данных.
Когда мы создаем и регистрируем метрики в реестре Prometheus, мы можем использовать их для отслеживания производительности нашего приложения и сбора данных о его работе. Затем мы можем использовать инструменты визуализации, такие как Grafana, чтобы визуализировать эти метрики и лучше понимать работу нашего приложения.
Чтобы настроить подключение Prometheus к Grafana, необходимо выполнить следующие шаги:
-
Добавь конфигурационный файл prometheus.yml в Prometheus (/etc/prometheus/prometheus.yml)
-
Для запуска grafana используй докер
docker run -d --name grafana -p 3000:3000 grafana/grafana -
Добавь источник данных Prometheus в Grafana.
Для этого необходимо открыть интерфейс Grafana и зайти в раздел Data Sources. Нажми кнопку Add data source и выбери тип источника данных Prometheus. Затем введи URL-адрес и порт сервера Prometheus в соответствующие поля и нажми кнопку Save & Test. Если всё настроено правильно, ты увидишь сообщение Data source is working.
Для правильного подключения используй имя контейнера или host-докера
Для MacOs хост будет host.docker.internal. Лучше объединить контейнеры в одну сеть и обращаться по имени контейнера.
- Создай дашборд в Grafana.
Для отображения метрик в удобной форме в Grafana необходимо создать дашборд. Дашборд — это страница, на которой можно настроить и отображать графики и другие элементы управления для метрик.
- Добавь графики на дашборд.
Чтобы отобразить данные метрик в графическом виде, нужно добавить графики на дашборд и настроить их параметры. Для этого на странице дашборда нажми кнопку Add panel и выбери тип графика, который хочешь добавить. Затем настрой параметры графика, включая имя метрики, выбор агрегирующей функции, интервал времени, на котором отображаются данные, и т. д.
- Сохрани дашборд.
После того как дашборд будет настроен и графики будут добавлены, сохрани дашборд в Grafana, чтобы он стал доступен для просмотра. Для этого на странице дашборда нажми кнопку Save и введи имя дашборда. Теперь ты можешь просматривать метрики в удобной форме на созданном дашборде.
Схема работы связки:
Сервис на Go генерирует данные, которые доступны по http-хендлеру http://localhost:8080/metrics. Prometheus работает по стратегии pull, то есть самостоятельно ходит в наш сервис и занимается сбором метрик, интервал и эндпоинт указывается в конфигурации Prometheus. Далее Grafana обращается в Prometheus за данными наших метрик и отображает в виде графика.