Spring boot actuator что это
Spring Boot Actuator
Spring Boot Actuator — это библиотека, которая позволяет мониторить приложение в production-среде (хотя не обязательно в ней). С помощью нее можно посмотреть кучу параметров: характеристики системы, на которой работает приложение, какие в приложении создаются бины, различные метрики и т.п.
Причем делать для этого ничего не надо, просто включаете библиотеку в проект и готовы конечные точки (end points), выходя на которые можно мониторить данные. Например, по адресу /actuator/beans — список бинов.
Maven- зависимость
Примеры конечных точек
Давайте создадим простой веб-проект и посмотрим, что выводит Spring по зарезервированным Actuator адресам по умолчанию. (Проект доступен на GitHub, если делаете с нуля — включите spring-boot-starter-web зависимость, чтоб при запуске приложения стартовал веб-сервер).
Выше перечислены все доступные конечные точки — enabled и exposed одновременно. Точка enabled — значит существует бин с такими данными, создающийся в контексте приложения. В Spring Boot 2 по умолчанию все точки enabled. Но почему же мы видим только две в вышеприведенном JSON: health и info?
Потому что для доступа к точке она должна быть еще exposed (видна). В Spring Boot 2 по умолчанию только две точки exposed через http. Чтобы сделать доступными дополнительные точки, надо в файле application.properties прописать:
Давайте проверим, что точки доступны.
health
Эта точка используется для тестирования: убедиться, что приложение доступно и не упало по какой-то причине:
Если какая-то из баз данных, например, упадет, по этому адресу будет показано сообщение об ошибке.
beans
Выдает список бинов, созданных в контексте приложения (список выдается огромный, в тут JSON сокращен):
Эта точка предназначена для вывода информации о приложении, по умолчанию здесь выдается пустой JSON. Давайте добавим сюда информацию:
Настройки конечных точек
Уже было показано, как сделать доступной дополнительную конечную точку (помимо трех, доступных по умолчанию).
По умолчанию все точки включены (enabled, то есть создаются в контексте приложения), но доступны только три из них.
Если большинство конечных точек вам не нужны, имеет смысл сделать все по умолчанию выключенными, а включать по отдельности:
можно изменить порт, на котором доступны конечные точки:
Изменить адрес конечной точки /actuator/health на /healthcheck:
Давайте протестируем конечную точку (и заодно тут присутствует тест единственного контроллера):
Эти две строки обнуляют насторки портов основного приложения и актуатора соответственно. В результате контроллер и актуатор будут запускаться на случайных (двух разных) портах:
Есть много способов обратитсья по http в тестовой среде, но мы используем:
Он подходит для тестирования, особенно тогда, когда с его помощью данные с конечной точки и берутся, что вполне вероятно.
Spring Actuator — для чего и как пользоваться
Сегодня поговорим о такой фиче спринга как Spring Actuator. Наверняка многие, кто изучает данный фреймворк столкнулись с этой библиотекой. А если это не так — то столкнетесь в будущем.
Spring Actuator, а если быть точным то Spring Boot Actuator — это подпроект Spring Boot. Он позволяет разработчику следить за состоянием своего приложение с минимальным вложением со стороны разработчика. В спринг актуатор входит множество ендпоинтов, которые Вы как разработчик можете вызвать и посмотреть различную статистику по своему веб приложению в реальном времени. От Вас ничего, кроме как подключить библиотеку не требуется.
Для тех, кто ничего не понял даю следующий пример. Допустим есть приложение интернет-магазин. Оно написано на java с использованием spring boot. В какой то момент времени Вы решаете, что было бы удобно увидеть количество пользователей на сайте, посмотреть нагрузку на базу данных, на ресурсы сервера. Возможно Вам нужно увидеть логи приложения, а лезть на сервер очень не хочется.
Было бы очень удобно просто перейти по какому нибудь урлу в браузере и просто увидеть цифры не так ли? Spring Boot Actuator это и предоставляет. Причем от Вас как от разработчика нужно только подключить библиотеку до приложения, подключить ендпоинты и наслаждаться результатом.
Довольно слов — давайте посмотрим на практике.
Возьмем простое Spring Boot веб приложение. Можете посмотреть тут. Теперь добавим к нему зависимости для актуатора:
Готово! Теперь в нашем приложении по умолчании будет доступно 3 эндпоинта:
Первый эндпоинт показывает пользователю все доступные сервисы актуатора. Вот, что у меня показало при переходе по адресу http://localhost:8080/actuator:
Если я перейду по http://localhost:8080/actuator/health то увижу там статус своего приложения. Когда оно запущено и все в порядке, то показывает:
Ссылка которая ведет по адресу http://localhost:8080/actuator/info показывает информацию по вашему приложению. Эту информацию она берет из файла pom.xml. Если в данном файле Вы указали версию приложению или другие свойства — вы их увидите по данному адресу.
Это не все, чтобы активировать другие эндпоинты Spring Actuator необходимо указать их в файле настроек спринг бут приложения: application.properties.
Я активирую все сервисы, чтобы не выбирать по одному. Для этого в application.properties нужно добавить строку:
Этого достаточно. Теперь, когда Вы попробуете перейти по адресу http://localhost:8080/actuator то увидите намного больше полезных ссылок:
Сервисов достаточно много и разбирать их все не вижу смысла. Их ссылки говорят сами за себя. Покажу лишь пример с метрикой — сервисом через который можно посмотреть количество активных сессий в приложении.
Переходим по адресу http://localhost:8080/actuator/metrics/ и видим набор данных:
Далее осталось выбрать интересующийся нас параметр и добавить его к общему пути. Например tomcat.sessions.created. Данный параметр покажет Вам сколько сессий было создано:
Как видим, в строке statistic 1 сессия. Теперь я открою приложение в другом браузере и вызову данный урл еще раз
Как видно на рисунке выше — количество сессий изменилось на 1. Вот и вся суть Spring Boot Actuator.
На реальных проектах к данному инструменту подключают еще несколько приложений и тогда не нужно переходить по адресам вручную, а приложения показывают цифры в виде графиков и диаграмм, что выглядит очень здорово. Но, можно мониторить приложение и так. Главное, что со стороны разработчика не нужно прикладывать значительных усилий.
Теперь Вы сможете владеть еще одним инструментом фреймворка Spring и пополнить свою базу знаний новыми технологиями.
Я записал пошаговое видео. В нем используется Spring Security, чтобы запаролить урлы, но пока на это можно не обращать внимания.
Администрирование и мониторинг приложений с помощью Azure Spring Boot Actuator
Эта статья применима к: ✔️ Java
После развертывания нового двоичного кода в приложении вы можете проверить его функциональность и просмотреть сведения о работающем приложении. В этой статье объясняется, как получить доступ к API из тестовой конечной точки, предоставленной Azure Spring Cloud, и как предоставить готовые функции для вашего приложения.
Предварительные требования
Проверка приложения с помощью тестовой конечной точки
Перейдите на Панель мониторинга приложений и выберите свое приложение, чтобы перейти на страницу обзора приложения.
На странице Обзор должен отображаться параметр Тестовая конечная точка. Выполните доступ к этой конечной точке из командной строки или браузера и наблюдайте за ответом API.
Обратите внимание на универсальный код ресурса (URI) тестовой конечной точки, который будет использоваться в следующем разделе.
Добавление зависимости для исполнителя
Чтобы добавить исполнителя в проект Maven, добавьте зависимость «Starter»:
Скомпилируйте новый двоичный код и разверните его в приложении.
Включение готовых компонентов
Конечные точки исполнителя позволяют отслеживать приложение и взаимодействовать с ним. По умолчанию приложение Spring Boot предоставляет конечные точки health и info для отображения произвольных данных приложения и сведений о работоспособности.
Перейдите в область Обзор приложения, нажмите кнопку Конфигурация в меню настройки и перейдите на страницу конфигурации переменных среды.
Добавьте указанные ниже свойства в формате «ключ:значение». В этом окружении откроется конечная точка Spring Actuator «env», «health», «info».
Нажмите кнопку Сохранить. Приложение автоматически перезапустится и загрузит новые переменные среды.
Теперь можно вернуться в область обзора приложения и подождать, пока состояние подготовки не изменится на «Выполнено». Будет больше одного работающего экземпляра.
После публикации приложения, конечные точки исполнителя также будут находится в общем доступе. Все конечные точки можно скрыть, удалив переменные среды management.endpoints.web.exposure.include и задав management.endpoints.web.exposure.exclude=*
Просмотр конечной точки исполнителя для просмотра сведений о приложении
Информацию о том, как просмотреть все встроенные конечные точки, см. в разделе Предоставление конечных точек.
Учебник по Spring Boot Admin
Контролируйте и управляйте своими приложениями Spring Boot с помощью приятного пользовательского интерфейса поверх конечных точек Spring Boot Actuator.
Spring Boot Actuator
Actuator: Spring Boot Production Monitoring and Management
Мониторинг и управление вашим работающим приложением с помощью Spring Boot Actuator 2.x. Соберите метрики или проверьте здоровье приложения.
Примечание переводчика. На Хабре есть аналогичная статья:
Введение в Spring Boot Actuator
Spring Boot Admin
Actuator является отличным и мощным инструментом, кроме того, его конечные точки легко и удобно использовать с помощью другого приложения — вы просто используете вызов REST-сервиса. Однако человеку использовать Actuator не очень удобно. Для пользователя гораздо проще иметь хороший пользовательский интерфейс, который можно использовать для просмотра всех данных мониторинга и управления вашим приложением. Это именно то, для чего служит Spring Boot Admin. Он предоставляет вам удобную прослойку пользовательского интерфейса поверх конечных точек Actuator с несколькими дополнительными функциями сверх того.
Spring Boot Admin не является модулем, предоставленным командой Spring, он был создан компанией под названием Codecentric. Тем не менее, его код общедоступен на Github и является бесплатным.
Клиент и сервер
В отличие от Actuator, Spring Boot Admin фактически состоит из двух частей — клиентской и серверной.
Серверная часть содержит пользовательский интерфейс администратора и работает независимо от отслеживаемых приложений. Клиентская часть находится в отслеживаемом приложении, которое регистрируется в серверной части.
Таким образом, даже если наше приложение не работает или не работает должным образом, сервер мониторинга все еще работает. Теперь представьте, что у вас есть несколько приложений (таких как микросервисы Spring Boot), и каждое из них может работать в нескольких экземплярах. С традиционным мониторингом Actuator это сложно, так как вам нужно получить доступ к каждому из них по отдельности, и вам нужно отслеживать, сколько экземпляров и где запущено.
При использовании Spring Boot Admin каждый экземпляр отслеживаемого приложения (клиента) регистрируется на сервере после его запуска. Тогда у вас есть единственная точка (Admin Server), где вы можете проверить их все.
Исходный код
Исходный код готового приложения можно найти в этом репозитории Github.
Настройка сервера
Давайте сначала рассмотрим, как настроить Spring Boot Admin Server. Начнем со нового Spring Boot приложения. Вы можете легко создать его, используя Spring Initializr. Обязательно включите web модуль.
После создания проекта, первое, что нам нужно, это добавить зависимость Spring Boot Admin Server:
Обратите внимание, что хотя этот проект не создан Pivotal, вы можете найти клиентский и серверный модули для Spring Boot Admin в Spring Initializr. Далее нам нужно включить Admin Server, аннотируя наш основной класс приложения с помощью аннотации @EnableAdminServer:
Вот и все. Теперь вы можете запустить свое приложение и после открытия страницы вы должны увидеть такой экран:
Сервер работает, но клиенты еще не зарегистрированы. Давайте исправим это.
Настройка клиента
Как и при настройке сервера, первый шаг — необходимо добавить правильную зависимость к существующему приложению:
Затем вам нужно определить URL, где работает ваш Admin Server. Добавьте эту строку в ваш файл application.properties:
Добавление Actuator
Теперь у вас должна быть возможность запустить и клиент, и сервер. Просто убедитесь, что нет конфликта портов, поскольку оба приложения по умолчанию используют 8080. В целях тестирования вы можете установить server.port = 0 в ваших application.properties, чтобы ваш клиент использовал случайный порт при запуске. Таким образом, вы можете протестировать запуск нескольких экземпляров, работающих на разных портах.
При открытии пользовательского интерфейса Admin Server вы должны увидеть свое приложение. Когда вы нажимаете на название приложения, должна появиться страница с информацией о приложении.
Если вы видите экран, подобный приведенному выше, с минимальным количеством информации, это означает, что в вашем проекте нет Actuator. Помните, что Spring Boot Admin использует конечные точки Actuator под капотом. К счастью, вам нужно просто добавить простую зависимость, а автоконфигурация позаботится обо всем остальном.
Однако большинство конечных точек по умолчанию не отображаются в Actuator. Вам нужно изменить свою конфигурацию в application.properties, чтобы выставить их:
После предоставления конечных точек Actuator вы должны увидеть гораздо больше информации в интерфейсе администратора:
Подробное руководство по настройке Spring Boot Actuator можно найти в этой статье.
Примечание переводчика. И в статье на Хабре.
Безопасность
Теперь, когда все работает, мы должны убедиться, что наши конечные точки Actuator и интерфейс администратора не доступны для всех.
Безопасность клиентов
Если вы уже используете Spring Security, вышеперечисленное не будет работать для вас, так как конечные точки привода по умолчанию защищены и ваш сервер администратора не сможет получить к ним доступ. Если вы еще не используете Spring Security, сначала нужно добавить зависимость:
В целях тестирования вы можете временно отключить безопасность конечных точек Actuator с помощью management.security.enabled = false. Однако мы хотим, чтобы безопасность была включена. Если вы используете обычную аутентификацию, вы можете просто указать имя пользователя и пароль в файле свойств. Эти учетные данные будут использоваться Admin Server для аутентификации на конечных точках привода клиента:
По умолчанию, если не настроено иначе, Spring Boot по умолчанию использует пользователя user и автоматически сгенерированный пароль при каждом запуске приложения. Вы можете проверить пароль в консоли во время запуска. Если вы хотите явно указать имя пользователя и пароль, необходимые для вашего приложения, вы можете указать их в своих свойствах:
Безопасность сервера
Как и в случае с клиентом, нам нужно добавить зависимость Spring Security:
Теперь давайте настроим имя пользователя и пароль, необходимые для входа на Admin Server в вашем application.properties:
Сейчас на вашем клиенте вам также необходимо добавить эти учетные данные, иначе он не сможет зарегистрироваться на сервере:
Теперь вернемся к серверной части. Последнее, что нам нужно, это добавить конфигурацию Spring Security для защиты пользовательского интерфейса администратора:
Это позволит обеспечить доступ к интерфейсу администратора только для аутентифицированных пользователей, использующих базовую аутентификацию HTTP для входа в систему. Сама страница входа и статические ресурсы пользовательского интерфейса, включая javascript, HTML и CSS, являются открытыми. В противном случае вы не сможете войти в систему. Тогда существует защита от подделки межсайтовых запросов (CSRF, Cross-Site Request Forgery) на основе файлов cookie. Вы можете видеть, что некоторые пути игнорируются в защите CSRF — это потому, что Admin Server в настоящее время не имеет надлежащей поддержки.
Теперь после перезагрузки вы должны увидеть красивый экран входа, защищающий ваш Admin Server:
Cloud Discovery
Клиент Spring Boot Admin — не единственный способ зарегистрировать ваши приложения на сервере. Admin Server также поддерживает Spring Cloud Service Discovery. Вы можете прочитать больше в официальной документации или в статье «Spring Cloud Discovery with Spring Boot Admin».
Уведомления
Как только у вас запущен мониторинг, вы хотите получать уведомления, когда что-то идет не так. Хорошая новость заключается в том, что Spring Admin предоставляет широкий спектр вариантов уведомлений.
Если вы посещаете страницу Admin Server в первый раз, она запрашивает разрешение на отображение push-уведомлений на вашем компьютере. Всякий раз, когда возникает проблема, вы получите всплывающее сообщение.
Другие уведомления нуждаются в простой настройке. Обычно это означает просто предоставить несколько записей в вашем application.properties. В настоящее время поддерживаются следующие сервисы:
Настройка почтовых уведомлений
Если вы хотите включить почтовые уведомления, вам нужно добавить Spring email зависимость в вашу серверную часть:
Затем вам нужно определить ваш SMTP-сервер, который будет использоваться для отправки уведомлений и учетных данных по электронной почте. Обновите свои application.properties вашего Admin Server.
Затем вам нужно определить получателей и отправителей.
Введение в Spring Boot Actuator
Салют, хабровчане! Уже через неделю стартуют занятия в новой группе курса «Разработчик на Spring Framework». В связи с этим делимся с вами полезным материалом в котором рассказано о том, что такое Spring Actuator и чем он может быть полезен.
После того как вы разработали приложение и развернули его в продакшене, очень важно следить за его работоспособностью. Особенно это актуально для критически важных приложений, таких как банковские системы, в которых отказ приложений напрямую влияет на бизнес.
Традиционно, до Spring Actuator, нам нужно было писать код для проверки работоспособности приложения, но с Spring Actuator нам не нужно писать код. Spring Actuator предоставляет несколько готовых конечных точек (endpoint), которые могут быть полезны для мониторинга приложения.
Как добавить Spring Actuator в проект Maven или Gradle?
Создание проекта Spring Boot с Spring Actuator
Давайте продолжим и создадим с помощью Spring Initializer проект Spring Boot с зависимостями Spring Actuator, Web и DevTools.
Обратите внимание, что на момент написания этой статьи версия Spring Boot была 2.1.0.
В консоли вы увидите следующее:
Видно, что встроенный Tomcat запущен на порту 8080, а SpringActuatorApplication запущен в Tomcat. Также вы можете увидеть, что конечные точки actuator’а доступны по адресу /actuator.
Мониторинг приложений с Spring Actuator Endpoints
Как мы уже говорили выше, Spring Actuator предоставляет несколько готовых конечных точек (endpoints), которые мы можем использовать для мониторинга работоспособности приложения.
ID | Описание |
---|---|
auditevents | Предоставляет информацию о событиях аудита для текущего приложения. |
beans | Отображает полный список всех Spring-бинов в приложении. |
caches | Информация о кэше. |
conditions | Показывает условия (Condition), которые были вычислены для классов конфигурации и автоконфигурации, и причины, по которым они соответствовали или не соответствовали. |
configprops | Отображает список всех @ConfigurationProperties |
env | Отображает свойства из ConfigurableEnvironment. |
flyway | Показывает миграции баз данных Flyway, которые были применены. |
health | Показывает сведения о работоспособности приложения. |
httptrace | Отображает информацию трассировки HTTP (по умолчанию последние 100 HTTP запросов-ответов). |
info | Отображает дополнительную информацию о приложении. |
integrationgraph | Граф Spring Integration. |
loggers | Отображает и позволяет изменить конфигурацию логгеров в приложении. |
liquibase | Показывает примененные миграции базы данных Liquibase. |
metrics | Показывает информацию о метриках для текущего приложения. |
mappings | Отображает список всех путей @RequestMapping. |
scheduledtasks | Отображает запланированные задачи (scheduled tasks). |
sessions | Позволяет извлекать и удалять пользовательские сессии из хранилищ, поддерживаемых Spring Session. Недоступно при использовании Spring Session для реактивных веб-приложений. |
shutdown | Позволяет приложению корректно завершить работу. |
threaddump | Отображает информацию о потоках. |
Включение конечных точек
Примечание переводчика: по умолчанию доступ ко всем конечным точкам есть только через JMX, доступа через HTTP ко всем конечным точкам нет (см. ниже).
Доступ к конечным точкам через HTTP
Давайте перейдем по URL-адресу localhost:8080/actuator и посмотрим на доступные конечные точки.
Примечание: я использую Postman для тестирования, поскольку он показывает JSON в хорошо структурированном формате. Вы можете использовать любой другой инструмент или просто браузер.
Доступ к конкретным конечным точкам
Теперь, после добавления в application.properties указанной выше записи, давайте снова перейдем по http://localhost:8080/actuator
Как мы видим на скриншоте ниже, конечная точка env также включена.
Доступ ко всем конечным точкам
Доступ ко всем конечным точкам, кроме некоторых
Две записи ниже активируют все конечные точки, но отключают конечную точку env.
Отключение всех конечных точек HTTP
Если вы не хотите предоставлять конечные точки через HTTP, это можно сделать, настроив в файле application.properties следующее:
Настройка URL для доступа к конечным точкам
Например, если вы хотите сделать базовый URL-адрес как /monitor вместо /actuator это можно сделать следующим образом:
При этом все конечные точки будут доступны как /monitor/
Конечные точки Spring Boot Actuator
Давайте обсудим некоторые из наиболее важных конечных точек.
Конечная точка health даёт общий статус приложения: запущено и работает или нет. Это очень важно для мониторинга состояния приложения, когда оно находится в продакшене. Эта конечная точка может быть интегрирована с приложениями мониторинга и будет очень полезна для определения работоспособности приложений в реальном времени.
Отключение всех преднастроенных индикаторов
Описанные выше “индикаторы здоровья” включены по умолчанию, однако, их можно отключить с помощью следующего свойства:
Отключение отдельного индикатора
Написание своих индикаторов (HealthIndicator)
Давайте снова перейдем на конечную точку health и посмотрим, отражается ли наш индикатор или нет.
Мы видим наш индикатор.
Статус отдельного компонента
Можно также проверить состояние отдельного компонента. В приведенном выше примере мы видели написанный нами индикатор и diskSpace.
Если мы хотим видеть только состояние диска, мы можем использовать следующее URL:
Так как в нашем проекте такого файла нет, то ответ будет пустой, как показано ниже:
Теперь давайте снова посмотрим на конечную точку info и увидим информацию о сборке, как показано ниже:
Конечная точка beans показывает все бины, определенные в Spring-контейнере со следующей информацией о каждом бине:
Например, я создал RestController с именем TestController и заинжектил компонент с именем TestService
Вы можете увидеть, как это показывается для testController, на скриншоте ниже.
На приведенном выше скриншоте мы видим два бина, которые определены в самом Spring Framework и снабжены аннотацией @ConfigurationProperties и, следовательно, отображаются в этой конечной точке.
Конечная точка env предоставляет всю информацию, относящуюся к окружению, в следующем порядке:
Свойства системы | зависит от JVM (не зависит от платформы) |
---|---|
Системное окружение или переменные окружения | зависит от операционной системы (зависит от платформы) |
Настройки уровня приложения | определены в application.properties |
Конечная точка heapdump делает дамп кучи приложения. Эта конечная точка возвращает двоичные данные в формате HPROF. Поскольку обычно возвращается много данных, вы должны их сохранить и проанализировать.
Конечная точка loggers предоставляет логгеры приложения с информацией об их настроенном уровне логирования (configuredLevel) и эффективном уровне (effectiveLevel). Если для логера и его родителя настроенный уровень не указан (null), то эффективным уровнем будет уровень корневого логера.
Свойство level указывает, какие уровни логирования поддерживаются фреймворком логирования.
Конечная точка metrics показывает все метрики, которые вы можете отслеживать для вашего приложения.
Проверка индивидуальной метрики
По устоявшейся традиции ждем ваши комментарии и приглашаем всех на день открытых дверей, который пройдет 23 мая.