1. Интеграция Actuator в учебный проект
Для начала нам нужно подключить Spring Boot Actuator к нашему уже существующему (или новому) проекту. Подключение Actuator – это, по сути, добавление зависимости.
Если вы используете Maven, добавьте следующую зависимость в pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Если вы работаете с Gradle, добавьте эту строку в ваш build.gradle:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
После этого обновите зависимости вашего проекта. Actuator включен! Легко же, правда? Настоящая магия Spring!
2. Проверка доступности эндпоинтов
После добавления зависимости Actuator, запустите свое приложение. По умолчанию Actuator предоставляет несколько стандартных эндпоинтов для мониторинга.
Например:
/actuator/health— состояние приложения./actuator/info— информация о приложении./actuator/metrics— различные метрики производительности.
Попробуем открыть /actuator/health через браузер или Postman. Если вы видите что-то вроде {"status":"UP"}, то Actuator успешно интегрировался в проект.
Секретный путь к счастью: настройка базового пути эндпоинтов
Вдруг вы думаете — "А можно ли сделать путь к этим эндпоинтам более удобным или, наоборот, защититься от чрезмерно любопытных глаз?" — да, это возможно. В файле application.properties можно изменить базовый путь:
management.endpoints.web.base-path=/my-actuator
Теперь все ваши эндпоинты будут доступны, например, по адресу /my-actuator/health.
3. Просмотр метрик
Работа с /metrics
Эндпоинт /actuator/metrics — это настоящая сокровищница. Здесь вы найдете метрики о количестве активных потоков, использовании памяти, нагрузке на CPU и многом другом. Наберите в браузере или Postman:
http://localhost:8080/actuator/metrics
Список метрик может быть внушительным. Вот пример того, что вы могли бы увидеть:
{
"names": [
"jvm.memory.used",
"jvm.memory.max",
"process.cpu.usage",
"system.cpu.usage",
"http.server.requests",
...
]
}
Вы можете запросить детальную информацию для конкретной метрики. Например, чтобы увидеть, сколько памяти использует JVM, запросите:
http://localhost:8080/actuator/metrics/jvm.memory.used
И вы получите что-то вроде этого:
{
"name": "jvm.memory.used",
"measurements": [
{
"statistic": "VALUE",
"value": 12345678
}
],
"availableTags": [
{
"tag": "area",
"values": ["heap", "nonheap"]
}
]
}
"Ага, я теперь знаю, сколько памяти уходит!" — скажете вы. И будете правы.
Практическое задание: включение эндпоинтов
Не все эндпоинты Actuator включены по умолчанию. Давайте активируем дополнительные метрики. В application.properties добавьте следующую настройку:
management.endpoints.web.exposure.include=*
Теперь доступны все эндпоинты Actuator. Попробуйте обновить список доступных метрик, запросив /actuator.
4. Анализ метрик в реальном времени
Представьте, что вы администратор (или "Властелин метрик"), и ваше приложение внезапно начало тормозить. Вы можете проверить /metrics и выяснить, есть ли увеличенная нагрузка. Например, метрика http.server.requests покажет вам, какие запросы вызывают нагрузку.
Вот как это может выглядеть:
{
"name": "http.server.requests",
"measurements": [
{
"statistic": "COUNT",
"value": 120
},
{
"statistic": "MAX",
"value": 150.5
}
],
"availableTags": [
{
"tag": "method",
"values": ["GET", "POST"]
},
{
"tag": "uri",
"values": ["/api/users", "/api/orders"]
}
]
}
Вы можете узнать, сколько запросов, например, обрабатывается на /api/users. Полезно? Определенно.
5. Практическое задание: настройка кастомной метрики
Итак, самое время добавить немного импровизации и настроить собственную метрику. Представьте, что вам нужно следить за количеством товаров в корзине пользователей.
Добавьте следующий код в один из ваших компонентов:
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;
@Component
public class CartMetrics {
private final MeterRegistry meterRegistry;
public CartMetrics(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
public void incrementCartItems(int items) {
meterRegistry.counter("cart.items.added").increment(items);
}
}
Теперь вызовите метод incrementCartItems() при добавлении товаров в корзину. Метрика cart.items.added начнет отслеживать общее количество добавленных товаров. Вы можете проверить её через:
http://localhost:8080/actuator/metrics/cart.items.added
6. Улучшение через наблюдение
На основании полученных данных в реальном времени можно принимать решения. Например, если вы увидите, что метрика jvm.memory.used постоянно близка к максимуму, возможно, стоит переработать логику работы с большими объектами или увеличить размеры heap для JVM.
Если метрика http.server.requests показывает аномально низкое время обработки — это хороший сигнал, что ваше приложение справляется с нагрузкой. Но если наоборот, время увеличивается, возможно, пора задуматься о кэшировании или масштабировании.
Задание для самостоятельной работы
Теперь, когда вы эксперт в настройке и использовании метрик, попробуйте сделать следующее:
- Настройте Actuator в своем учебном проекте.
- Активируйте все эндпоинты.
- Найдите и проанализируйте три ключевые метрики приложения (например, производительность запросов, использование памяти и загрузку CPU).
- Настройте кастомную метрику для отслеживания какого-либо важного аспекта вашего приложения (например, количество выполненных пользовательских операций за день).
- Попробуйте найти проблемы в вашем приложении, используя метрики.
И не забудьте прочувствовать себя настоящим супергероем мониторинга!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ