Характеристики микросервисов определяют, что развертывание функциональных модулей распределено. Большинство функциональных модулей работают на разных машинах и взаимодействуют друг с другом с помощью сервисных вызовов. Бизнес течет в передней и бэк -офисе будет обрабатываться и передавать многими микросервисами. Как быстро найти исключения? В какой ссылке есть проблема?
В соответствии с этой структурой мониторинг микросервисов особенно важен. Эта статья в основном сочетает в себе привод Spring Boot, чтобы поделиться с вами общим использованием привода Spring Boot MicroService Spring, чтобы мы могли отслеживать и управлять нашими микросервисами в повседневной жизни.
Мониторинг привода
Spring Boot использует концепцию «привычек лучше, чем конфигурация» и использует пакетные сканирующие и автоматические механизмы конфигурации для загрузки пружинных бобов, которые зависят от банок. Это не требует какой -либо конфигурации XML для реализации всех конфигураций пружины. Хотя это делает наш код очень кратким, информация, такая как создание экземпляров и зависимости всего приложения, дискретна аннотациям различных классов конфигурации, что очень затрудняет анализ различных отношений между ресурсами и экземплярами во всем приложении.
Привод является интегрированной функцией самоанализа и мониторинга систем приложений, предоставляемых Spring Boot. Вы можете просмотреть подробную информацию о конфигурации приложения, такой как автоматическая информация о конфигурации, созданные пружинные бобы и некоторые экологические свойства.
Мониторинг привода может быть проведен путем добавления следующих зависимостей
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </GroupId> <artifactId> Spring-Boot-Starter-Security </artifactid> </depervice> </dependencies>
Чтобы обеспечить безопасность интерфейса мониторинга, выявленного приводом, необходимо добавить зависимости и зависимости контроля безопасности Spring-Boot-Start-Start-Security. При доступе к конечным точкам мониторинга приложений требуется информация о проверке. Зависимости от безопасности, вы можете не добавлять и не управлять безопасностью, но это не рекомендуется.
Интерфейс привода
Мониторинг привода делится на две категории: собственные конечные точки и пользовательские конечные точки; Пользовательские конечные точки в основном относятся к масштабируемости. Пользователи могут определить некоторые более заинтересованные показатели на основе их фактических приложений и отслеживать их во время выполнения.
Нативные конечные точки предоставляют многочисленные веб -интерфейсы в приложениях для понимания внутреннего состояния времени выполнения приложения. Нативные конечные точки можно разделить на три категории:
Привод предоставляет 13 интерфейсов, как показано в следующей таблице.
| HTTP Методы | путь | описывать |
|---|---|---|
| ПОЛУЧАТЬ | /AutoConfig | Отчет об автоматической конфигурации представлен для записи, какие условия автоматической конфигурации были переданы, а какие не были переданы. |
| ПОЛУЧАТЬ | /configprops | Опишите, как ввести боб со свойствами конфигурации (включая значения по умолчанию) |
| ПОЛУЧАТЬ | /бобы | Опишите все бобы в контексте приложения и их отношениях |
| ПОЛУЧАТЬ | /свалка | Получите снимок активности потока |
| ПОЛУЧАТЬ | /env | Получите все атрибуты окружающей среды |
| ПОЛУЧАТЬ | /env/{имя} | Получить конкретные значения атрибутов среды на основе имени |
| ПОЛУЧАТЬ | /здоровье | Отчеты о медицинских показателях для приложения, эти ценности предоставляются в классе внедрения HealthIndicator |
| ПОЛУЧАТЬ | /информация | Получите пользовательскую информацию для приложения, которое предоставляется атрибутами, возглавляемыми информацией |
| ПОЛУЧАТЬ | /отображения | Опишите все пути URI и их взаимосвязь с картированием с контроллером (включая конечные точки привода) |
| ПОЛУЧАТЬ | /метрики | Сообщите о различных показателях приложения, таких как использование памяти и HTTP -запрос |
| ПОЛУЧАТЬ | /metrics/{name} | Сообщает значения метрики приложения указанного имени |
| ПОЧТА | /неисправность | Закройте приложение и требует конечных точек. Shutdown.enabled будет установлен на true |
| ПОЛУЧАТЬ | /след | Предоставьте базовую информацию HTTP -запроса (TimeStamp, HTTP -заголовок и т. Д.) |
Начните быстро
Связанные конфигурации
Зависимость проекта
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency></dependencies>
Файл конфигурации
Сервер: Порт: 8080 Менеджмент: Безопасность: включено: false #switch Off Порт проверки аутентификации безопасности: 8088 #Admin порт.
После завершения конфигурации проект может быть запущен, и вы можете продолжать проверять различные функции мониторинга.
Подробное объяснение команды
Автоконфиг
Функция автоматической конфигурации Spring Boot очень удобна, но иногда это также означает, что трудно узнать конкретную причину, когда есть проблема. Используйте AutoConfig для просмотра условий, при которых определенная конфигурация вступает в силу во время выполнения приложения, или почему автоматическая конфигурация не вступает в силу.
Запустите образец проекта и посетите: http: // localhost: 8088/monitor/autoconfig. Возвращая часть информации заключается в следующем:
{"positivematches": {"devtoolsdatasourceautoconfiguration": {"notmatched": [{"condition": "devtoolsdatasourceautoconfiguration.devtoolsdatasourcecondition", "Сообщение": "Devtoolsdatasource. ]}, "RemotedEvtoolsautoconfiguration": {"notmatched": [{"condity": "OnpropertyCondition", "Сообщение": "@ConditionAlonProperty (Spring.Devtools.Remote.secret) не нашел свойство" секрет "}]," Соответствует ": [" '"" на "на кальку "@ConditionAlonClass Нашел необходимые классы 'javax.servlet.filter', 'org.springframework.http.server.serverhttprequest'; @conditionalonmissingclass не нашел нежелательный класс"}]}}ConfigProps
Просмотреть содержимое свойств, установленных в файле конфигурации, а также значения по умолчанию некоторых свойств конфигурации.
Запустите образец проекта и посетите: http: // localhost: 8088/monitor/configprops. Возвращая часть информации заключается в следующем:
{... "EnvironmentPoint": {"prefix": "endpoints.env", "Свойства": {"id": "env", "чувствительный": true, "Ensulation": true}}, "spring.http.multipart-org.springframework.boot.autoconfigure.web.web.webertipartprpexprapemporse a "Spring.http.multipart", "Свойства": {"maxRequestSize": "10mb", "filesizeThroshold": "0", "место": null, "maxFilesize": "1MB", "включен": true, "Resolvelazy": false}}, ", InfoNdPoint": {"{" {"{" {"{" {"{" {"resefix": ":" ":": "": ":": ":": ":": ":": ":": ":": ":": ":« "EndPoints.info", "Свойства": {"id": "info", "чувствительный": false, "включен": true}} ...}бобы
Из примера мы видим, что отображается псевдоним, тип бобов, тип, будь то синглтон, адрес класса, зависимости и другой информации.
Начните образец проекта и посетите: http: // localhost: 8088/monitor/beans. Возвращая часть информации заключается в следующем:
[{«контекст»: «Приложение: 8080: управление», «родитель»: «Приложение: 8080», «Бобы»: [{«Bean»: «EmbeddedServletContainerFactory», «Псевдоним»: [], «Scope»: «Singleton», «Тип»: "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory", "resource": "null", "dependencies": [ ] }, { "bean": "endpointWebMvcChildContextConfiguration", "aliases": [ ], "scope": "singleton", "type": «org.springframework.boot.actuate.autoconfigure.endpointwebmvcchildContextConfiguration $$ EnhancerByspringcglib $$ A4A10F9D», «Ресурс»: «NULL», «Зависимости»: []}}]свалка
Интерфейс /дамп будет генерировать снимок текущей активности потока. Эта функция очень хороша, что делает нам удобным проверять ситуацию с потоком, когда мы находим проблемы в повседневной жизни. В основном он отображает информацию, такую как имя потока, идентификатор потока, статус потока, будь то ждать ресурсов блокировки.
Начните образец проекта и посетите: http: // localhost: 8088/monitor/dilm. Возвращая часть информации заключается в следующем:
[{"ThreadName": "http-nio-8088-exec-6", "Threadid": 49, "Blockedtime": -1, "BlockedCount": 0, "waitedtime": -1, "waitedcount": 2, "lockname": "java.util.concurrent., waitedcount": "lockname": "java.util.concurrent., waitedcount". «Lockownerid»: -1, «lockownername»: null, «вродный»: false, «подвеска»: false, «threadstate»: «ожидание», «stacktrace»: [{«метод»: «Парк», «Filename»: «Uncefe.java», «LineNumber»: -2, «ClassName»: «Sun.Misc». {"MethodName": "Park", "Filename": "locksupport.java", "LineNember": 175, "classname": "java.util.concurrent.locks.locksupport", "nativemethod": false}, {"метод": "waust", "filename": "Abstractquenchryrhry. «LeanEnumber»: 2039, «classname»: "java.util.concurrent.locks.abstractqueudsynchronizer $ condityObject", "nativeMethod": false}, ... {"MethodName": "GetTask", "FileName": "ThreadPoolexeCutor.java", "LineNumber": 1067, ":": ":": ":" clase ":": ":": ":". "java.util.concurrent.threadpoolexecutor", "nativemethod": false}, {"методнамен": "Runworker", "filename": "Threadpoolexecutor.java", "LineNumber": 1127, "className": "java.Utl.Concurrent.ThrectoX" "nativeMethod": false }, { "methodName": "run", "fileName": "ThreadPoolExecutor.java", "lineNumber": 617, "className": "java.util.concurrent.ThreadPoolExecutor$Worker", "nativeMethod": false }, { "methodName": "run", "fileName": «TaskThread.java», «LineNember»: 61, «ClassName»: «org.apache.tomcat.util.threads.taskthread $ wrappingrunnable», «nativemethod»: false}, {«метод»: «Run», «Filename»: «Thread.java», «LineNumber»: 745, «класс»: «745,»: «745,»: «745,», «745,»: «745,»: «745,»: «745,»: «745,»: «745,»: « «java.lang.thread», «nativemethod»: false}], "lockedmonitors": [], "lockedSynchronizers": [], "lockinfo": {"classname": "java.util.concurrent.locks.abstractqueudsynchronizer $ conditionobject", "udityHashcoste.6222222222222222222222222222222222222222222222222222 ...]эн
Отображает информацию о конфигурации переменных системной среды, включая используемые переменные среды, свойства JVM, параметры командной строки, пакеты JAR, используемые проектом, и т. Д. В отличие от ConfigProps, ConfigProps фокусируется на информации о конфигурации, в то время как ENV фокусируется на информации об эксплуатационной среде.
Начните образец проекта и посетите: http: // localhost: 8088/monitor/env. Возвращая часть информации заключается в следующем:
{«Профили»: [], "server.ports": {"local.management.port": 8088, "local.server.port": 8080}, "ServletContextInitParams": {}, "SystemProperties": {"com.sun.management.jmxRemote.authenticate": "false", javaM.raMemem. «Java (TM) SE среда времени выполнения», «Spring.output.ansi.enabled»: «Всегда», «sun.boot.library.path»: «C: // Программные файлы // java // jdk1.8.0_101 // jre // bin», "java.vm.version": "25.101-b13", "java.vm.Version": "25.101-b13". Корпорация "," java.vendor.url ":" http://java.oracle.com/ "," java.rmi.server.randomids ":" true "," path.separator ":"; "," java.vm.name ":" java hotspot (tm) 64-bit server vmod. ever. ever. ever. ever. ever. ever. ever. ever. ever. ever. ever.cont. "sun.io", "user.country": "cn", "user.script": "", "sun.java.launcher": "sun_standard", "sun.os.patch.level": "," Pid ":" 5268 "," com.sun.management.jmxremote.port ":" 60093 ", java. "Java Virtual Machine SpeЧтобы избежать конфиденциальной информации, подвергающейся воздействию /env, все атрибуты, названные паролем, секрет, ключ (или последний абзац имени - это) будут добавлены в /env с «*». Например, если есть база данных имени свойства.
"Database.password": "******"
Использование /env /{name}
То есть расширение ENV может получить указанную информацию о конфигурации, такую как: http: // localhost: 8088/monitor/env/java.vm.version, return: {"java.vm.version": "25.101-b13"}
здоровье
Вы можете видеть, что HealthendPoint дает нам результаты мониторинга по умолчанию, включая обнаружение дисков и обнаружение базы данных
Запустите образец проект и посетите: http: // localhost: 8088/monitor/health возвращает Часть информации, следующий ответ JSON состоит из штата, дискового пространства и DB. Описывает общее состояние здоровья приложения, UP указывает на то, что приложение является здоровым. Дисковое пространство описывает общее пространство диска, оставшееся дисковое пространство и минимальный порог. Порог Application.Properties настраивается
{"Статус": "UP", "Diskspace": {"status": "up", "total": 209715195904, "Free": 183253909504, "Threshold": 10485760} "DB": {"Статус": "Up", "DataBase": "MySQL", "Hello": 1} ": 1": 1 ": 1": 1 ": 1": 1 ": 1": ".На самом деле, глядя на исходный код Spring Boot-Actuator, вы обнаружите, что информация, предоставленная HealthendPoint, не ограничивается этим. В рамках пакета org.springframework.boot.actuate.health вы найдете ElasticsearchHealthIndicator, RedishealthIndicator, RabbitealthIndicator и т. Д.
информация
Информация - это информация о конфигурации, которую мы настраиваем в файле конфигурации, начиная с информации. Например, наша конфигурация в примере проекта:
Информация: Приложение: Имя: Версия Spring-Boot-Actuator: 1.0.0
Запустите образец проекта и посетите: http: // localhost: 8088/monitor/info Отвратная часть информации заключается в следующем:
{"app": {"name": "Spring-Boot-Actuator", "Версия": "1.0.0"}}отображения
Опишите все пути URI и их взаимосвязь с картированием с контроллером
Начните образец проекта и посетите: http: // localhost: 8088/monitor/mappings. Возвращая часть информации заключается в следующем:
{"/**/favicon.ico": {"bean": "faviconhandlermapping"}, "{[/hello]}": {"bean": "requestMappingHandLermapping", "Method": "public java.lang.String com.neo.controller.hellocontroller «Bean»: «requestMappingHandlermapping», «Метод»: «Public org.springframework.http.Responseentity <java.util.map <java.lang.string, java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorcontroller.error (javax.servlet.http.httpservletrequest) "}}метрики
Одним из наиболее важных содержания мониторинга является в основном мониторинг использования контента JVM, ситуацию с GC, информация о загрузке класса и т. Д.
Начните образец проекта и посетите: http: // localhost: 8088/monitor/metrics. Возвращая часть информации заключается в следующем:
{"Mem": 337132, "mem.free": 183380, "Процессоры": 4, "exante.uptime": 254552, "Uptime": 259702, "Systemload.Averavery": -1.0, "Heap.committed": 292864, "heap.init": 129024, "heap.used", "heap.ase", 109464, "heap.init": 129024, "heap.used", "heap.used", "heap.used", "heap.used", "heap.used": "heap.used": "heap.ase". 1827840, "nonheap.committed": 45248, "nonheap.init": 2496, "nonheap.used": 44269, "nonheap": 0, "Threads.peak": 63, "Threads.daemon": 43, "Threads.totalstarted": 83, "Threads": 46, "Classals". 6357, "classe.Unloaded": 0, "gc.ps_scavenge.count": 8, "gc.ps_scavenge.time": 99, "gc.ps_marksweep.count": 1, "gc.ps_marksweep.time": 43, "httpsessions.macts": -1, htttpsessess.Информация, предоставленная интерфейсом /метрики, просто классифицируется следующим образом:
| Классификация | Префикс | Сообщить о содержании |
|---|---|---|
| Сборщик мусора | GC.* | Количество сборов мусора, которые произошли, и время, потраченное на сборы мусора, подходит для коллекционеров мусора и параллельных мусора (данные, исходящие от Java.lang.management. GarbagoLlectormxbean) |
| Память | Mem.* | Размер памяти, выделенного для приложения, и объем свободной памяти (данные, возникшие из java.lang. Средство выполнения) |
| куча | куча.* | Современное использование памяти (данные были созданы из java.lang.management.memoryusage) |
| Класс погрузчик | классы.* | Количество классов, загруженных и выгруженных загрузчиком класса JVM (данные, происходящие из java.lang. |
| система | процессоры, exante.uptime, overtime, systemload.average | Информация о системе, такую как количество процессоров (данные, происходящие из java.lang.runtime), среда выполнения (данные, происходящие из java.lang.management.runtimemxbean), среднее значение нагрузки (данные, происходящие из java.lang.managemage.operatingsystemmxbean) |
| БИЛЕР НИДЕЙ | нить.* | Количество потоков, потоков демонов и пикового количества потоков после запуска JVM (данные были созданы из java.lang.management.threadmxbean) |
| Источник данных | DataSource.* | Количество подключений источника данных (метаданные из источника данных, только если боб данных существует в контексте приложения Spring) |
| Tomcat Session | httpsessions.* | Активный номер сеанса Tomcat и максимальный номер сеанса (данные поступают из встроенных бобов Tomcat, которые доступны только при запуске приложения с использованием Embedded Tomcat Server) |
| Http | Counter.status., Lage.Response. | Меры и счетчики для HTTP -запросов на различные прикладные услуги |
Объяснение:
неисправность
Включите интерфейс и элегантно закройте приложение Spring Boot. Чтобы использовать эту функцию, вы должны сначала включить ее в файл конфигурации:
Конечные точки: выключение: включено: true
После завершения конфигурации запустите образец проекта и посетите: http: // localhost: 8088/monitor/replown return Часть информации следующая:
{"Сообщение": "Выключение, пока ..."}На этом этапе вы обнаружите, что приложение было закрыто.
след
Интерфейс /трассировки может сообщать об подробной информации обо всех веб -запросах, включая методы запроса, пути, временные метки, а также информацию запроса и заголовка ответов, а также записать подробную информацию каждого запроса.
Запустите образец проект, посетите его сначала: http: // localhost: 8080/hello, а затем выполните его в браузере: http: // localhost: 8088/monitor/trace Посмотреть информация о возврате:
[{«TimeStamp»: 15167803347777, «info»: {«метод»: «Get», «Path»: «/Hello», «заголовки»: {«запрос»: {«host»: «Localhost: 8080», «Connection»: «Hept-alive», «Cache-Control»: «Max-Age = 0», «Пользователь». NT 10.0; "Text/html, Application/xhtml+xml, Application/xml; q = 0,9, изображение/webp, image/apng,*/*; q = 0,8", "Принятие-кодирование": "gzip, deflate, br", «Принятие языка»: «zh-cn, zh; q = 0,9», «cookie»: «Принятие языка»: «zh-cn, zh; "UM_Distinctid = 16053BA344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751; HM_LVT_0FB30C642C5F6453F17D881F529A1141 = 1513076406,1514961720,1515649377; HM_LVT_6D8E8BB59814010152D98507A18AD229 = 1515247964,1515296008,1515672972,1516086283 »},« Ответ »: {x-application-context»: «8080». "Text/html; charset = utf-8", "content-kength": "11", "date": "ср, 24 января 2018 07:52:14 Gmt", "Статус": "200"}}, "TimeTaken": "4"}}]]Приведенная выше информация показывает данные /hello запроса.
Другие конфигурации
Ограничения на доступ к конфиденциальной информации
Согласно приведенной выше таблице, если аутентификация является ложной, это означает, что она нечувствительна и может быть доступна по желанию. В противном случае он будет защищен и не может быть доступен по желанию.
endpoints.mappings.sensitive = false
Это требует настройки каждого из них, что более хлопотно. Конфиденциальный метод требует, чтобы пользователь по умолчанию имел роль привода, поэтому вы также можете установить ограничения безопасности на выключение:
Management.security.enabled = false
Или сотрудничать с пружинной безопасностью для мелкозернистого контроля.
Включить и отключить интерфейсы
Хотя интерфейсы привода полезны, вам не обязательно нужно все. По умолчанию все интерфейсы (кроме /выключения) включены. Например, чтобы отключить интерфейс /метрики, вы можете установить его следующим образом:
EndPoints.metrics.Enabled = false
Если вы хотите открыть только один или два интерфейса, то сначала отключите все интерфейсы, а затем включите те немногие, которые вы хотите, что более удобно.
endpoints.enabled = falseendpoints.metrics.enabled = true
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.