{"id":3205,"date":"2020-12-12T23:23:59","date_gmt":"2020-12-13T02:23:59","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=3205"},"modified":"2020-12-12T23:26:02","modified_gmt":"2020-12-13T02:26:02","slug":"conhecendo-o-actuator-do-spring-boot","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=3205","title":{"rendered":"Conhecendo o Actuator do Spring Boot"},"content":{"rendered":"\n<p>Um dos recursos que mais gosto no Spring Boot e que normalmente \u00e9 negligenciado por quem usa o framework \u00e9 o <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html\">Actuator<\/a>: natural, dado que o foco normalmente est\u00e1 no c\u00f3digo sendo escrito e n\u00e3o ap\u00f3s ter sido implantado. <\/p>\n\n\n\n<p>O Actuator \u00e9 um recurso do Spring Boot que nos permite <strong>monitorar e gerenciar<\/strong> aplica\u00e7\u00f5es escritas neste framework em seu ambiente de implanta\u00e7\u00e3o. \u00c9 bastante rico e f\u00e1cil de ser usado: j\u00e1 v\u00eam com diversos recursos prontos pra uso sem que voc\u00ea precise escrever uma \u00fanica linha de c\u00f3digo e ser\u00e1 nosso assunto aqui.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A curiosa hist\u00f3ria deste texto e dos pr\u00f3ximos<\/h2>\n\n\n\n<p>Quando comecei a escrever este texto lembrei que pouca gente conhecia um recurso similar que temos no Java SE chamado JMX, ent\u00e3o escrevi <a href=\"https:\/\/devkico.itexto.com.br\/?p=3169\">aquele post<\/a> apresentando a tecnologia. Quando finalmente voltei ao objetivo inicial o resultado foi um texto <strong>imenso<\/strong>. Sendo assim resolvi dividi-lo em partes: nesta primeira vou apresentar uma vis\u00e3o geral sobre o Actuator e nos restantes vamos ver os recursos que mais usamos em nosso dia a dia.<\/p>\n\n\n\n<p>Vou te mostrar o que \u00e9 o Actuator, suas principais aplica\u00e7\u00f5es (por alto, vou detalhar tudo isto nos posts mais a frente (j\u00e1 est\u00e3o prontos, &#8220;s\u00f3 falta testar&#8221;)), as principais configura\u00e7\u00f5es e, finalmente, pontos fundamentais relativos \u00e0 seguran\u00e7a do seu projeto.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">O que \u00e9 o Actuator?<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"398\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_boot_actuator-1024x398.jpg\" alt=\"O que \u00e9 o Spring Boot Actuator?\" class=\"wp-image-3208\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_boot_actuator-1024x398.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_boot_actuator-300x116.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_boot_actuator-768x298.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_boot_actuator.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Talvez o Actuator n\u00e3o seja t\u00e3o usado e conhecido pelo modo como \u00e9 apresentado pela equipe do Spring Boot e traduzido para o portugu\u00eas: <em>&#8220;production-ready features&#8221;<\/em>, a\u00ed traduzem como <em>&#8220;funcionalidades para o ambiente de produ\u00e7\u00e3o&#8221;<\/em>. Pior: a maior parte dos livros em portugu\u00eas tem como foco a escrita de c\u00f3digo e no m\u00e1ximo a implanta\u00e7\u00e3o, ignorando aquela que pra mim \u00e9 a fase mais importante: <strong>a p\u00f3s implanta\u00e7\u00e3o<\/strong>.<\/p>\n\n\n\n<p>O Spring Boot oferece \u00e0 equipe de desenvolvimento todo o ferramental necess\u00e1rio para que possa monitorar e gerenciar sua aplica\u00e7\u00e3o ap\u00f3s ter sido implantada. Com ele voc\u00ea pode:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Monitorar a aplica\u00e7\u00e3o, isto \u00e9, acompanhar diversos aspectos da sua execu\u00e7\u00e3o ap\u00f3s implantada.<\/li><li>Gerenciar a aplica\u00e7\u00e3o, ou seja, interagir com o sistema com ele em execu\u00e7\u00e3o operando a\u00e7\u00f5es neste como, por exemplo, limpeza de cache, tarefas administrativas, altera\u00e7\u00e3o de configura\u00e7\u00f5es e muito mais.<\/li><\/ul>\n\n\n\n<p>Ok, voc\u00ea leu o <a href=\"https:\/\/devkico.itexto.com.br\/?p=3169\">meu texto sobre JMX<\/a> e viu as mesmas frases. Ent\u00e3o <strong>qual a diferen\u00e7a?<\/strong> H\u00e1 algumas.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>O protocolo padr\u00e3o \u00e9 o HTTP usando REST como padr\u00e3o, o que facilita seu uso (h\u00e1 riscos de seguran\u00e7a que vou ensinar a minimizar mais a frente).<\/li><li>Al\u00e9m do protocolo HTTP tamb\u00e9m pode usar JMX, que \u00e9 o mecanismo padr\u00e3o de instrumenta\u00e7\u00e3o do Java.<\/li><li>Assim como o JMX j\u00e1 v\u00eam com uma s\u00e9rie de indicadores relativos ao funcionamento da JVM por padr\u00e3o, o Actuator tr\u00e1s <strong>diversas outras categorias de indicadores<\/strong>, a maior parte <strong>voltados para o contexto de aplica\u00e7\u00f5es web<\/strong>.<\/li><li>Tem como base o Spring Boot &#8211; est\u00e1 amarrado ao framework portanto, voc\u00ea n\u00e3o conseguir\u00e1 us\u00e1-lo de forma f\u00e1cil em outros frameworks.<\/li><li>Fornece a plataforma para que diversos m\u00f3dulos do Spring Boot possam fornecer seus pr\u00f3prios.<\/li><\/ul>\n\n\n\n<p>Resumindo: o Actuator nos d\u00e1 todos os recursos que precisamos para monitorar e gerenciar aplica\u00e7\u00f5es no contexto web, o que \u00e9 vital se voc\u00ea implementa uma arquitetura baseada em micro servi\u00e7os.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>Lembra do texto do Martin Fowler que popularizou os micro servi\u00e7os? Um dos pontos fundamentais era justamente o monitoramento, e o Actuator entra exatamente a\u00ed. N\u00e3o leu o texto? Aqui o <a href=\"https:\/\/martinfowler.com\/articles\/microservices.html\">link<\/a>.<\/p><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Monitorar o que?<\/h2>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_cockpit-1024x382.jpg\" alt=\"Monitorar o que?\" class=\"wp-image-3210\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_cockpit-1024x382.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_cockpit-300x112.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_cockpit-768x286.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_cockpit.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Toda esta conversa sobre monitoramento \u00e9 muito bonita mas talvez voc\u00ea se sinta perdido pois h\u00e1 in\u00fameras op\u00e7\u00f5es. Que aspectos relativos \u00e0 execu\u00e7\u00e3o do seu projeto interessam ser monitorados? Quais novos indicadores o Actuator tr\u00e1s pra n\u00f3s? <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Indicadores customizados pelo desenvolvedor<\/h3>\n\n\n\n<p>Se voc\u00ea leu <a href=\"https:\/\/devkico.itexto.com.br\/?p=3169\">meu texto sobre JMX<\/a>, temos aqui o mesmo conceito dos MBeans. Voc\u00ea pode implementar beans aqui capazes de oferecer as seguintes funcionalidades:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Obten\u00e7\u00e3o de dados &#8211; verificar espa\u00e7o em disco, por exemplo.<\/li><li>Executar a\u00e7\u00f5es &#8211; tarefas administrativas como limpeza de cache, remo\u00e7\u00e3o de arquivos tempor\u00e1rios ou qualquer outro tipo de funcionalidade administrativa que voc\u00ea precise em produ\u00e7\u00e3o.<\/li><\/ul>\n\n\n\n<p>Sua imagina\u00e7\u00e3o e necessidade s\u00e3o os limites aqui. Voc\u00ea poderia implementar isto como endpoints convencionais do Spring que executassem estas opera\u00e7\u00f5es, \u00e9 verdade, mas para o caso de tarefas administrativas o ideal \u00e9 que at\u00e9 por quest\u00f5es de seguran\u00e7a seja um c\u00f3digo isolado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checagem de qualidade de servi\u00e7o (health checks)<\/h3>\n\n\n\n<p>Talvez meu uso favorito do Actuator: c\u00f3digo de health checking \u00e9 aquele respons\u00e1vel por verificar se o sistema est\u00e1 executando em condi\u00e7\u00f5es adequadas. Vamos a alguns exemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificar espa\u00e7o em disco.<\/li><li>Quantidade de mem\u00f3ria dispon\u00edvel.<\/li><li>Acesso ao banco de dados (checagem dos data sources).<\/li><li>Se voc\u00ea realiza intera\u00e7\u00e3o com outros servi\u00e7os externos, se consegue se conectar a estes.<\/li><li>Integridade do sistema de arquivos.<\/li><\/ul>\n\n\n\n<p>Um dos textos desta s\u00e9rie \u00e9 justamente sobre health checking. \u00c9 interessante aqui observar que diversos m\u00f3dulos do Spring Boot (como Redis, JPA e muitos outros) adicionam seus pr\u00f3prios testes de verifica\u00e7\u00e3o de qualidade sem que voc\u00ea precise escrever uma linha de c\u00f3digo sequer. A imagem a seguir exp\u00f5e um exemplo de health checking detalhado usando o que j\u00e1 v\u00eam com o m\u00f3dulo JPA:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"405\" height=\"481\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-8.png\" alt=\"health checking em a\u00e7\u00e3o\" class=\"wp-image-3213\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-8.png 405w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-8-253x300.png 253w\" sizes=\"(max-width: 405px) 100vw, 405px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Bem legal hein? E eu n\u00e3o escrevi uma linha sequer de c\u00f3digo pra verificar se o acesso ao banco de dados est\u00e1 funcionando. Observe que tamb\u00e9m h\u00e1 um teste sobre espa\u00e7o em disco: tamb\u00e9m n\u00e3o escrevi este teste, veio de gra\u00e7a com o Actuator!<\/p>\n\n\n\n<p>E eu te contei que voc\u00ea pode escrever seus pr\u00f3prios testes? Vamos ver isto no pr\u00f3ximo post!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Logging<\/h3>\n\n\n\n<p>O Actuator pode facilitar bastante o acesso ao conte\u00fado do arquivo de log da aplica\u00e7\u00e3o. E este \u00e9 um uso bastante \u00fatil, essencialmente, para ver o log principal da aplica\u00e7\u00e3o voc\u00ea apenas acessa o endpoint <em>\/actuator\/logfile <\/em>e <strong>boom:<\/strong> o log principal da aplica\u00e7\u00e3o est\u00e1 ali. Abaixo voc\u00ea pode ver um exemplo de sa\u00edda:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"949\" height=\"412\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-9.png\" alt=\"sa\u00edda de log\" class=\"wp-image-3214\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-9.png 949w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-9-300x130.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-9-768x333.png 768w\" sizes=\"(max-width: 949px) 100vw, 949px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u00c9 poss\u00edvel at\u00e9 mesmo usando o comando curl obter a sua pr\u00f3pria vers\u00e3o do &#8220;tail&#8221;, veja este exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">curl 'http:\/\/localhost:8080\/actuator\/logfile' -i -X GET<\/pre>\n\n\n\n<p>\u00c9 poss\u00edvel tamb\u00e9m ver a lista de todos os loggers presentes na aplica\u00e7\u00e3o, assim como seus n\u00edveis de acesso.<\/p>\n\n\n\n<p>N\u00e3o pretendo me aprofundar neste tema, mas se voc\u00ea quiser, este \u00e9 o <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/2.4.1\/actuator-api\/htmlsingle\/#logfile-retrieving\">link a seguir<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">M\u00e9tricas (metrics) &#8211; profilando sua aplica\u00e7\u00e3o<\/h3>\n\n\n\n<p>No caso das m\u00e9tricas temos aqui a medi\u00e7\u00e3o de um aspecto da aplica\u00e7\u00e3o espec\u00edfico (consumo de CPU, mem\u00f3ria, conex\u00f5es ativas com banco de dados, etc), no momento atual. Essencialmente este indicador responde a seguinte quest\u00e3o: &#8220;<strong>qual o valor do indicador X agora?<\/strong>&#8220;.<\/p>\n\n\n\n<p>Isto te permite montar gr\u00e1ficos que possibilitam acompanhar ao longo do tempo o desempenho destes componentes, tal como o gr\u00e1fico abaixo, que exp\u00f5e o uso de CPU ao longo do tempo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"443\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-10-1024x443.png\" alt=\"\" class=\"wp-image-3216\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-10-1024x443.png 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-10-300x130.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-10-768x332.png 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-10.png 1236w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Infelizmente o Actuator n\u00e3o v\u00eam com o ferramental que produz este tipo de gr\u00e1fico, mas prov\u00ea conectores para diversas ferramentas que podem gerar isto para voc\u00ea, tais como JMX, New Relic, Datadog, Dynatrace, Elastic e muitos outros que voc\u00ea pode ver <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-metrics\">neste link<\/a>.<\/p>\n\n\n\n<p><strong>Mas n\u00e3o acaba a\u00ed! <\/strong>Voc\u00ea tamb\u00e9m pode monitorar o tempo de resposta dos seus endpoints com estas m\u00e9tricas. Veja o exemplo a seguir, real, extra\u00eddo da API do \/dev\/All:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"659\" height=\"163\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-11.png\" alt=\"\" class=\"wp-image-3217\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-11.png 659w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-11-300x74.png 300w\" sizes=\"(max-width: 659px) 100vw, 659px\" \/><\/figure>\n\n\n\n<p>Quando adicionamos a anota\u00e7\u00e3o @Timed (io.micrometer.core.annotation.Timed) na classe do nosso controlador, podemos extrair m\u00e9tricas como n\u00famero de requisi\u00e7\u00f5es recebidas, tempo m\u00e1ximo de processamento e outros detalhes, apenas acessando o endere\u00e7o \/actuator\/metrics\/site (notou que &#8220;site&#8221; \u00e9 o valor que passei pra anota\u00e7\u00e3o @Timed?). Veja o print a seguir: <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"312\" height=\"351\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-12.png\" alt=\"\" class=\"wp-image-3218\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-12.png 312w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-12-267x300.png 267w\" sizes=\"(max-width: 312px) 100vw, 312px\" \/><\/figure><\/div>\n\n\n\n<p>\u00c9 poss\u00edvel anotar apenas alguns endpoints tamb\u00e9m, o que te permite acompanhar a evolu\u00e7\u00e3o do desempenho dos mesmos. Notou que obtive tudo isto incluindo apenas <strong>uma<\/strong> anota\u00e7\u00e3o? Pode aguardar que tem post detalhando este assunto vindo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Informa\u00e7\u00f5es gen\u00e9ricas (Info)<\/h3>\n\n\n\n<p>Outro grupo de informa\u00e7\u00f5es muito \u00fatil \u00e9 o info: quem nunca precisou verificar qual a vers\u00e3o da aplica\u00e7\u00e3o est\u00e1 em produ\u00e7\u00e3o? Mas n\u00e3o se limita a apenas isto: voc\u00ea pode incluir literalmente qualquer coisa aqui, at\u00e9 mesmo informa\u00e7\u00f5es relativas ao Git. <\/p>\n\n\n\n<p>Sim, h\u00e1 um post s\u00f3 sobre este ponto aqui saindo no futuro. Neste primeiro momento pense nas informa\u00e7\u00f5es gen\u00e9ricas como &#8220;a sua base chave\/valor de dados no Actuator&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Men\u00e7\u00f5es honrosas<\/h3>\n\n\n\n<p>Meu objetivo neste e nos pr\u00f3ximos posts \u00e9 mostrar quais os recursos do Actuator que acho mais interessantes com base na minha experi\u00eancia. Mas h\u00e1 alguns outros recursos providos por padr\u00e3o que devem ser mencionados:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Auditoria<\/strong> &#8211; te possibilita registrar e monitorar eventos de autentica\u00e7\u00e3o bem ou mal sucedida e acesso n\u00e3o autorizado aos seus endpoints. Muito \u00fatil, leia mais <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-auditing\">neste link<\/a>.<\/li><li><strong>Listagem de rotas<\/strong> &#8211; muito \u00fatil, especialmente quando voc\u00ea est\u00e1 lidando com sistemas pr\u00e9-existentes. Mais detalhes <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/2.4.1\/actuator-api\/htmlsingle\/#mappings\">aqui<\/a>.<\/li><li><strong>Gest\u00e3o do processo principal<\/strong> &#8211; sabia que voc\u00ea pode <strong>finalizar<\/strong> o processo da sua aplica\u00e7\u00e3o pelo Actuator? Yeap, voc\u00ea pode: \u00e9 o endpoint <strong>\/actuator\/shutdown<\/strong>. Em momentos cr\u00edticos pode te ajudar bastante (pense num bug bruto em produ\u00e7\u00e3o gerando preju\u00edzos por segundo). Leia mais <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/2.4.1\/actuator-api\/htmlsingle\/#shutdown\">aqui<\/a>.<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Actuator na pr\u00e1tica<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"343\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/starting-1024x343.jpg\" alt=\"Iniciando\" class=\"wp-image-3221\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/starting-1024x343.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/starting-300x101.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/starting-768x257.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/starting.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>O Actuator est\u00e1 presente desde a primeira vers\u00e3o do Spring Boot. Neste texto estou falando da \u00faltima vers\u00e3o do framework (2.4.1), e inclu\u00ed-lo em sua aplica\u00e7\u00e3o \u00e9 muito simples. Se est\u00e1 usando Maven, basta incluir a depend\u00eancia a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;dependency&gt; \n   &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt; \n   &lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt; \n&lt;\/dependency&gt;<\/pre>\n\n\n\n<p>Usa Gradle? T\u00e3o f\u00e1cil quanto: inclua a depend\u00eancia tal como no exemplo a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dependencies { \n   implementation 'org.springframework.boot:spring-boot-starter-actuator' \n}<\/pre>\n\n\n\n<p>Inicie seu projeto e, na sequ\u00eancia, acesse este endere\u00e7o: http:\/\/localhost:8080\/actuator (imaginando que seu contexto seja &#8220;\/&#8221;). Voc\u00ea ver\u00e1 uma resposta similar a esta:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"387\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-13.png\" alt=\"endere\u00e7os essenciais\" class=\"wp-image-3222\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-13.png 548w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-13-300x212.png 300w\" sizes=\"(max-width: 548px) 100vw, 548px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Super legal: o Actuator est\u00e1 te mostrando quais os endpoints de monitoramento\/gerenciamento dispon\u00edveis. Por padr\u00e3o est\u00e3o vis\u00edveis apenas os endpoints de sa\u00fade (health) e informa\u00e7\u00f5es gerais (info). Experimente navegar por eles, ser\u00e1 uma experi\u00eancia frustrante ap\u00f3s ter lido este meu texto, pois voc\u00ea n\u00e3o v\u00ea nada do que prometi. Vamos resolver isto agora.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Endpoints &#8211; expostos vs habilitados<\/h2>\n\n\n\n<p>A unidade base do Actuator \u00e9 o endpoint. Qualquer a\u00e7\u00e3o que voc\u00ea realize no Actuator envolve o acesso a um dos endere\u00e7os disponibilizados pelo framework. Por seguran\u00e7a n\u00e3o temos todos os endpoints expostos, especialmente por que estamos usando um protocolo que, por padr\u00e3o, n\u00e3o \u00e9 seguro, o HTTP (n\u00e3o confundir com HTTPS, que tamb\u00e9m n\u00e3o \u00e9 t\u00e3o seguro assim quanto as propagandas da internet (&#8220;Ops!&#8221;) vendem).<\/p>\n\n\n\n<p>Sendo assim \u00e9 necess\u00e1rio alterar as configura\u00e7\u00f5es do Spring Boot (n\u00e3o sabe como fazer com seguran\u00e7a? J\u00e1 escrevi sobre elas <a href=\"https:\/\/devkico.itexto.com.br\/?p=3157\">aqui<\/a>) para identificar quais os itens que ser\u00e3o expostos. Quer expor todos? Ent\u00e3o mude o valor da configura\u00e7\u00e3o management.endpoints.web.exposure.include com o valor * tal como no exemplo abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">management.endpoints.web.exposure.include=*<\/pre>\n\n\n\n<p>Aten\u00e7\u00e3o: se sua configura\u00e7\u00e3o estiver no formato yaml, digite &#8216;*&#8217; ao inv\u00e9s de *. Acesse novamente o endere\u00e7o base do Actuator: http:\/\/localhost:8080\/actuator<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"715\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-14.png\" alt=\"Listagem dos endpoints\" class=\"wp-image-3223\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-14.png 534w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-14-224x300.png 224w\" sizes=\"(max-width: 534px) 100vw, 534px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Olha a\u00ed um monte de endpoints dispon\u00edveis pra voc\u00ea agora (inclusive o &#8220;shutdown&#8221;, que habilitei de prop\u00f3sito e \u00e9 desabilitado por padr\u00e3o). H\u00e1 dois conceitos aqui:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Endpoints ativos<\/strong> &#8211; todos (com exce\u00e7\u00e3o de um (ent\u00e3o n\u00e3o s\u00e3o todos, qual \u00e9 este? \u00e9 o shutdown)) s\u00e3o ativos por padr\u00e3o, isto \u00e9, podem ser executados.<\/li><li><strong>Endpoints expostos<\/strong> &#8211; s\u00e3o os endpoints que podem ser acessados remotamente por HTTP ou JMX.<\/li><\/ul>\n\n\n\n<p>O endpoint pode estar vis\u00edvel por essencialmente dois protocolos quando estamos tratando do Actuator: JMX ou HTTP. Neste post vamos falar s\u00f3 de HTTP, mas voc\u00ea pode aprender mais sobre o que \u00e9 o JMX <a href=\"https:\/\/devkico.itexto.com.br\/?p=3169\">neste meu texto<\/a> e como trabalhar com JMX e Actuator <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-jmx\">neste link<\/a> da documenta\u00e7\u00e3o.<\/p>\n\n\n\n<p>N\u00e3o \u00e9 uma boa ideia expor todos os endpoints. O ideal \u00e9 que voc\u00ea exponha <strong>apenas o que realmente faz sentido<\/strong>, pois quanto mais pontos de monitoramento estiverem vis\u00edveis, maior \u00e9 a \u00e1rea de ataque aos seus sistemas. Sendo assim entra um novo conceito aqui: o <strong>identificador do endpoint.<\/strong><\/p>\n\n\n\n<p>Todo indicador (endpoint) no Actuator tem seu pr\u00f3prio identificador. A lista dos identificadores padr\u00e3o pode ser conferida neste <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-endpoints\">link<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como ativar endpoints<\/h3>\n\n\n\n<p>Voc\u00ea deve seguir a seguinte sintaxe para ativar um endpoint individualmente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">management.endpoint.[identificador do endpoint].enabled=(true|false)<\/pre>\n\n\n\n<p>Vamos a alguns exemplos, habilitando o info e desabilitando o shutdown:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">management.endpoint.info.enabled=true<br>management.endpoint.shutdown.enabled=false<\/pre>\n\n\n\n<p>Como mencionei agora h\u00e1 pouco, todos os endpoints est\u00e3o ativados por padr\u00e3o com exce\u00e7\u00e3o do &#8220;shutdown&#8221;. Mas e se voc\u00ea n\u00e3o quiser este comportamento? E se quiser habilitar um a um os endpoints que deseja? A\u00ed basta alterar a configura\u00e7\u00e3o management.endpoints.enabled-by-default tal como no exemplo a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># pronto, agora voc\u00ea vai ter de definir um a um os endpoints ativos<br>management.endpoints.enabled-by-default=false<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Como expor endpoints<\/h3>\n\n\n\n<figure class=\"wp-block-image alignwide size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"867\" height=\"370\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/hidden.jpg\" alt=\"Expondo e ocultando endpoints\" class=\"wp-image-3226\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/hidden.jpg 867w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/hidden-300x128.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/hidden-768x328.jpg 768w\" sizes=\"(max-width: 867px) 100vw, 867px\" \/><\/figure>\n\n\n\n<p>Por padr\u00e3o apenas os endpoints info e health est\u00e3o expostos por padr\u00e3o ao protocolo HTTP. \u00c9 muito importante que voc\u00ea leve <strong>seguran\u00e7a<\/strong> em considera\u00e7\u00e3o aqui, sendo assim recomendo que voc\u00ea exponha apenas os endpoints que sejam <strong>realmente importantes<\/strong> para sua equipe.<\/p>\n\n\n\n<p>Novamente, vamos lidar com algumas configura\u00e7\u00f5es do Spring Boot aqui. A primeira delas diz quais os endpoints que voc\u00ea quer expor: management.endpoints.web.exposure.include. Ela pode receber dois valores: &#8220;*&#8221; ou a lista de identificadores separados por v\u00edrgula, tal como no exemplo a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># expondo todos os endpoints<br>management.endpoints.web.exposure.include=*<br># expondo apenas os endpoints que nos interessam: health, info, metrics<br>management.endpoints.web.exposure.include=health,info,metrics<\/pre>\n\n\n\n<p>Mas pra complicar (ou n\u00e3o) um pouquinho as coisas h\u00e1 outra propriedade que tamb\u00e9m define os endpoints que desejamos <strong>ocultar<\/strong>. \u00c9 a configura\u00e7\u00e3o management.endpoints.web.exposure.exclude. Exclude tem preced\u00eancia sobre o que ser\u00e1 exposto. E a mesma sintaxe que temos para o include, temos para o exclude.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Seguran\u00e7a<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-1024x422.jpg\" alt=\"Seguran\u00e7a\" class=\"wp-image-3227\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-1024x422.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-300x124.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca-768x316.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/seguranca.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Tudo muito bonito: com o Actuator podemos ver praticamente tudo sobre o estado corrente da nossa aplica\u00e7\u00e3o e tamb\u00e9m o ambiente no qual ela est\u00e1 sendo executada. E com as configura\u00e7\u00f5es padr\u00e3o inclusive <strong>quem n\u00e3o deveria ter acesso a estas informa\u00e7\u00f5es<\/strong>. <\/p>\n\n\n\n<p>Algu\u00e9m interessado em lhe causar problemas sabe tudo sobre sua aplica\u00e7\u00e3o: quais pontos da aplica\u00e7\u00e3o podem n\u00e3o estar funcionando corretamente (healthcheck), quanta mem\u00f3ria est\u00e1 dispon\u00edvel, idem espa\u00e7o de armazenamento, quantas requisi\u00e7\u00f5es por segundo sua aplica\u00e7\u00e3o recebe, o que sai no log, como est\u00e1 seu banco de dados&#8230; enfim, \u00e9 o prato cheio pra quem quer invadir sua plataforma. E claro, usando um protocolo dispon\u00edvel a todos: HTTP. Com um browser qualquer descubro como lhe causar pesadelos. Vejamos como evitar isto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spring Security<\/h2>\n\n\n\n<p>Se sua aplica\u00e7\u00e3o usa Spring Security (use), \u00e9 relativamente f\u00e1cil limitar o acesso aos endpoints do Actuator com base nas permiss\u00f5es do usu\u00e1rio. O caminho mais popular \u00e9 estender a classe de configura\u00e7\u00e3o WebSecurityConfigurerAdapter sobrescrevendo o m\u00e9todo configure tal como no exemplo a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Configuration\n@EnableWebSecurity\n@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)\npublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {\n   @Override\n   protected void configure(HttpSecurity http) throws Exception {\n     http\n       .sessionManagement()\n       .sessionCreationPolicy(SessionCreationPolicy.NEVER)\n       .and()\n         .authorizeRequests()\n         <strong>.antMatchers(\"\/actuator\/<\/strong>\").hasAuthority(\"ROLE_ADMIN\")\n         .anyRequest().authenticated()\n      .and()\n        .csrf().disable();\n   }\n}<\/pre>\n\n\n\n<p>Observe, este \u00e9 um c\u00f3digo de mera refer\u00eancia, vai dar um pouquinho mais de trabalho no seu projeto, pegue apenas a ideia geral. Neste caso, apenas os usu\u00e1rios com a permiss\u00e3o (authority) ROLE_ADMIN ter\u00e3o acesso aos endpoints.<\/p>\n\n\n\n<p>Caso queira mais exemplos, sugiro que voc\u00ea confira <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-endpoints-security\">este<\/a> e <a href=\"https:\/\/stackoverflow.com\/questions\/56117631\/how-to-secure-actuator-endpoints-with-role-in-spring-boot-2\">este<\/a> link. Mas o ponto \u00e9: <strong>restrinja o acesso<\/strong>.<\/p>\n\n\n\n<p>Caso o Spring Security n\u00e3o seja uma op\u00e7\u00e3o, h\u00e1 outras: voc\u00ea pode implementar um filtro, por exemplo, e neste adotar outro tipo de autentica\u00e7\u00e3o, como Basic Auth (n\u00e3o recomendo) por exemplo ou mesmo headers de API Keys.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mude as configura\u00e7\u00f5es padr\u00e3o<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Mudando o base path padr\u00e3o <\/h3>\n\n\n\n<p>Se eu quiser varrer sua rede em busca de informa\u00e7\u00f5es sobre sua infra a primeira coisa que farei \u00e9 buscar endere\u00e7os padr\u00e3o. O endere\u00e7o padr\u00e3o do Actuator \u00e9 &#8220;\/actuator&#8221;. Sendo assim, vamos mudar esta configura\u00e7\u00e3o? \u00c9 simples, voc\u00ea usa a chave management.endpoints.web.base-path , tal como no exemplo abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># mudando de \/actuator para \/segredos<br>management.endpoints.web.base-path=\/segredos<\/pre>\n\n\n\n<p>Recomendo que voc\u00ea use sua criatividade neste nome, o que pelo menos ir\u00e1 dar um pouco mais de trabalho para quem estiver tentando encontrar seu endere\u00e7o base do Actuator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use outra porta<\/h3>\n\n\n\n<p>Esta \u00e9 outra boa dica. Voc\u00ea pode configurar o Actuator para usar uma porta diferente daquela adotada por sua aplica\u00e7\u00e3o. Sendo assim sua API poderia operar na porta 443 (HTTPS) por exemplo, e o Actuator na porta 1979. Com isto, configurando seu firewall (ou regras de acesso a portas do seu servi\u00e7o cloud) voc\u00ea consegue limitar quais endere\u00e7os poder\u00e3o ter acesso ao Actuator na porta customizada. A chave de configura\u00e7\u00e3o usada \u00e9 a management.server.port. O exemplo abaixo define a porta 1979 para o Actuator:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">management.server.port=1979<\/pre>\n\n\n\n<p>Tente acessar o Actuator pela porta padr\u00e3o da aplica\u00e7\u00e3o e o que voc\u00ea recebe? 404!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"353\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-15.png\" alt=\"\" class=\"wp-image-3229\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-15.png 558w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/image-15-300x190.png 300w\" sizes=\"(max-width: 558px) 100vw, 558px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configure CORS<\/h2>\n\n\n\n<p>Se voc\u00ea quer que c\u00f3digo JavaScript cliente acesse seus endpoints do Actuator (tem certeza disto?) \u00e9 poss\u00edvel habilitar CORS para os endpoints usando as chaves expostas no exemplo a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># as origens\n<strong>management.endpoints.web.cors.allowed-origins<\/strong>=https:\/\/itexto.com.br\n# quais m\u00e9todos\n<strong>management.endpoints.web.cors.allowed-methods<\/strong>=GET,POST<\/pre>\n\n\n\n<p>N\u00e3o sabe o que \u00e9 CORS? Leia este <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/CORS\">texto<\/a>. Mais detalhes sobre o uso de CORS na documenta\u00e7\u00e3o oficial do Actuator <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-endpoints-cors\">aqui<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SSL<\/h2>\n\n\n\n<p>J\u00e1 que voc\u00ea definiu uma porta diferente pro seu servidor, por que n\u00e3o jogar um certificado SSL no mesmo pra deixar a coisa ainda mais segura?<\/p>\n\n\n\n<p>A configura\u00e7\u00e3o a seguir exp\u00f5e exatamente isto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># a porta customizada do servidor\n<strong>management.server.port<\/strong>=1979 \n# habilitando SSL nesta porta\n<strong>management.server.ssl.enabled<\/strong>=true \n# o keystore que cont\u00e9m seu certificado\n<strong>management.server.ssl.key-store<\/strong>=classpath:management.jks \n# a senha de acesso ao keystore\n<strong>management.server.ssl.key-password<\/strong>=secret<\/pre>\n\n\n\n<p>Maiores detalhes neste <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html#production-ready-management-specific-ssl\">link<\/a>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Concluindo a introdu\u00e7\u00e3o e preparando a jornada<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"975\" height=\"470\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando.jpg\" alt=\"Finalizando\" class=\"wp-image-3231\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando.jpg 975w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando-300x145.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/finalizando-768x370.jpg 768w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Nosso caminho com Actuator est\u00e1 s\u00f3 come\u00e7ando. Meu objetivo neste post foi te mostrar o que \u00e9 esta ferramenta, abrir seus olhos para algumas das possibilidades que ela nos d\u00e1 e, principalmente, te preparar para o maior risco que v\u00eam com ela: a exposi\u00e7\u00e3o de dados sens\u00edveis a partir dos endpoints disponibilizados.<\/p>\n\n\n\n<p>A partir de agora meu objetivo \u00e9 ir pra pr\u00e1tica: vou te ensinar a implementar seus pr\u00f3prios endpoints de health checking, como enriquecer as informa\u00e7\u00f5es apresentadas pelo seu sistema, lidar com auditoria e implementar seus pr\u00f3prios endpoints.<\/p>\n\n\n\n<p>At\u00e9 l\u00e1!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Para saber mais<\/h2>\n\n\n\n<p><strong>Documenta\u00e7\u00e3o oficial do Actuator<\/strong> &#8211; <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html \">https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/production-ready-features.html <\/a><\/p>\n\n\n\n<p><strong>API do Actuator<\/strong> &#8211; te exp\u00f5e todos os detalhes sobre os endpoints padr\u00e3o disponibilizados pela ferramenta &#8211; <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/2.4.1\/actuator-api\/htmlsingle\/\">https:\/\/docs.spring.io\/spring-boot\/docs\/2.4.1\/actuator-api\/htmlsingle\/<\/a><\/p>\n\n\n\n<p><strong>Entendendo as configura\u00e7\u00f5es do Spring Boot<\/strong> &#8211; \u00e9 fundamental que voc\u00ea entenda como as configura\u00e7\u00f5es do Spring Boot funcionam. Ent\u00e3o escrevi <a href=\"https:\/\/devkico.itexto.com.br\/?p=3157\">este texto<\/a>.<\/p>\n\n\n\n<p><strong>Conhe\u00e7a JMX<\/strong> &#8211; o texto que nasceu deste aqui e que cont\u00e9m muitos conceitos que voc\u00ea deve conhecer tamb\u00e9m. Leia <a href=\"https:\/\/devkico.itexto.com.br\/?p=3169\">aqui<\/a>.<\/p>\n\n\n\n<p><strong>Documenta\u00e7\u00e3o oficial do Spring Security<\/strong> &#8211; <a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/5.4.2\/reference\/html5\/\">https:\/\/docs.spring.io\/spring-security\/site\/docs\/5.4.2\/reference\/html5\/<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conhe\u00e7a um recurso pouco aproveitado do Spring Boot: o Actuator, que te permite monitorar e gerenciar suas aplica\u00e7\u00f5es.<br \/>\nPrimeiro post da s\u00e9rie!<\/p>\n","protected":false},"author":1,"featured_media":3206,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[113,6,87,59],"tags":[112,109,110,115,107,114,116],"class_list":["post-3205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actuator","category-java","category-spring-boot","category-spring-framework","tag-actuator","tag-devops","tag-monitoramento","tag-spring-actuator","tag-spring-boot","tag-spring-boot-actuator","tag-spring-framework"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Conhecendo o Actuator do Spring Boot - \/dev\/Kico<\/title>\n<meta name=\"description\" content=\"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=3205\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conhecendo o Actuator do Spring Boot\" \/>\n<meta property=\"og:description\" content=\"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=3205\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-13T02:23:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-13T02:26:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"480\" \/>\n\t<meta property=\"og:image:height\" content=\"472\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Conhecendo o Actuator do Spring Boot\" \/>\n<meta name=\"twitter:description\" content=\"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=3205\",\"name\":\"Conhecendo o Actuator do Spring Boot - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg\",\"datePublished\":\"2020-12-13T02:23:59+00:00\",\"dateModified\":\"2020-12-13T02:26:02+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"description\":\"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!\",\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=3205\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg\",\"width\":480,\"height\":472,\"caption\":\"Spring Boot Actuator\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=3205#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conhecendo o Actuator do Spring Boot\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conhecendo o Actuator do Spring Boot - \/dev\/Kico","description":"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=3205","og_locale":"pt_BR","og_type":"article","og_title":"Conhecendo o Actuator do Spring Boot","og_description":"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!","og_url":"https:\/\/devkico.itexto.com.br\/?p=3205","og_site_name":"\/dev\/Kico","article_published_time":"2020-12-13T02:23:59+00:00","article_modified_time":"2020-12-13T02:26:02+00:00","og_image":[{"width":480,"height":472,"url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","type":"image\/jpeg"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_title":"Conhecendo o Actuator do Spring Boot","twitter_description":"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!","twitter_image":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=3205","url":"https:\/\/devkico.itexto.com.br\/?p=3205","name":"Conhecendo o Actuator do Spring Boot - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","datePublished":"2020-12-13T02:23:59+00:00","dateModified":"2020-12-13T02:26:02+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"description":"Conhe\u00e7a um recurso poderos\u00edssimo do Spring Boot: o Actuator, que te permite monitorar e gerenciar facilmente suas aplica\u00e7\u00f5es Spring!","breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=3205#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=3205"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=3205#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","width":480,"height":472,"caption":"Spring Boot Actuator"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=3205#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Conhecendo o Actuator do Spring Boot"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2020\/12\/spring_actuator.jpg","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3205"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3205"}],"version-history":[{"count":16,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3205\/revisions"}],"predecessor-version":[{"id":3236,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/3205\/revisions\/3236"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/media\/3206"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}