Registrando no Graylog com Spring Boot

Registrando no Graylog com Spring Boot

1. Introdução

Graylog é um serviço de agregação de log. Simplificando, ele é capaz de coletar milhões de mensagens de log de várias fontes e exibi-las em uma única interface.

Além disso, também fornece vários outros recursos, como alertas em tempo real, painéis com gráficos e tabelas e muito mais.

Neste tutorial, veremos como configurar um servidor Graylog e enviar mensagens de log para ele a partir de um aplicativo Spring Boot.

2. Configurando o Graylog

Existem várias maneiras de instalar e executar o Graylog. Neste tutorial, discutiremos as duas maneiras mais rápidas: Docker e Amazon Web Services.

2.1. Docker

Os seguintes comandos farão download de todas as imagens necessárias do Docker e iniciarão um contêiner para cada serviço:

$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
    -e ES_JAVA_OPTS="-Xms2g -Xmx4g" \
    -e "discovery.type=single-node" -e "xpack.security.enabled=false" \
    -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 \
    -d docker.elastic.co/elasticsearch/elasticsearch:5.6.11
$ docker run --name graylog --link mongo --link elasticsearch \
    -p 9000:9000 -p 12201:12201 -p 514:514 -p 5555:5555 \
    -e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
    -d graylog/graylog:2.4.6-1

O painel Graylog agora está disponível usando a URLhttp://localhost:9000/ e o nome de usuário e senha padrão sãoadmin.

Embora a configuração do Docker seja a mais simples, ela exige uma quantidade substancial de memória. Também não funciona no Docker para Mac, portanto, pode não ser adequado para todas as plataformas.

2.2. Amazon Web Services

A próxima opção mais fácil para configurar o Graylog para teste é o Amazon Web Services. Graylog provides an official AMI that includes all the required dependencies, embora exija alguma configuração adicional após a instalação.

Podemos implementar rapidamente uma instância EC2 com o Graylog AMI clicando emheree selecionando uma região. Graylog recommends using an instance with at least 4GB memory.

Após o início da instância, precisamos fazer o SSH no host e fazer algumas alterações. Os seguintes comandos irão configurar o serviço Graylog para nós:

$ sudo graylog-ctl enforce-ssl
$ sudo graylog-ctl set-external-ip https://:443/api/
$ sudo graylog-ctl reconfigure

Também precisamos atualizar o grupo de segurança criado com a instância do EC2 para permitir o tráfego de rede em portas específicas. O gráfico abaixo mostra as portas e protocolos que precisam ser ativados:

image

O painel Graylog agora está disponível usando a URLhttps://<EC2 PUBLIC IP>/ e o nome de usuário e senha padrão sãoadmin.

2.3. Outras instalações do Graylog

Além do Docker e do AWS, também háGraylog packages para vários sistemas operacionais. With this approach, we also have to set up an ElasticSearch and MongoDB service.

Por esse motivo, o Docker e a AWS são muito mais fáceis de configurar, especialmente para fins de desenvolvimento e teste.

3. Enviando mensagens de log

Com o Graylog em funcionamento, agora devemos configurar nosso aplicativo Spring Boot para enviar mensagens de log para o servidor Graylog.

Qualquer estrutura de log Java pode suportar o envio de mensagens para um servidor Graylog usando o protocolo GELF.

3.1. Log4J

No momento, a única estrutura de registro suportada oficialmente é o Log4J. Graylog fornece um appender, que está disponível emMaven central.

Podemos ativá-lo adicionando a seguinte dependência Maven a qualquer arquivopom.xml:


    org.graylog2
    gelfj
    1.1.16

Também devemos excluir o módulo iniciador de registro em qualquer lugar em que usarmos um módulo iniciador do Spring Boot:


    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-logging
        
    

Agora podemos definir um novo anexador em nosso arquivolog4j.xml:


    
    
    
    
    
    
    
    

Isso configurará todas as mensagens de log com nível INFO ou superior para ir para o aplicativo Graylog, que por sua vez envia a mensagem para o servidor Graylog.

3.2. Outras estruturas de log

OGraylog marketplace tem bibliotecas adicionais que suportam uma variedade de outras estruturas de registro, como Logback, Log4J2 e mais. Just beware that these libraries are not maintained by Graylog. Alguns deles são abandonados e outros têm pouca ou nenhuma documentação.

Deve-se ter cuidado ao confiar nessas bibliotecas de terceiros.

3.3. Graylog Collector Sidecar

Outra opção para coleta de log é oGraylog Collector Sidecar. O sidecar é um processo que é executado ao longo de um coletor de arquivos, enviando o conteúdo do arquivo de log para um servidor Graylog.

O Sidecar é uma ótima opção para aplicativos em que a alteração dos arquivos de configuração de registro não é possível. E porque ele lê arquivos de log diretamente do disco,it can also be used to integrate log messages from any platform and programming language.

4. Vendo mensagens no Graylog

Podemos usar o painel Graylog para confirmar a entrega bem-sucedida de nossas mensagens de log. Usar o filtrosource:localhost mostrará as mensagens de log de nossa configuraçãolog4j de amostra acima:

image

5. Conclusão

Graylog é apenas um dos muitos serviços de agregação de logs. Ele pode pesquisar rapidamente milhões de mensagens de log, visualizar dados de log em tempo real e enviar alertas quando determinadas condições forem verdadeiras.

A integração do Graylog a um aplicativo Spring Boot requer apenas algumas linhas de configuração e sem nenhum novo código.

Amostras de código, como sempre, podem serfound on GitHub.