Bom, dentro da pasta demonstração, vamos começar criando um dashboard. Você pode vir em New Dashboard ou Create Dashboard. E aqui você pode importar um PNL ou importar um dashboard. O legal do Grafana é que ele permite portabilidade dos dashboards em formato JSON. Supondo que você tivesse um dashboard, você poderia vir em Import Dashboard e informar um arquivo JSON aqui. Bom, não vou importar, vou clicar em add e você poderia clicar em add visualization, enfim, importar aqui como comentei. Vamos começar primeiro criando um row para a gente organizar melhor nossos dashboards, aqui o nosso dashboard. E aqui vou fazer uma demonstração, não precisa seguir essa demonstração, não precisa seguir assim no ambiente corporativo, aqui é apenas para demonstração, para a gente conseguir segregar os dashboards em linhas, em grupos de gráficos e facilitar a compreensão mesmo. Então eu vou clicar aqui em Edge e adicionar várias linhas e vou renomear de acordo com os pilares dos Golden Signals. Então vou colocar saturação, aqui latência e aqui erros. Se você já quiser salvar essa configuração, você pode vir aqui no disquete aqui, que é o Save Dashboard, e como é a primeira vez que estou salvando, ele vai perguntar um nome, um título desse dashboard, eu vou chamar de Store API Dash. Observe que ele está dentro da pasta Demonstração e você pode adicionar opcionalmente uma descrição. Bom, vamos começar incluindo os gráficos. Aqui em throughput, vou clicar em Add, Visualization, e aqui na visualização eu vou começar agora de fato preencher esse panel title com as métricas que fizeram sentido. Como eu estou falando de throughput, que a gente precisa mensurar aqui a quantidade de requisições em cada path, em cada rota. Então vamos começar aqui selecionando algumas métricas. Vou começar colocando métricas aqui simples. Então, HTTP server requests Seconds count. Ah, aqui você poderia selecionar, fazer algum filtro. Então, vamos tirar as rotas de Actuator e o RI, diferente de busca aproximada barra actuator ponto mais. Selecionar aqui. E aí observe que aqui também vai replicando a carry. Vou rodar a carry, ele vai plotar aqui no gráfico e observe que você pode escolher o período daquele gráfico, tá? Você pode colocar aqui o período que fizer sentido para você visualizar a métrica que usou no gráfico. Você pode ir no formato code aqui, Você pode no formato code aqui, especificamente, e também editar essas métricas. Bom, se você quiser editar, obviamente, essa carry, você pode vir em modo code, e esse code você pode customizar essa configuração, essa informação. Vou chamar aqui de requisições, tá? Requisições e vou colocar o R maiúsculo. Aqui você pode customizar aqui a legenda, se vai visualizar como lista, como tabela, tá? Tem algumas configurações complementares aqui, vou colocar como lista, deixa a visualização fazer um pouco melhor, o formato que ele vai ser colocado, se eu vou colocar as legendas à direita ou abaixo do gráfico e outros elementos aqui que você pode ir configurando. O timezone, inclusive, você pode configurar o timezone, etc. Vamos deixar assim mesmo com o default e vamos aplicar. Agora você tem o gráfico, infelizmente, não foi criado dentro aqui da linha, mas você pode clicar aqui no dashboard e arrastar e ele vai ficar aqui dentro da row específica. Se você quiser melhorar a visualização, você pode manipular pra que ele ocupe um espaço apropriado. O que a gente pode fazer ainda com esse gráfico é formatar o rótulo aqui para que ele fique pouco mais sucinto né não ficar tão verboso assim vamos clicar aqui na no painel de requisições editar mais aqui para baixo você tem options e nessa opção de options você pode escolher aqui entre auto que no caso vai definir a opção mais verbosa e o custom, o verbose né que é a opção default e o custom e aqui você consegue colocar o label né o nome do rótulo que você queira filtrar. Então, no caso que eu tenho, por exemplo, o RI, status, método, enfim, pra esses aqui eu posso colocar o referenciar na legenda. Então, se eu quiser, por exemplo, referenciar o RI, ele vai aparecer aqui mais sucinto. Só que a URI por si só não explica aquela métrica, né? Então, precisaria colocar, por exemplo, o verbo. Vou colocar aqui antes da URI pra ficar elegante. Abre chaves duas vezes, method, fecha duas vezes e vou separar por espaço mesmo. E se você ainda quiser colocar uma terceira pra fazer sentido, porque aqui você tem delete e delete também, mas provavelmente são rotas que retornaram dados diferentes. Você pode colocar, por exemplo, status aqui. E aí ele vai aparecer diferenciando. Como só queremos mensurar requisições, e eu tenho uma outra rota de erros, um outro método de erros, eu vou mensurar requisições e eu tenho uma outra rota de erros não outro método de erros eu vou tirar esses esse dado é e aqui mais para cima vou incluir também o filtro para não trazer status que seja que for diferente de aí vou buscar por colocar a busca aproximada então não trazer status diferente de 2.mais ou seja, 200 poderia incluir 300 também mas a aplicação não retorna status 300 pelo menos como foi implementada bom, aí eu consigo trazer nesse caso apenas as as rotas que de fato retornaram status code 200 ou alguma variação, porque eu quero mensurar requisições, quantidade de requisições que estão chegando na aplicação por rota. Tem outras variações, obviamente, de implementação disso, você pode implementar aquela que fizer mais sentido aqui apenas um exemplo eu vou aplicar e agora nosso Dash ficou bem mais compacto podemos até reduzir um pouco na tela aqui plotar um pouco melhor na tela posso inclusive colocar essas informações no lado direito e aí eu uso melhor espaço aqui do dashboard e vamos criar agora outro dashboard criamos aqui de throughput vamos criar agora para saturação eu tenho várias métricas que a gente pode mensurar de saturação vamos começar aqui incluindo uma visualização e vamos procurar aqui uma simples seria a métrica de process cpu usage tem diferença do process do system cpu usage vou começar incluindo process cpu usage e vou realizar a carry e aí vamos supor que eu queira também incluir o systemcp-usage para eu conseguir monitorar ambos. Eu posso vir aqui embaixo, incluir uma carry-a, e essa carry-a tem todos esses parâmetros, e para reduzir esse rótulo aqui podemos colocar uma legenda. Aqui eu vou colocar em Options, em Auto eu vou sobrescrever como Custom. E vou chamar aqui a legenda de Name. Lembrando que eu só tenho uma aplicação, então ok nesse caso, mas se você tiver mais aplicações, aí seria interessante colocar é mais dados no rótulo por exemplo application agora fica bem mais sucinto e eu eu quero agora incluir a vou colocar como pai aqui pra deixar mais elegante e agora eu quero incluir uma outra métrica essa aqui as próximas e peruse de eu quero nesse mesmo grau incluir uma outra métrica essa aqui é a process CPU usage eu quero nesse mesmo grafo incluir o system CPU usage vou descer aqui eu tenho essa carry a eu vou incluir aqui uma nova carry vou selecionar system CPU usage em options a mesma coisa vou sobrescrever aqui custom e chamar de name que é o nome da métrica espaço pipe entre chaves duplas eu vou colocar application para identificar a aplicação para identificar a aplicação. Feito isso, eu vou chamar esse panel aqui, esse panel title de CPU, e apenas vamos aplicar Oi e aí ele fica fora do da linha vamos clicar aqui e arrastar ele para dentro de saturação e de novo você pode ajustar o tamanho enfim ajustar a granularidade a resolução você pode alterar inclusive o tempo de busca aqui em cima e observe que ele altera os dois gráficos. Se você buscar sempre eu quero as últimas três horas, ele afeta os dois gráficos aqui. Os últimos cinco minutos, ele também vai afetar. Podemos colocar o consumo de memória aqui também, né? Então, se eu vier aqui, eu posso trazer aqui nesse panel novo, métrica, JVM, memory, used bytes. Só que tem um detalhe, se eu rodar essa do jeito que tá aqui, ela vai trazer todas as áreas de memórias que o Java gerencia. Memória heap, non-heap. Só que podemos ter essa métrica bem nesse nível de detalhe, mas podemos por hora sumarizar esses dados numa única visão de memória utilizada. Como que fazemos isso? dessa vez aqui embaixo dentro de carry, vamos incluir vou até expandir um pouco aqui vamos incluir um operation uma operation aqui em operations e eu vou fazer uma agregação sumarizando sum by label e eu vou agrupar por name, name no caso é o nome da métrica, então se eu rodar agora carry ele vai agrupar tudo dentro de jvm memory user bytes, se eu quiser por exemplo ainda incluir nessa métrica aqui nesse mesmo dash, eu tô trazendo quantidade de memória utilizada, e se eu quiser trazer agora a quantidade máxima de memória, vou minimizar essa carry aqui, adicionar uma outra carry, jvm, nome jvm, memory max, bytes, desta vez, incluir também uma nova operation aqui, aggregation sum by label, e name também. e agregation sum by label e name também. Vamos rodar a carry, agora eu tenho a quantidade máxima de bytes aqui em cima disponível e a linha verde a quantidade de bytes utilizadas em função do tempo. Vamos olhar como essas carries estão ficando de forma programática. Se eu for aqui em code, observe que agora tem sum, by name e o nome da métrica uma forma bem sucinta aqui para sumarizar para trazer esse valor vamos colocar um nome aqui memory é o uso de memória em bytes é bom sempre interessante sempre colocar unidade de medida aqui para facilitar a leitura do gráfico vamos aplicar e o gráfico vamos arrastar ele para dentro de saturação e deixar ele certinho aqui podemos incluir também o disco para a gente medir a saturação dele vamos aqui embaixo em métrica disc free ele também tem essa configuração de free total posso por exemplo colocar o disco total fazer também aqui embaixo em operation uma agregação uma agregação aquele que só tem aplicação e nem application instance é fim você poderia é até voltando aqui um ponto se você tiver mais de uma aplicação talvez seja interessante você agrupar também por esses dados você pode fazer agregation aqui por por application também enfim então pode ser interessante tá vou deixar apenas por application mesmo mas não vai fazer diferença nesse caso vamos rodar a carry vamos incluir uma nova carry vamos incluir a métrica de disk, agora disk total bytes, a primeira que eu incluí foi a de total, então vamos ajustar, já tinha incluído a de total bytes, agora disk free bytes. De novo, pode incluir uma agregação por aplicação vamos rodar essa carry vamos rodar essa carry aqui atualizar aqui refresh refresh e pronto. O consumo de bytes do disco está realmente bem baixo. E claro, o painel vai ser adicionado fora, vamos trazer ele para dentro do grupo de saturação. vamos criar um painel de latência agora vamos incluir aqui em Edge visualization métrica http server requests e dessa vez vamos escolher a métrica max mais simples por enquanto em time series vamos escolher o tipo gaucho e atualizar aqui para ele executar a carry bom tá vindo aqui algumas métricas vamos simplificar um pouquinho vou subir aqui aqui embaixo em operations vamos agrupar essas métricas por por média né a greguei chão é verde para média é por leibo vamos agrupar por uri e inclui uma outra leibo para gente agrupar por e por método vamos rodar essa carry e agora ficou um pouco mais simples vamos melhorar um pouquinho essa esses rótulos estão descendo mais um pouquinho ainda em options a em legenda vamos trocar para custom vamos só colocar aqui method e incluir do lado separado por espaço entre duas chaves o RI vamos atualizar agora e ficou bem mais elegante observe que tem a rota de actuator aqui que que a gente vai fazer filtrar essa rota de actuator tirar fora aqui em label filters vamos incluir o RI símbolo de not contains é busca aproximada com not barra actuator ponto mais executar carry pronto e aqui vamos incluir alguns thresholds, ele já vem com default aqui 80, mas queremos medir em milissegundos, em segundos, milissegundos, então vamos incluir mais 4 aqui para simplificar, cada uma dessas cores você consegue sobrescrever com uma cor específica, pode clicar aqui também em custom e escolher uma cor com RGB, a cor é com RGB. Para a tonalidade azul, vou colocar aqui requisições que retornarem até 0.25 segundos vou colocar como amarelinho requisições que retornarem até 0.8 vai vou arredondar aqui em vez de 50 vou colocar 60 para fazer mais sentido aqui trinta então trinta zero ponto trinta segundos sessenta zero ponto seis zero ponto oito e aqui requisi tem a configuração dos gaudis aqui atualizei então olhando para esse dash eu consigo ver que tem coisas as rodas estão de certa forma saudáveis é então muita coisa que tá no verde né que é o beijo aqui a mas tem algumas algumas fotos que talvez sejam preocupantes aqui por exemplo essa guerra ordens aqui né ela tá começando crescer é mais o que devia isso pode ser preocupante. Vamos incluir aqui apenas esse gráfico, depois a gente vai resolver e olhar a fundo sobre essa métrica especificamente. Vamos subir aqui, vamos chamar esse painel de latência por método, o verbo, verbo HTTP, vamos chamar de método, o verbo, né? Verbo HTTP, vou chamar de método mais o RI. Vamos aplicar, ele vai tá aqui em cima, vamos organizar aqui e colocar dentro de latência. E por fim, pra não ficar muito exaustivo, vamos incluir um dash aqui de erros, né? Vamos colocar também HTTP server requests, vamos colocar count, second count, de novo vamos tirar a rotaa dos paths do actuator. Ponto mais. Ops, esqueci de clicar. Barra actuator, ponto mais, seleciona. Dessa vez, vamos incluir outro filtro, desta vez vamos monitorar status que estejam, que contenham, então igual, símbolo de busca aproximada, que não sejam, vamos colocar aqui um símbolo de negação aproximada que não seja dois pontos mais. Vamos visualizar e também vamos colocar um vamos colocar aqui uma outra um outro dash aqui vamos escolher stat por exemplo, para a gente mensurar. E para simplificar aqui um pouco, vamos filtrar aqui, agrupar de novo também, vamos colocar aqui quantidade média, por exemplo, por URI, agrupar por por RI e agrupar por método. Vamos visualizar no gráfico e aí tá ficando um pouquinho mais elegante e vamos a e vamos ainda vamos agrupar também por status code, pode ser interessante, né? Vamos agrupar pro status code também também trouxe agora mais detalhes e vamos no option reduzir um pouco esse rótulo aqui no custom vamos incluir method O RI, vou colocar igual ou algum símbolo para separar, status. E aí agora fica um pouquinho melhor para a gente visualizar. Vamos aplicar. Vamos esticar um pouquinho esse gráfico e vamos descer até erros.