Olá pessoal, meu nome é Ronaldo Lanellas e nessa aula eu vou mostrar para vocês como monitorar o Kafka Broker. Eu diria que monitoria é uma das coisas mais importantes quando você fala de qualquer tipo de ferramenta, principalmente quando você está falando de produção. Eu, by far, digo que é a coisa que eu mais me preocupo quando a gente vai subir o Kafka. Ter uma monitoria muito bem feita, observability, métricas. Porque quando acontece um problema, o primeiro lugar que você vai olhar é para esse dashboard de monitoria. Então, primeiro eu vou mostrar para vocês como é que funciona a monitoria, como é que faz para montar. E aí, depois eu vou no dashboard. Mas resumindo, a gente vai usar o Planitius e Grafana. Existem diversas ferramentas que você pode usar, Datadog, New Relic, Dynatrace e etc. Eu optei pelo Planitius e Grafana por serem uma ferramenta open e que eu já usei em alguns projetos e eu acho bem legal bem completa mas nada impede de você usar uma ferramenta como o Datadog que eu acho muito completo também, extrai muito informação do Kafka a própria stack do Elasticsearch por exemplo tem o metricbit que eu também já usei e acho muito legal se você digitar aqui metric bit Kafka tem um módulo do metric bit específico que você consegue monitorar a saúde do cluster e etc. Inclusive é muito mais fácil do que você usar grafanoana e Promissos, porque já está tudo configurado, você só pluga o agente lá no cluster e está tudo certo. Você vai ver que o Promissos e Grafana dá um pouquinho mais de trabalho, mas também não é Rocket Science. Então vamos lá. Bom, primeiro eu tenho aqui aquele Value Docker Composer, Kugzooukiper e o Broker.hq. Eu adicionei mais duas peças aqui, que é o Promifius e o Grafana. Então, para quem não conhece, o Promifius é uma base Time Series, onde as métricas vão ser gravadas e o Grafana é a interface gráfica que conecta no Promixos para poder montar nos dashboards. E aí tem um detalhe. Se você nunca viu o Promixos na vida, não sabe o que é, etc. Eu aconselho que você dê uma lida depois na documentação do Promixos. Essa aqui. É bem completa, etc. Mas o que eu quero, só para simplificar aqui, é assim, o Promifers tem um formato específico de métrica. E como é que funciona? A sua aplicação expõe uma métrica no endpoint e o Promifers fica batendo nesse endpoint, o Promifers fica batendo nesse endpoint, coletando essas métricas e gravando na base de dados dele. Existem outras formas, obviamente, essa é a mais simples. Existe a forma de você mandar para o Promifers, mas não vamos complicar agora aqui. A ideia não é dar aula de Promifers, mas assim, o Promifers ele vai bater no seu endpoint, vai coletar essas métricas e gravar na base de dados dele. Bom, o Kafka não tem esse endpoint. O Kafka é Java. Então, ele expõe o que a gente chama de JTMX. E aí, esse JTMX não tem nada a ver com o Promifers. São métricas totalmente diferentes, etc. num formato específico, que é o JotMX. Aí você dá uma googada aqui, já o JotMX, que é uma estrutura totalmente diferente de métrica, não só de métrica, estou falando métrica porque a gente está falando de métrica, mas o JotMX dispõe de outras coisas também, você consegue, controlar a sua aplicação. Por exemplo, dar um stop, matar uma thread, enfim. É uma forma que você tem de comunicar com a sua aplicação, tá? Mas aqui a gente está falando de métrica, então o Kafka ele expõe as métricas através dessa arquitetura JMX. Beleza. Por que eu estou explicando isso? Porque isso não resolve para gente. A gente precisa de um formato específico que é o formato do Pramix, exposto no Endpoint que o Pramix consiga consultar. Aí existe um cara chamado Exporter. Então vamos lá. Eu vou copiar esse carinha aqui. Eu estou explicando bem devagar para vocês não se complicarem e ficar bem claro o que é um e o que é outro. Deixa eu abrir o GitHub do Xporter. Beleza. Aí existe um carinha chamado JMX Exporter. No GitHub do Promifios. Que ele faz o que? Imagine você. Ele pega o formato JMX. E converte para o formato Promifios. Perfeito. É isso que eu preciso. Eu preciso que ele leia o JMX. E converta para o formato Promifios. Para que o Promifix consiga ler. Então eu vou lá, baixo esse já, já baixei, tá? Então esse já aqui. Todos esses arquivos vão ser disponibilizados para vocês, tá? Depois. Eu coloco que ele vai ser exposto na porta 7071, tá? Eu coloco que ele vai ser exposto na porta 7071. E eu digo qual é o arquivo que ele vai ler para conseguir fazer essa conversão de métrica. Porque assim, imagina que lá no JMX tem uma métrica chamada latência do tópico. Um exemplo aqui. Como é que vai ser o nome dessa métrica no Promifius? Então eu tenho que ter esse arquivo que vai fazer o deparo, vai converter a métrica de latência tópico para, sei lá, latência tópico p, alguma coisa assim. Então esse arquivo aqui é um arquivo de configuração desse exporter, que vai dizer para o exporter como é que ele pode pegar essas métricas que estão lá no jbx e converter para um formato que o improviso consiga ler. Beleza? E tudo isso vai rodar como Java Agent. Então, é uma das opções que você pode rodar um exporter no Java, você pode rodar como sidecar, etc, tipo rodando um Kubernetes. Aqui no rodar como Java Agent é muito performático, né? Aqui no rodar como Java Agent é muito performático, comparado às outras opções. E aí o que acontece? Se a gente abrir esse Kafka Matrix, esse aqui também vou disponibilizar para vocês, ele já tem vários tipos de conversões etc. que dificilmente você vai precisar mexer, mas se você precisar, está aqui. Então, você consegue ver, por exemplo, o padrão. Aqui é o pattern, né? O pattern é o nome da métrica lá do JTMX e como é que ela vai se chamar lá no Promispos, etc. Então, tem várias métricas aqui. Voltando aqui, onde eu estava. Bom, aqui então com essa linha eu estou dizendo exatamente o que que o Kafka vai fazer, como é que ele vai fazer para converter JMX para Promiscas. Na verdade isso não tem nada a ver com Kafka, tem a ver com Java e Prometheus. Então se você olhar aqui em nenhum momento tem nenhuma configuração de Kafka, não tem relação nenhuma. Então se você tiver uma aplicação aí que está rodando JMX e precisa expor Prometheus, você pode usar a mesma estratégia aqui. Inclusive aqui no JTMX Export não tem nada de Kafka aqui. Você não vai ver nada de Kafka, é uma configuração genérica para pegar o JTMX e converter para Vamos descer aqui. É isso. Então vamos subir a aplicação. Na verdade eu já subi. Então se eu dar um composite up menos d. Só para garantir que está tudo ok. Está tudo running. Eu expus como eu falei para você. Esse endpoint. Uma porta chamada. Uma porta 7071. Então lembra que eu falei. Tem que ter um endpoint específico. Para eu expor essas métricas no formato Pramifis. Se eu agora vim aqui e dar um localhost 7071, nesse momento ele bateu lá no Kafka, leu o JMX e o export e converteu para Pramifis daqui o formato. Então esse é o formato que o premil se consegue entender. Tem o nome da métrica e o valor da métrica. E aqui esse hashtag é o comentário sobre essa métrica. Mas o nome da métrica é o valor. Nome, valor, nome, valor. E aí algumas métricas aqui tem dimensão. Então o que é dimensão? Você pode agrupar as métricas por dimensão e realizar filtros, etc. Por exemplo, você poderia pegar deixa eu descer aqui todas as métricas que tem o tópico igual a Confluence Telemetry Metrics. Você faz um filtro por dimensão da métrica. Beleza. Como eu falei, a ideia não é dar aula de promisso aqui. Vocês podem dar uma olhada na documentação depois. E aí eu tenho o Grafana, como eu falei para vocês, que está rodando na porta 3003. Bom, quando você vai usar o Grafana pela primeira vez, deixa eu sair aqui. Você vai pedir o usuário senha, o padrão é admin, admin ele vai perguntar se você quer alterar, eu vou dar um skip aqui, não quero alterar e a primeira coisa que você tem que fazer é configurar a conexão do Grafana com o Pramix, então você vai aqui, connections, data sources, eu já tenho tenho data source aqui mas eu vou abrir ele para mostrar para vocês o padrão do nome é promifius e aqui como eu estou rodando dentro de um network do docker eu só boto o nome do meu outro container que é promifius né então se voltar aqui no docker-compose. O nome aqui é promifios, tá? Promifios na porta 9090. Não precisa mexer mais nada aqui, dá um save test. Aí se tiver tudo ok, ele vai dar esse verdinho aqui dizendo que tá tudo certo. Bom, agora o que você pode fazer é construir o dashboard ou vir aqui no explore View para ver suas métricas de forma mais raiz, vamos dizer assim, sem construir nenhum dashboard por enquanto. Então você seleciona aqui o dashboard que você acabou, o Data Source que você acabou de criar, essa conexão com a base. Se você... Como é que eu sei que está funcionando, Ronaldo? Você pode digitar up. E aí ele vai retornar para você a métrica. Dizendo lá que ele está coletando a métrica do 7071. Lembra que eu falei que tem a porta lá do 7071, que é do JTMG Export. Está funcionando aqui. Pelo menos eu sei que com esse up, ele está coletando a métrica lá do 7071. Então, como eu falei para você, o Promif fica de tempos em tempos fazendo o que a gente chama de scrapping, que é nada mais do que batendo naquele endpoint e coletando. Então, olha o que ele fica fazendo aqui. De 15 segundos, aqui, 15, 30, 45, aí fez um minuto, 15, 30, 45, ele está batendo lá e coletando sempre o valor 1. sempre o valor 1. Que é o valor 1 que está dizendo que está up. Essa configuração de tempo você pode vir mudar aqui. No Promifios e em Ano. É por padrão. Eu não coloquei nada. O padrão é 15 segundos. E aqui eu digo onde é que o Promifios vai coletar. Qualquer endpoint que está aqui. Beleza? Se você quiser ver algumas métricas... Ah, Manoel, mas eu não sei que métrica eu vou procurar. Você pode voltar naquele endpoint e pegar qualquer métrica dessa aqui. Então, vou pegar uma de qualquer, essa aqui, por exemplo. Eu copiei o nome dela e joguei aqui. Então, run. Ele está trazendo aqui as métricas por tópico. Então, assim, total de bytes de entrada por segundo por tópico. Então, aqui está me dizendo quanto está entrando de dados por tópico. Se eu pegar aqui um tópico desse, ele vai me dizer quanto está entrando de bytes no meu broker por tópico. Isso aqui é muito importante. Eu vou voltar de novo porque eu falei para vocês de fazer teste de performance. Então, você obrigatoriamente precisa ter esse dashboard aqui pronto antes de fazer o seu deck de performance e saber quanto você precisa para o seu broker rodar sem problema. Porque com esse deck você vai saber quanto exatamente está entrando de byte por segundo, quantas mensagens, etc. Para você calcular histórias e tudo mais. Bom, mas na vida real a gente não fica olhando esse exploit, a gente monta dashboards. E aí eu montei um aqui bem simples, baseado em todas essas métricas que me mostram a quantidade de memória que eu estou usando, aqui eu estou usando aproximadamente 1 giga, quantas mensagens por segundo eu estou recebendo, então aqui são mais ou menos 6 ou 7 mensagens por segundo, então 8 pps, quantos bytes por segundo eu estou recebendo, aqui mais ou menos 500 bytes por segundo, está bem tranquilo, e quantos bytes de saída, então aqui é produção e aqui é consumo, Então aqui é produção e aqui é consumo. Quantos bytes por segundo estão sendo consumidos e quantos bytes por segundo estão sendo produzidos. Esse dash aqui é muito simples. Existem milhares de métricas que você pode usar para criar dash. O que eu aconselho você é dar uma procurada no Grafana Dashboard. Tem muitos dashboards já prontos. Então, Dashboards Kafka. Aqui, olha. No site do grafana.com, você clica aqui em All Dashboards. Tem milhares de dashboards aqui de tudo que é ferramenta, tudo que é visualização. Se eu digitar Kafka aqui, tem muito dashboard de Kafka. Então, por exemplo, tem pré-cabernet, deixa eu pegar um outro aqui mais completo. Vamos dar uma olhada nesse aqui. Esse aqui já tem lag por topic ou partição, então você pode escolher um que faça mais sentido para você esse aqui tem o uso de CPU do NOI, quantos clusters você tem o que você tem que só ficar atento é... deixa eu pegar um desse para você ver vou copiar esse id do dash aí eu vou voltar aqui em dashboard vou dar um new import e eu coloco aqui o id e aí ele já vai automaticamente importar aquele dashboard aqui do grafana.com. Bom, o que provavelmente você vai ter logo de problema é que o dashboard não vai trazer dados para você. Então você vai ter que provavelmente vir aqui editar e brincar com essas métricas aqui. Então, por exemplo, vamos dar uma olhada se esse é o nome da métrica correta. Você pode vir lá no explorer e procurar essa métrica replica manager Se não tiver, a gente vai ter que adicionar ela lá. Eu acho que é essa aqui, LeaderCount. Vamos tentar. Então, LeaderCount. O job, eu sei que o nome do meu job não é esse aqui. Eu vou, só para efeito de teste, eu vou remover esse nome do job aqui. Vou mandar dar um run. Olha que legal, funcionou. Então aqui ele está vermelho porque isso deve estar mostrando aqui, deve estar com padrão de 3. Ele está dizendo que se for abaixo de 2 é para ficar vermelho, mas no meu caso só tem um broker, não faz sentido, vou deixar verde aqui mas aqui ele está mostrando exatamente para mim quantos brokers eu tenho online enfim, o que eu quero dizer é que você vai ter que abrir cada um desses painéis aqui olhar se o job está certo etc, todas essas dimensões você consegue ver no explorer então se você vir aqui na run query, você vai ver que o nome do job é Kafka Serve. Então, você pode vir aqui e instalar a Kafka Serve, se você quiser. Ou simplesmente tirar o filtro, aí fica à vontade. Bom, espero que vocês tenham gostado. E até a próxima.