Olá, vamos continuar falando aqui de métricas e antes de voltar no HandZone, é importante, um sistema muito bem utilizado, muito forte para monitoramento e apoiar nos pilares e abordagem de observabilidade. E como um banco de time series, ele armazena os dados, no caso as métricas, de forma cronológica. Então, cada evento que você envia ou ele captura, ele guarda no seu sistema de forma cronológica. Então, cada evento que você envia ou ele captura, ele guarda no seu sistema de forma cronológica e de acordo com alguma métrica temporal, ou seja, a cada cinco minutos, a cada dois segundos, vamos olhar isso na para certos tipos de situação. Exemplo, imagina que, e aí, claro, fugindo aqui do contexto de monitoramento um pouquinho e olhando de forma ampla, um banco de time series é muito útil para quando você tem, por exemplo, cenários de auditoria e, por exemplo, dados de contratos, de clientes, enfim, você quer garantir que esses dados não sejam deletados ou deturpados ou alterados indevidamente, você quer garantir versionamento desses registros em caso de alguma auditoria você conseguir resgatar a versão ou como aquele dado estava anteriormente. Então, é um banco de dados muito interessante para esse tipo de situação e outros mais. Por exemplo, você tem um outro tipo de cenário em que você precisa retroagir no passado para refazer algum tipo de processamento. Por exemplo, no âmbito financeiro, em que você precisa calcular taxa de juros e você precisa garantir que a taxa seja calculada de forma diária e de forma cronológica, porque se houver algum cálculo errado, você consegue retroagir e recalcular. Ou, por exemplo, composição de saldo financeiro da conta corrente, ou cada evento de movimento de conta corrente, de débito e crédito, pode ser armazenado de forma cronológica, e o seu saldo é a composição dos eventos de soma e subtração da sua conta. Então o banco de time series é muito útil e o Prometheus não está sozinho nessa, você tem vários outros bancos, várias outras tecnologias que entregam esse tipo de funcionalidade. O Graphite é um banco muito similar ao Prometheus, ele tem uma proposta de entrega de uso similar, porque ele tem funcionalidades aqui, features voltadas para monitoramento, mas você tem, por exemplo, o Timescale DB, que é um banco baseado em Postgres, ou melhor, ele é basicamente o Postgres com um add-on ali, uma feature adicional, um plugin, que faz com que o Postgres habilita o Postgres a trabalhar como um time series. Você também tem o InfluxDB, o Amazon TimeStreams e vários outros bancos de dados de time series. E aí, como que o Prometheus se integra com a sua aplicação? Um dos modos é o modo pool, que o Prometheus vem buscar as métricas na sua aplicação. Deixa eu mostrar como que ele funcionaria. Você tem, por exemplo, do lado esquerdo a sua aplicação rodando ali numa máquina virtual, num container, num docker, enfim, envolto ali, por exemplo, da JVM como plataforma. Você tem o serviço do Prometheus e o Grafana. O Grafana a gente já vai falar dele mais pra frente, E o Grafana? O Grafana a gente já vai falar dele mais para frente, mas é o serviço que vai servir como de dashboard, de camada visual, porque o Prometheus não entrega uma interface muito user-friendly. É um excelente banco de dados performático para esse tipo de dados, mas o Grafana é muito melhor do ponto de vista de visualização, de gráfico, de dash, etc. Então, no ambiente em que você teria uma arquitetura mais ou menos parecida com essa, no final você tem um time que vai acessar as telas no Grafana para consultar esses dados, e eu preciso fazer com que as métricas cheguem da API até o Prometheus, e do Prometheus até o Grafana, até o time que vai, de fato, consumir esses dados, essas métricas. Então, como que funciona? Do lado da aplicação, nós utilizamos, acabamos de fazer no vídeo anterior, a configuração do Prometheus com micrômetro, a biblioteca do micrômetro que externaliza as métricas do actuator no formato que o Prometheus consegue interpretar. E disponibilizamos um path, um endpoint com path actuator Prometheus para aplicação. E como o nome já diz, o Prometheus tem uma peça, um agent aqui que roda de tempos em tempos, de acordo com a configuração que você parametrizar, e ele vem buscar na sua aplicação esses dados. Ele pega então todas aquelas métricas que nós disponibilizamos no único lote, pega todos aqueles dados e guarda esses dados na base interna aqui do Prometheus. E com os dados carregados no Prometheus, agora o Grafana conseguiria realizar carries e consultar essas métricas. No Grafana você então pode realizar configuração de dashboards e até inclusive de alerta, alarmes, enfim, Mas o Promittus também não fica atrás. Ele tem uma tela simples, bastante rudimentar, para você conseguir realizar algumas carries muito mais ali de teste mesmo, testar algumas carries, mas é claro que o ideal é você pegar essas carries e jogar de fato e cadastrar num serviço que vai te entregar uma experiência visual muito melhor. O Prometheus também habilita a configuração de alertas através do serviço do Alert Manager que vem junto com o Prometheus e o time conseguiria usufruir desse serviço aqui do lado do Prometheus. Agora também existe um outro modo de envio das métricas para o Prometheus que é a aplicação proativamente enviar essas métricas para o Prometheus. E como que ficaria essa configuração? De novo, você tem a sua aplicação, o Grafana e o Prometheus. Só que tem um pequeno problema. Vou mostrar a documentação do Prometheus já já, mas de acordo com a documentação, não existe uma forma explícita ou direta de você cadastrar as métricas no Promissos, em outras palavras. Ele não externaliza um API ou um endpoint para que você consiga chamar e realizar post, put de métricas diretamente através dele. O que ele entrega para você é um outro serviço complementar, que é o Push Gateway. um outro serviço complementar que é o PushGateway. O PushGateway é uma API que te ajuda ou simplifica esse trabalho de forma que o Prometheus continue atuando como ele atua hoje, que é vir buscar as métricas em algum lugar e você poderia enviar as métricas para o Prometheus e quem vai ajudar nisso nesse caso é o PushGateway que vai atuar como um um barramento ali de comunicação comum entre a aplicação e o Prometheus. Essa configuração e antes de entrar no detalhe, ela é muito útil, principalmente quando você tem uma aplicação que roda no ambiente mais tradicional onde você não tem como externalizar um e às vezes nem faz sentido. Imagine aquelas aplicações que são do tipo worker ou batch que rodam e fazem um processamento rápido ou tempestivo de algum dado, de algum arquivo que chega, processa aquele dado e no final ela finaliza, encerra a execução e até a próxima execução. E você quer, naquele período de execução, capturar essas métricas e enviar para o Prometheus. Não faz sentido você, de fato, externalizar um endpoint e mesmo que faça, supondo que seja um serviço rodando no Windows Server ou no Linux mais tradicional, só que você tem uma dificuldade de ponto de vista de firewall para externalizar esse endpoint externamente. Enfim, pode ser N os motivos pelo qual você teria dificuldade de externalizar um endpoint, então você precisa instrumentar a aplicação para que ela envie pro Meteos e a forma de fazer isso é através do PushGateway. Então, como que ficaria? Dessa vez, em vez da aplicação utilizar o micrômetro diretamente para externalizar o endpoint, você vai utilizar a biblioteca do PushGateway, uma biblioteca que você configura na aplicação, e ela que vai fazer a requisição para o serviço do PushGateway, que também disponibiliza um endpoint para você consumir. Uma vez disponibilizando esse endpoint, esses dados aqui e a aplicação enviando esses dados através do endpoint, esses dados são armazenados numa base que eu prefiro dizer que é temporária porque o PostGator provavelmente não vai ter o mesmo apetite de SLA, de disponibilidade que você vai empregar no Prometheus. A ideia é que esses dados repousem ali temporariamente, em caso do serviço cair, o objetivo não é impactar a aplicação. Então, os dados são gravados aqui temporariamente, e por esse mesmo endpoint que a aplicação acessa para enviar os dados, o Prometheus acessa para buscar e baixar essas métricas e armazenar na sua base de dados localmente. Uma vez essa configuração sendo feita e a comunicação estabelecida entre os serviços, o Grafana consegue vir buscar essas informações no Prometheus. E de novo, você também continua contando com telas e alarmes em ambos os dois serviços. Vou mostrar aqui a documentação do Prometheus, mas qualquer informação tem aqui no site prometheus.io, e aí tem dados sobre como fazer a instrumentação e algumas boas práticas. Estou aqui com a documentação do Prometheus, e aqui ele mostra como instrumentar as aplicações, principalmente do ponto de vista de push, de forma que você envia esses dados para o Prometheus. E aqui, por exemplo, no caso do Java, ele utiliza ou comenta sobre o Post Gateway, pra Go você pode utilizar o Post e Add Methods, pro Python tem um Exporting aqui do Post Gateway, essas documentações complementares. Quero mostrar também algumas limitações sobre o uso do Post Gateway. Aqui existe um disclaimer do Prometheus sobre o uso do Post Gateway, onde ele se recomenda apenas em certos casos limitados. Então, existem alguns riscos ou problemas que você pode acabar enfrentando se você usar o Post Gateway de forma não conscientemente dos impactos relacionados. Um deles, por exemplo, se você estiver monitorando múltiplas instâncias através de um único endpoint do Push Gateway, o Push Gateway, no caso, ou seja, um único serviço, sem um balanceamento, e lembrando que você vai ter que implementar por conta se você precisar de um balanceamento, etc, e um mecanismo de failover, o PostGator pode se tornar um ponto único de falha e potencialmente até se tornar um gargalo para o seu processo de monitoramento de observabilidade. Então, tem outras informações aqui relevantes que valem olhar e entender. E a própria documentação do Prometheus no geral ela tem bastante informação vou mostrar mais à frente como realizar carries através do Prometheus e onde você encontrar mais informações aqui na documentação