Nós concluímos o passo anterior configurando a aplicação para enviar os logs no formato JSON. Agora nós vamos rodar essa aplicação com o Docker, e essa aplicação vai enviar os logs aqui usando o sysout, e nós temos um serviço do log driver do próprio Docker, que será responsável por capturar esses eventos de log do buffer e enviar para o serviço, que vamos configurar, e vamos configurar agora o Splunk. Vou dar um overview geral do Splunk, de como fazer a configuração mínima dele para que a aplicação consiga enviar os logs, para que o Logdriver consiga enviar os logs para o serviço do Splunk. Para subir o serviço do Splunk, nós vamos utilizar o Docker Compose e tenho aqui numa página do splunk.github.io, tem vários templates aqui de Docker, enfim, utilizando o comando Docker ou Docker Compose ou até Kubernetes aqui mais para baixo, com exemplos de como rodar o serviço do Splunk localmente, tá? Aqui nesse endereço. Splunk.github.io barra docker docker-splunk barra examples.html Aqui tem bastante exemplo legal e só reforçando, o docker o Splunk é um serviço pago, é um serviço que você tem um custo para utilizar num ambiente enterprise, num ambiente empresarial. Vamos fazer uma POC porque é um serviço muito poderoso, muito bom de se utilizar para log, e não só para log, mas ele tem funcionalidades de métricas, enfim, ele tem tracing também, mas vamos tem funcionalidades de métricas, enfim. Ele tem tracing também, mas vamos utilizar o serviço de log dele, que para mim, na minha opinião, é muito bom. E aí, ele é um serviço pago, então precisa ter licença ali, de fato, para utilizar comercialmente, mas vamos fazer uma POC aqui, uma demonstração localmente com ele. Eu já tenho o Splunk rodando localmente aqui, eu estou usando uma configuração relativamente simples do Splunk, subindo com Docker Compose o serviço do Splunk, hostname Splunk, algumas variáveis de ambiente, essa variável de ambiente Splunk Start Args é importante porque é onde você dá o contrato de licença, o agreement ali que você está de acordo com o contrato de licença do uso do Splunk eu provavelmente estou falando o óbvio aqui, mas eu acho que vale reforçar aqui estou passando em usuário e as senhas abertas para configuração do Splunk não é o ideal. Utilize sempre algum volte de segredos ou variáveis de ambiente. Enfim, suba o serviço com essa informação fechada e controlada. Aqui é apenas para teste, para demonstração local, então eu estou colocando em plaintext essa informação aqui aberta. Estou colocando, habilitando a porta 997 aqui e estou adicionando portas a mais, enfim, aqui embaixo estou expondo todas as portas, a porta 8000 é a porta que vamos utilizar para acessar o console de administração do Splunk, tem as configurações de volumes aqui e tem uma configuração adicional que é esse serviço do Splunk Volume Permission porque localmente eu peguei um pequeno empecilho aqui sobre o uso do Splunk que o usuário não conseguia acessar esses diretórios. Então subo aqui o serviço adicional com o root e aí eu dou uma permissão adicional para esses diretórios para o usuário do Splunk. Apenas uma configuração adicional para que eu consiga rodar local, dado que eu percebi alguns problemas. Depois de configurar a infa do docker, lembrando que você precisa rodar docker-compose ap ou ap-d para rodar e subir o docker-compose com as configurações do splunk eu já fiz com antecedência porque o serviço do splunk ele demora um pouquinho para subir depois que ele subir você pode acessar localhost porta 8000 ele vai abrir a página do splunk e você vai alugar com as credenciais que você configurou no Docker Compute. Quando você acessa pela primeira vez, geralmente aparece uma homepage. Nós vamos usar esse serviço aqui que está ao canto, o Search and Report. Você pode utilizar ou instalar e configurar outros aplicativos no Splunk. Quando acessar pela primeira vez, aqui em cima do seu usuário, você pode clicar em Preferences, e vamos configurar aqui o Time Zone, para que quando você estiver fazendo algum filtro de logs você consiga trazer os logs de acordo com o fuso horário apropriado. Algumas configurações adicionais como a home page, qualquer aplicação inicial que vai abrir e o tema, se você gosta de um tema mais escuro, dark ou tema light como eu estou usando aqui, você pode configurar também com essa configuração feita precisamos configurar um collector e para isso nós vamos utilizar vamos criar um índice e um token e essas configurações são importantes para quando fizermos a configuração lá do log driver da aplicação vamos começar criando o índice aqui em settings. Dentro de data, você tem indexes. Clicando em indexes, a página de indexes já tem alguns índices criados do Splunk. E nós vamos criar algum adicional. Note que aqui você tem, inclusive, o tamanho do índice. Então, para quem é desenvolvedor especificamente, o tamanho que aquele índice vai ocupar em disco talvez não seja algo relevante a levar em consideração. Mas se você é de operations, time de operações, ou está num time é de operations, time de operações, ou está num time de focus de fato, que você precisa manter isso, tentar as aplicações de observabilidade também, a preocupação com storage é latente. Então, retomando aquela visão arquitetural onde você tem as componentes e o storage é um componente importante. O storage, a camada de armazenamento, do ponto de vista de espaço ocupado em disco versus custo, é algo que precisa ser levado em consideração. E não só custo e espaço, mas também até disponibilidade dessa infraestrutura. Caso o disco vir a se perder, você tem alguma tolerância à partição, onde outro disco assume o lugar e você continuar capturando os eventos de log sem perda de dados. E nós vamos configurar um índice aqui. O primeiro campo que aparece é o nome do índice, e aqui nós precisamos sempre adotar um índice aqui. O primeiro campo que aparece é o nome do índice, e aqui nós precisamos sempre adotar um padrão. Lembrando que o pattern mais interessante de arquitetura é que todos os logs possíveis converjam num único serviço de login, para que você consiga fazer cruzamento de eventos ou ter uma visão única de todos os eventos da aplicação. Um padrão que você pode adotar sempre é começar, por exemplo, com o role no momento do índice. Ou, por exemplo, escrever logs, enfim, e o nome sempre o nome de algum domínio de negócio, domínio funcional, domínio de aplicação, com a granularidade apropriada. Aqui eu vou colocar apenas para teste logs.storeapp, apenas para teste local. Aqui embaixo você pode customizar alguns parâmetros, vamos deixar como default. Aqui poderia configurar, por exemplo, o tamanho do disco, como como eu comentei qual o tamanho máximo desse índice e vamos deixar assim por enquanto e após criar o índice vai aparecer aqui na lista logs story app o nome do índice que você configurou agora precisamos configurar de fato o event collector, o HTTP event collector. E o resultado desse collector é a existência, a geração de um token que vamos vincular na aplicação. Esse token é a forma que o log driver identifica unicamente aqueles eventos de log. identifica unicamente aqueles eventos de log e quando chega a esses eventos no Splunk ele consegue correlacionar com um collector específico e com um conjunto de configurações sobre aqueles eventos de log. Por exemplo, uma das configurações que vamos fazer aqui é correlacionar o event collector com o índice default que acabamos de criar. Vamos lá. Aqui nós vamos acessar Settings, Data Inputs. O Splunk tem várias formas de coleta de logs, por exemplo, utilizando protocolos específicos como TCP e UDP. Vamos clicar aqui em HTTP Event Collector, como não tem nenhum criado, vamos clicar em Add New. E aí o campo inicial aqui é o nome. Para manter coerência com a configuração do índice. Vamos associar esse collector com o índice, como default, mas para facilitar a manutenção e o reaproveitamento dos dados, vamos colocar como logs store API, ou store app, para manter o padrão e eu facilitar aqui na hora de capturar alguma informação que precisar. Vamos apenas colocar o nome, mas tem alguns parâmetros que você pode costumar também. Vamos ir em Next. Nesse momento, você pode vincular opcionalmente um índice default. Isso significa que se você não configurar esse índice default, a aplicação terá que fornecer esse índice na hora de enviar os eventos de log. Eu vou associar sempre, porque caso não seja enviado, ele vai sempre reconhecer esse índice como default. Vamos clicar agora em Review e Submit. O resultado dessa criação é esse UID, esse token. Você pode salvar, copiar, mas caso você não consiga, você pode recuperar esse dado depois. Pronto. Temos o índice criado, temos o Event Collector configurado, agora a gente precisa instrumentar a aplicação para que ela envie esses dados de fato utilizando o Log Drive. Indo para o passo 3 aqui da configuração, precisamos agora acrescentar os atributos de configuração do Logdriver da aplicação, que vai subir via Docker Compose no caso aqui da demonstração. Eu tenho o Docker Compose aqui onde eu tenho um Postgre, um banco de dados que localmente estava utilizando o H2, aqui eu vou utilizar o banco de fato, e aqui eu tenho a API e nessa API vamos pegar o trecho que a configuração do login copiar aqui colocar no trecho onde está a aplicação vou colocar aqui depois a porta e aí precisamos configurar o nome do host. No caso aqui vai ser localhost. Porque eu estou rodando localmente. Mas você teria um serviço, um endpoint com balanceador, ou um DNS onde você resolveria para o serviço do Splunk numa infraestrutura. Tenho aqui a configuração do índice. Aqui, no caso, seria opcional, mas vamos colocar esse campo já, vamos deixar parametrizado mesmo. É opcional porque correlacionamos o token que vamos parametrizar aqui com o índice. Parametrizamos o token e correlacionamos esse token com o EventCollector. O EventCollector está associando o índice default. Mas vamos configurar mesmo assim para caráter de demonstração. Aqui alguma configuração complementar, por exemplo, como source. Mais para uma identificção complementar, por exemplo, como source, mas por uma identificação complementar dos eventos de log. Formato de saída é TISO. Aqui vamos utilizar a conexão não segura. E aqui eu quero fazer um disclaimer. No ambiente produtivo, de fato, que tem um direcionamento de segurança forte, não é uma configuração correta, sempre se interessa em utilizar uma configuração segura, utilizando criptografia em trânsito, aqui eu estaria desabilitando essa criptografia em trânsito. Então, para fim de demonstração, vamos apenas utilizar aqui como default true, ou como true, para pular essa etapa de segurança, mas é importante não fazer isso, realmente é produtivo, de fato. E, por fim, a configuração de verificação de conexão, caso o Splunk caia, por exemplo, não é interessante que a aplicação pare de funcionar. A aplicação deve funcionar mesmo sem o serviço de log, pelo menos acredito que na maioria das vezes. Porque o vídeo final é entregar o valor para o cliente final através da aplicação. O serviço de log é importante para a gente descobrir uma causa raiz de algum problema. Então vamos desabrigar essa configuração por default. Voltando aqui sobre a questão da configuração do skip verify, como nós vamos utilizar conexão HTTP, é importante também desativar essa configuração no serviço do Splunk. Então, voltei aqui para o serviço do Splunk em Settings, Data Inputs, que eu já estou até com a página aberta aqui. Dentro de HTTP Event Collector, tem uma configuração aqui chamada Global Settings. Essa Global Settings aqui, toda a captura vai ser feita através da porta 8088, por isso que nós estamos parametrizando a porta 8088 aqui. E nós precisamos desativar aqui o enable SSL, que aí forçaria a criptografia em trânsito aqui entre a aplicação e o Splunkos nos todos os eventos de log vou salvar aqui e é agora preciso terminar de parametrizar as configurações bom então vamos colocar aqui o nome como o nome do índice é o mesmo nome do collector para facilitar o deixei o mesmo nome então vou colocar o mesmo nome aqui é preciso agora do token o token está aqui vou copiar ele também colocar ele aqui o source vou colocar o nome da aplicação então store API formato JSON e apenas isso feitas as configurações você agora precisa rodar a Docker Compose app, vou colocar menos de para rodar em background com a aplicação rodando, agora é possível já acessar o Splunk e realizar algumas caries no serviço Search and Reporting. Lembrando que a aplicação, quando ela sobe, ela começa a gerar muitos logs já de inicialização, então já é possível obter essas informações pesquisando por index, logs ou store, app, que é o nome do índice que nós configuramos. Aqui no canto direito você pode filtrar pelo período, por exemplo, os últimos 60 minutos ou os últimos 30 dias. Obviamente, escolhemos a aplicação apenas agora, então não tem muitas informações. E aqui, observe que os logs já estão estruturados aqui no formato JSON. São logs de inicialização da aplicação, que a aplicação vai informando qualquer evento específico aqui e eventos específicos de background, ou seja, se de repente tiver algum serviço rodando, ela vai estar logando aqui também, se esse componente, essa Satred faz login de fato e para fazer um teste vamos gerar eventos de integração aqui na aplicação vamos solicitar a criação de uma order aqui na rota de post. Vamos consultar todas as orders na rota de get. Vamos obter uma order correta. Vamos obter uma order que não existe, provavelmente. Perfeito. perfeito vamos solicitar o cancelamento de uma ordem e é válida e vamos solicitar é o cancelamento de novo dessa mesma ordem para tornar um erro vamos agora buscar esses eventos no Splunk não vai se tornar um erro vamos agora buscar esses eventos no Splunk o flash buscar os últimos 15 minutos Oi e aí eu tenho alguns eventos já que chegando olha que legal os eventos chegaram aqui por exemplo evento de cancelamento de uma ordem tem a mensagem o conteúdo da mensagem que eu inclusive estou logando os eventos de debug, conforme nós fizemos no último vídeo. E aqui eu tenho os dados da order, mas também expandimos a configuração lá no logback para os argumentos que eu tiver passando no log, nos eventos de login, logdebug, loger, por exemplo. Ele traz a informação aqui também como argumento. E eu tenho aqui os dados que eu consigo, inclusive, filtrar em cima deles. Bom, vamos fazer um filtro agora em cima de algum campo, por exemplo, o nome da aplicação ou o log level, por exemplo. Como que eu faço o filtro no Splunk? Vamos fazer algum filtro em cima dos logs, por exemplo, de algum campo específico. Você pode fazer isso utilizando, depois que você filtra por index aqui você pode apertar pipe, digitar pipe e como a estrutura do dado é JSON precisamos converter essa estrutura para fazer os filtros em cima, vamos rodar colocar o comando spath se visualmente você achar interessante, você pode quebrar esses caracteres aqui em outra linha e outra pipe Visualmente, se você achar interessante, você pode quebrar esses caracteres aqui em outra linha. E outra pipe, vamos digitar search. E a partir daqui, você tem que digitar para uma estrutura dos campos que estiverem sendo logados nos logs. Aqui, todo evento começa com line. Vamos colocar line. Supondo que eu queira levelError. Você pode buscar. Ele trouxe aqui um log levelError, e era aquele evento que não conseguiu encontrar uma order pelo ID x. Supondo que você queira, e aí já colocando em prática uma boa prática que eu comentei no vídeo anterior. Supondo que você tenha múltiplas versões. Você tem o app version aqui, supondo que você queira filtrar pela versão também. Você também pode. Você pode colocar, se você quiser buscar por mais de um campo, claro, você pode colocar espaço você quiser buscar por mais de um campo claro, você pode colocar espaço e continuar digitando line.appversion igual 0.0.2 quero agora log level info pro app version 2 tem lá também os eventos de índice. Também é possível fazer busca aproximada utilizando Spalming. Supondo que você queira pegar, por exemplo, todas as versões com, por exemplo, versão 0, asterisco. E aí com Wildcard você consegue fazer essas buscas aproximadas outro exemplo aqui por exemplo você tem line.appname igual e aí eu posso colocar por store asterisco store asterisco observe por exemplo aqui eu estou pegando Store asterisco. Store asterisco. Observe. Por exemplo, aqui eu estou pegando Store observability, o nome da aplicação. App name. Observe. Outro asterisco. Então, você pode fazer essas buscas aproximadas. Outra coisa legal também que Splunk tem é a possibilidade de construção de dashboards. Seria possível, por exemplo, montar uma query aqui fazendo extração de campos especificamente, utilizando rejects, pegando campos específicos, enfim, sumarizando, fazendo algum tipo de operação aritmética, enfim plotar isso num dashboard tá, vai ser bem interessante essas features