Prometheus и Grafana: принципиально новый способ мониторинга работы приложения Spring Boot
Узнайте, как настроить и использовать Prometheus и Grafana для сбора показателей Вашего приложения Spring Boot, а затем эффективно их визуализировать
Представьте, что у Вас есть приложение Spring Boot производственного уровня, которое одновременно обслуживает тысячи пользователей. Без должного мониторинга Вы никогда не сможете получить подробную информацию о его производительности, работоспособности приложения и о том, есть ли в нем какие-либо глубинные проблемы или нет. Именно здесь на помощь и приходит мониторинг приложения.
Prometheus и Grafana предлагают достойной решение по мониторингу приложений Spring Boot. Prometheus собирает метрики и управляет оповещениями, а Grafana визуализирует данные и управляет оповещениями. Вместе они помогают обнаружить и устранить проблемы еще до того, как они затронут конечных пользователей.
В этом блоге мы рассмотрим процесс мониторинга приложений Spring Boot с помощью Prometheus и Grafana, а также все шаги, связанные с настройкой этих инструментов, и их преимущества.
Введение в Prometheus
Prometheus - это популярная система мониторинга и оповещения с открытым исходным кодом. Она собирает, хранит и анализирует метрики из различных источников, таких как приложения, сервисы, операционные системы и аппаратные устройств и позволяет получить представление о производительности и состоянии системы в целом.
Введение в Grafana
Grafana - это open-source инструмент для визуализации данных, мониторинга производительности системы и устранения неполадок. Для визуализации метрик из таких источников, как Prometheus, Elasticsearch, InfluxDB и CloudWatch он создает специальные панели, которые Вы можете настраивать с помощью графиков, таблиц, диаграмм и карт в соответствии с Вашими потребностями.
Необходимые условия
Для работы у Вас уже должно быть следующее:
- Работающее приложение Spring Boot для мониторинга
- Docker для запуска образов Prometheus и Grafana
Настройка проекта Spring Boot для работы с Prometheus и Grafana
В файл pom.xml Вашего проекта spring boot необходимо добавить зависимости, приведенные ниже:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <scope>runtime</scope> </dependency>
- Зависимость Actuator позволяет использовать конечные точки, которые предоставляют информацию о состоянии Вашего приложения, метриках, конфигурации и мониторинге.
- Если в Вашем проекте нет зависимости Spring Web, добавьте ее;
- Зависимость Micrometer используется для настройки приложений Spring Boot на передачу метрик в формате, который Prometheus может легко считывать и эффективно хранить.
После добавления этих зависимостей, когда Вы запускаете приложение Spring Boot и вызываете конечную точку http://localhost:8080/actuator, Вы увидите следующее:
Включите все конечные точки, добавив приведенную ниже конфигурацию в файл application.yml Вашего проекта spring boot:
management:
endpoints:
web:
exposure:
include: '*'
Теперь, если Вы будете вызывать конечную точку http://localhost:8080/actuator , В увидите список всех доступных точек Аctuator.
Поскольку нам нужна только http://localhost:8080/actuator/prometheus , мы можем включить ее, добавив в файл application.yml проекта Spring Boot следующую конфигурацию:
management:
endpoints:
web:
exposure:
include: [ "prometheus" ]
Теперь, когда Вы вызовите конечную точку http://localhost:8080/actuator/prometheus , Вы получите метрики в формате, подходящем для Prometheus.
Вот, собственно говоря, и все!
Для мониторинга работы проекта Spring Boot с помощью Prometheus и Grafana нам просто нужно настроить все эти опции.
Установка Prometheus и Grafana с помощью Docker
Файл Docker Compose настраивает контейнер Prometheus на сбор метрик из приложения Spring Boot с помощью файла prometheus.yml. Он также настраивает и контейнер Grafana, который использует файл datasources.yml для определения Prometheus в качестве источника данных для анализа собранных метрик.
Убедитесь в том, что путь к файлам prometheus.yml и datasources.yml указан правильно, в полном соответствии с путем к файлу docker-compose.yml.
Создайте файл docker-compose.yml:
version: '3.7'
services:
prometheus:
image: prom/prometheus:v2.44.0
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:9.5.2
container_name: grafana
ports:
- "3000:3000"
restart: unless-stopped
volumes:
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
Создайте файл prometheus.yml:
scrape_configs:
- job_name: 'MyAppMetrics'
metrics_path: '/actuator/prometheus'
scrape_interval: 3s
static_configs:
- targets: ['host.docker.internal:8080']
labels:
application: 'My Spring Boot Application'
Эта конфигурация предписывает Prometheus задействовать конечную точу http://localhost:8080/actuator/prometheus по адресу host.docker.internal:8080 каждые 3 минуты. Метка приложения используется для идентификации приложения в Prometheus.
Создайте файл datasources.yml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
Указанный источник данных «приказывает» Grafana подключаться к Prometheus с помощью http://prometheus:9090 и использовать его в качестве источника данных по умолчанию. Вы также можете добавить источник данных Prometheus вручную после запуска контейнера Grafana.
Давайте запустим сервисы, выполнив приведенную ниже команду, в которой находится файл docker-compose.yml:
$ docker-compose up
Теперь Prometheus доступен через http://localhost:9090 , а Grafana – через http://localhost:3000.
Изучаем Prometheus
На основе настроенных интервалов сервер Prometheus периодически запрашивает у настроенных конечных точек их метрики, которые хранятся в базе данных временных рядов.
Prometheus предоставляет богатый язык запросов под названием PromQL. На рисунке, представленном ниже, показано, как получить метрики настроенного приложения Spring Boot.
В дополнение к возможностям мониторинга Prometheus предлагает надежную поддержку оповещений, которая немедленно уведомляет Вас в том случае, когда определенные показатели превышают пороговое значение. Вы можете настроить отправку оповещений по различным каналам, таким как электронная почта, платформы мгновенного обмена сообщениями или конечные точки webhook.
Изучаем Grafana
При первом входе в Grafana используйте имя пользователя и пароль по умолчанию - «admin». Вам будет предложено сбросить пароль, поэтому введите свой новый пароль и подтвердите его.
Grafana способна подключаться к различным источникам данных, включая базы данных, базы данных временных рядов, такие как Prometheus, облачные платформы и API. Она позволяет запрашивать и агрегировать данные из выбранных Вами источников.
С помощью Grafana Вы можете создавать настраиваемые дашборды, состоящие из панелей. Grafana предлагает широкий спектр типов панелей, таких как графики, одиночные данные, таблицы, тепловые карты и другие.
NB:
- Поскольку мы уже настроили источник данных Prometheus в файле docker-compose.yml (в процессе создания контейнера Docker ), большом нет необходимости в добавлении источника данных Prometheus в Grafana. Вы можете создавать дашборд, используя предварительно настроенный источник данных Prometheus.
- Ввиду использования представления Docker в Grafana Вы заметите разницу в интерфейсе Grafana.
У Grafana также есть небольшой маркетплейс, предлагающий широкий выбор шаблонов дашбордов. Как правило, они представлены в формате файлов JSON или как ID дашбордов Grafana.
Кроме того, Grafana предлагает своим пользователям встроенную систему оповещений, позволяющую устанавливать правила и условия на основе отслеживаемых метрик. При превышении определенных пороговых значений Grafana отправит Вам уведомление. Это может быть реализовано через электронную почту, Slack, PagerDuty и т.д.
Ключевые выводы
Prometheus – высокомасштабируемое и гибкое решение по мониторингу работы системы, а Grafana –мощный инструмент визуализации данных.
С помощью Prometheus Вы можете собирать метрики производительности работы Вашего приложения. Grafana же идеально подходит для их эффективной визуализации. С помощью Spring Boot Actuator Вы можете получить доступ к таким метрикам, как среднее время отклика или количество ошибок. Всех их можно собирать и хранить с помощью Prometheus.
Выигрышная комбинация Prometheus + Grafana является идеальным решением по мониторингу производительности работы приложения Spring Boot. С его помощью Вы можете отслеживать работоспособность системы, выявлять проблемы и определять тенденции.












