Olá vamos voltar aqui para o hands-on e dessa vez vamos subir o serviço do Prometheus usando docker-compose e configurá-lo para que ele venha buscar as métricas na aplicação através do path actuator Prometheus e essa configuração inicialmente vamos fazer aqui no arquivo prometheus.yaml que é essa configuração do script config e ela fica no arquivo promissos.yaml que eu tenho já parametrizado o que eu tenho aqui o nome do job apenas por uma questão de identificação as métricas vão aparecer no serviço do promissos com a identificação do job geralmente é bom que esse job correlacione a aplicação do job é geralmente é bom que esse job correlacionem a aplicação de fato é para facilitar o filtro e segregação das aplicações conforme fizer sentido o path do endpoint que o Prometheus vai acessar para obter as informações o scrape interval é o tempo no qual o Prometheus vai acessar para obter as informações. O scrape interval é o tempo no qual o Prometheus irá acessar a aplicação, ou seja, a cada 3 segundos, o job do Prometheus irá buscar essas métricas na rota da aplicação do Pest do Prometheus. Algumas configurações adicionais, como targets. Aqui, targets, no caso, só estou parametrizando um, porque eu tenho uma única aplicação, mas poderia ter mais, a porta 8080, e estou incluindo um label aqui com o nome da aplicação Store API. Bom, e como que eu referencio esse arquivo agora? Aqui embaixo eu tenho também o docker-compose e o serviço do Prometheus parametrizado, basicamente referenciando a imagem do Prometheus no docker-hub, o nome do container Prometheus, no command eu estou passando o arquivo de configuração que é aquele que acabamos de ver, a porta externalizada que é de acesso a 9090, vamos inclusive acessar a tela administrativa do Promissos através dessa porta, e é essa mesma porta que o Promissos permite interação com ele. Alguma configuração adicional, no caso de reinicialização do container, configuração de volumes para persistência dos dados de métricas etc. Eu já tenho configurado aqui o docker-compose com mais alguns serviços que eu vou explicar mais adiante mas toda a configuração do Prometheus está aqui já. Com essa configuração basicamente você precisa acessar a pasta e rodar docker-compose-app vou subir com "-d", para rodar em background neste momento a minha aplicação não está rodando, mas o serviço do Prometo já está vindo nesse endpoint aqui a cada 3 segundos nessa porta para consultar os dados. Bom, como não alterei mais nada na aplicação, a aplicação está da forma que deixamos, então eu vou rodar aqui e a partir desse momento ela já vai começar a fornecer informações para o Prometheus acessar. Ela está subindo ainda, já vou acessar para dar uma conferida aqui e enquanto isso é só dando um disclaimer aqui na configuração do docker compose perdão na configuração do prometheus.yaml estou referenciando host através desse endpoint host docker internal que é o barramento do docker ali que permite eu comunicar um container e se comunicar com o host que é a minha máquina principal como eu estou utilizando o IntelliJ para rodar a aplicação diretamente do host e o container do Prometheus está rodando de fato dentro da infraestrutura do docker eu estou fazendo esse acesso através do host Docker internal. Bom, terminou de subir a aplicação, tenho as métricas externalizadas aqui agora, e agora a gente vai acessar o serviço do Prometheus através da porta 9090. Bom, acessamos o Prometheus aqui, e como ele está vindo a cada três segundos, provavelmente já tem alguma métrica para a gente consultar. Se você clicar aqui nesse botão que é para explorar métricas, você já consegue visualizar várias métricas já disponibilizadas pela aplicação. Vamos consultar aqui algumas, você pode pesquisar por aqui ou pode pesquisar também por aqui. Por exemplo, eu quero pegar a HTTP server requests count, second count, e executar. Ele já está trazendo aqui, ele traz essa linha contendo todos os dados daquela métrica, os metadados, da application store API, que é o label que eu comentei lá na configuração do job do prometheus.yaml. O que mais? Aqui eu tenho a aplicação também, a instância, no caso o host, o target no arquivo prometheus.yaml, o job, que conforme está na configuração do prometheus.yaml, e aqui os dados que foram capturados da aplicação que diz respeito à métrica em questão, o método get, sucesso e status. E observe que a URL é o actuator Prometheus, ou seja, a rota que está sendo mais acessada de fato, porque a cada 3 segundos o Prometheus vai realizar uma consulta nesse endpoint. Então, se eu fizer nova consulta, você observa que aumentou para 44 acessos, 46 agora e vai crescer a cada 3 segundos, porque o Prometheus está fazendo as consultas na aplicação. o Prometheus está fazendo as consultas na aplicação voltando aqui para o passo a passo vamos olhar o que a gente consegue fazer com essa tela, com essa interface do Prometheus, podemos realizar já algumas carries é claro que essas carries elas, é interessante que você utilize a interface apenas para uma consulta tempestiva ou temporária, de repente explorar alguma métrica, enfim, mas é interessante para o time, de fato, que essas carries sejam portadas para um serviço de visualização mais sofisticado, como é o caso do Grafano, que vamos falar mais adiante. Mas você consegue realizar algumas queries bem interessantes, por exemplo, antes de seguir por aqui, vamos acessar aqui o Insomnia e através dele começar a realizar algumas consultas, algumas requisições. Então, aleatoriamente vou fazer algumas consultas aqui algumas solicitações de criação solicitação de pedidos algumas consultas consultas com o edin válido consulta cancelamento inválido também vamos olhar agora como que ficou verificou a rota de count todas as requisições apareceram aqui algumas foram feitas eu fiz várias vezes mesmo então apareceu a contagem de 10 requisições para rota de orders por método get orders 5 requisições por get orders id e que que dá para fazer agora? da mesma forma que nós fizemos os filtros lá no endpoint, no path de metrics, agora a gente está de fato num serviço um pouquinho mais sofisticado e podemos realizar carries ainda mais sofisticadas também, por exemplo supondo que eu queira filtrar por status code, o status aqui da aplicação você colocaria abre chaves aqui depois da métrica você abre chaves e na sequência você digita o campo que você quer filtrar nesse caso eu vou pesquisar por status igual é e aí entre aspas 200 por exemplo então todas as métricas especificamente aqui retornando 200 status code 200 vamos pegar outra métrica outro status code por exemplo 405 exemplo 405 tivemos cinco requisições com status code 405 um foi o método delete e outro foi o método put o que mais que dá para fazer será que dá para buscar pela rota especificamente por exemplo ou pelo método também dá além de consultar pelo status você também pode consultar pelo método você informa vírgula e e o próximo campo que você deseja filtrar então vou colocar igual eu quero somente métricas é do pé do método put do método put o que mais que dá para fazer com o Prometheus dá para fazer busca aproximada também supondo que você queira pegar status code de repente você está criando uma métrica e quer fazer uma contabilização de todos todas as requisições que deram sucesso requisições que deram sucesso. Só que requisições que deram sucesso incluem status code 200, 201, se você tem uma rota que retorna 202, que é a requisição aceita. Então, tem uma gama de status code que pode retornar 200. Para isso, você pode utilizar, depois do do igual o símbolo de busca aproximada aí você vai digitar 200 e diferente agora de outros mecanismos de filtro aqui você tem que utilizar ponto mais para busca aproximada é muito parecido com um rejeito patrônica é você para o caractere que você quer representar como busca aproximada você coloca. Mais se você quiser 200 o 20 e o último número você pode colocar dos 20 aqui e último número com busca aproximada. Você também pode inverter a ordem, acho que não faria muito sentido no caso aqui, mas você pode também. E vamos trazer todos os status codes que começam com 2, no caso 200. E aí eu trouxe todas as endpoints aqui. Vamos fazer para requisições que falharam com o erro 400, 4xx, né? eu tenho aqui as requisições que falharam com o erro 400, ou seja, eu tenho 404 endpoints que não foram encontrados aqui, 405 também. O que mais que dá para fazer aqui? Vamos supor que você queira filtrar agora por método, vamos trazer todas as métricas aqui, e eu quero trazer agora por por URL eu quero trazer tudo que é URL, por exemplo orders, mas observe que eu tenho orders raiz e orders id e aí orders id inclusive cancel pouco importa o que vem depois eu quero saber o que que se por exemplo determinado endpoint ou funcionalidades Qual que é o volume de uso de determinada funcionalidade você pode também então se você colocar o RI é igual símbolo aqui para busca aproximada aqui o acento aqui para busca aproximada e você pode começar como barra ou asterisco caso tenha alguma outra coisa no prefixo e orders orders no plural asterisco ops orders no plural asterisco ops coloquei asterisco na verdade ponto mais ponto mais ponto mais foi, trouxe aqui ou no caso como começa com barra você poderia colocar barra e filtrar apenas no final. Vou trazer todas as rotas de novo e supondo que agora você queira consultar todas as rotas, só que se você notar aqui eu tenho por exemplo requisições do actuator. Prometheus isso que ele tá trazendo bastante requisição naquele que vai estar aí na casa a cada três segundos mas se a sua aplicação tiver utilizando por exemplo um balanceador e o balanceador vai acessar muitas vezes a rota de health para saber se aplicação está saudável e isso vai aumentar ainda mais o número de requisições então às vezes a aplicação está saudável. E isso vai aumentar ainda mais o número de requisições. Então, às vezes a aplicação, aqui embaixo, 16 requisições para o Health, e às vezes a aplicação tem um baixo uso, de repente vai ter um aumento de ociosidade, só que essas rotas, essas consultas do Actuator vão acabar gerando outliers para as suas métricas como que eu faço para remover esses endpoints? você pode fazer a busca excludente nesse caso você pode colocar o RI símbolo de exclamação igual abre aspas e aí digitar a rota que você quer buscar é actuator vou colocar aqui rota de health por exemplo a rota de health agora sum subiu aqui a rota de Prometheus Mas voltou a rota de Health Será que não tem uma forma de eliminar todas as rotas do Actuator? Para não ficar aparecendo aqui? Dá também Em vez de utilizar a exclamação E igual, você troca o igual pelo símbolo de busca aproximada E aí você pode colocar aqui um ponto mais para você dizer é que tudo que tiver a partir de actuator você é ignore então ele trouxe agora ele removeu a rota do Prometheus e a rota do Prometheus e a rota do Hell. E um último exemplo aqui, supondo que você quisesse, bom, depois de tirar a rota do Actuator, que você ainda quer filtrar por vários métodos, você quer trazer não só a rota de Get, mas Post também, ou Put. Então você pode fazer, colocar, por exemplo, que é o nome do campo que vamos filtrar. Sempre utilizando busca aproximada, nesse caso, e aí você vai dizer quais que você quer separando sempre por pipe. De novo, muito similar com o do supondo que você queira trazer rota de está aqui, o método está aqui. Mas eu não quero só mais get apenas, quero também put, lembrando que aqui a busca, fazer um disclaimer aqui, a busca é sempre case sensitive, então se você digitar put minúsculo não vai trazer de fato, então eu trouxe aqui put também quero agora delete também está lá supondo que eu queira todos exceto get put você troca aqui de novo o igual pelo símbolo de negacel e ele vai trazer agora o oposto do post e o delete porque eu estou ignorando ou excluindo get e put não dá para fazer bastante coisa e exercitar aqui alguns testar alguns algumas filtros de métricas no prometidos