«1. Введение

Одной из многих замечательных особенностей Spring Boot является набор встроенных приводов. Эти приводы обеспечивают простой способ мониторинга и управления практически каждым аспектом приложения Spring Boot.

В этом руководстве мы рассмотрим использование привода метрик для создания автономного решения для мониторинга приложений Spring Boot.

2. База данных метрик

Первая часть мониторинга приложений Spring Boot — это выбор базы данных метрик. По умолчанию Spring Boot настроит реестр метрик Micrometer в каждом приложении.

Эта реализация по умолчанию собирает предопределенный набор показателей приложения, таких как использование памяти и ЦП, HTTP-запросы и некоторые другие. Но эти метрики хранятся только в памяти, то есть они будут потеряны при каждом перезапуске приложения.

Чтобы создать автономное решение для мониторинга, мы должны сначала выбрать базу данных метрик, которая находится вне приложения Spring Boot. В следующих разделах будут обсуждаться лишь некоторые из доступных вариантов самостоятельного размещения.

Обратите внимание, что каждый раз, когда Spring Boot обнаруживает другую базу данных метрик в пути к классам, он автоматически отключает реестр в памяти.

2.1. InfluxDB

InfluxDB — это база данных временных рядов с открытым исходным кодом. Самый быстрый способ начать работу с InfluxDB — запустить его локально как контейнер Docker:

docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb

Обратите внимание, что при этом метрики будут храниться в локальном разделе /tmp. Это хорошо для разработки и тестирования, но не будет хорошим выбором для производственных сред.

После запуска InfluxDB мы можем настроить наше приложение Spring Boot для публикации в нем метрик, добавив соответствующую зависимость Micrometer:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-influx</artifactId>
</dependency>

Кроме того, нам нужно добавить новую запись в файл application.properties: ~ ~~

management.metrics.export.influx.uri=http://localhost:8086

По умолчанию имя базы данных установлено как mydb, тогда как имя пользователя и пароль остаются неустановленными.

Однако мы можем переопределить значения по умолчанию, используя специальные свойства:

management.metrics.export.influx.db=customDbName
management.metrics.export.influx.user-name=myUserName
management.metrics.export.influx.password=mySecret

InfluxDB не предоставляет собственный инструмент визуализации. Однако он предоставляет отдельный инструмент под названием Chronograph, который хорошо работает для визуализации данных InfluxDB.

2.2. Prometheus

Prometheus — это набор инструментов для мониторинга и оповещения с открытым исходным кодом, изначально созданный в SoundCloud. Он работает немного иначе, чем InfluxDB.

Вместо того, чтобы настраивать наше приложение для публикации метрик в Prometheus, мы настраиваем Prometheus для периодического опроса нашего приложения.

Во-первых, мы настраиваем наше приложение Spring Boot для предоставления новой конечной точки привода Prometheus. Мы делаем это, включив зависимость micrometer-registry-prometheus:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Это создаст новую конечную точку привода, которая выдает данные метрик в специальном формате, понятном Prometheus.

Далее нам нужно настроить Prometheus для опроса нашего приложения, добавив желаемую конфигурацию в файл prometheus.yml.

Следующая конфигурация указывает Prometheus опрашивать наше приложение каждые 5 секунд, используя новую конечную точку привода:

scrape_configs:
  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['127.0.0.1:8080']

Наконец, мы можем запустить локальный сервер Prometheus с помощью Docker. Это предполагает, что наш пользовательский файл конфигурации находится в локальном файле /etc/prometheus/prometheus.yml:

docker run -d \
--name=prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml

Prometheus предоставляет собственный инструмент визуализации для просмотра собранных метрик. Доступ к нему можно получить по URL-адресу http://localhost:9090/.

2.3. Graphite

Graphite — еще одна база данных временных рядов с открытым исходным кодом. Его архитектура немного сложнее, чем у других баз данных, которые мы рассматривали, но с Docker легко запустить экземпляр локально:

Затем мы можем настроить Spring Boot для публикации метрик в нашем экземпляре, добавив микрометр -registry-graphite зависимость:

docker run -d \
 --name graphite \
 --restart=always \
 -p 80:80 \
 -p 2003-2004:2003-2004 \
 -p 2023-2024:2023-2024 \
 -p 8125:8125/udp \
 -p 8126:8126 \
 graphiteapp/graphite-statsd

Помимо добавления свойств конфигурации в application.properties:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-graphite</artifactId>
</dependency>

Как и Prometheus, Graphite включает собственную панель визуализации. Он доступен по адресу http://localhost/.

management.metrics.export.graphite.host=127.0.0.1
management.metrics.export.graphite.port=2004

3. Инструменты визуализации

«Когда у нас есть решение для хранения метрик вне нашего приложения Spring Boot, следующим решением будет то, как мы хотим визуализировать данные.

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

3.1. Grafana

Grafana — это инструмент аналитики и мониторинга с открытым исходным кодом. Он может подключаться ко всем ранее упомянутым базам данных, а также ко многим другим.

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

Чтобы запустить Grafana локально, мы можем запустить ее с помощью Docker:

Теперь мы можем получить доступ к домашней странице Grafana по URL-адресу http://localhost:3000/.

docker run -d -p 3000:3000 grafana/grafana

На этом этапе нам нужно настроить один или несколько источников данных. Это может быть любая из баз данных метрик, обсуждавшихся ранее, или множество других поддерживаемых инструментов.

После настройки источника данных мы можем создать новую панель мониторинга или импортировать панель, которая делает то, что нам нужно.

4. Заключение

В этой статье мы рассмотрели создание собственного решения для мониторинга приложений Spring Boot.

Мы рассмотрели три базы данных метрик, которые поддерживает Spring Boot, и увидели, как запускать их локально.

Мы также кратко рассмотрели Grafana, мощный инструмент визуализации, который может отображать данные метрик из различных источников.

«