Graylog: Utilizar com Python

Como enviar logs de Python para Graylog

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Graylog cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Servidor de email SMTP ilimitado e dedicado incluído.
  • Atualizações sem esforço com apenas um clique.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://logs.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: são necessários apenas 5 minutos para experimentar a solução Graylog cloud hosting da Stackhero!

Enviar logs de Python para Graylog é simples. Neste exemplo, usaremos os pacotes graypy e logging para conseguir isso.

Do lado do Graylog, precisa criar uma entrada GELF TCP.

Vá ao painel de administração do Graylog, depois em "System"/"Inputs" e crie uma nova entrada "GELF TCP". Marque a caixa "global", adicione um "title" e certifique-se de que a porta está definida para 12201.

Não ative nenhuma opção TLS aqui. A encriptação TLS será gerida pelo proxy reverso incluído na sua instância.

Configuração da entradaConfiguração da entrada

No painel de controlo do Stackhero, vá ao seu serviço Graylog e clique em "Configurar".

Certifique-se de que a porta TCP 12201 está corretamente definida e ative a "encriptação TLS" para ela, depois valide a sua configuração.

Configuração da porta de entradaConfiguração da porta de entrada

Deve verificar no "Firewall" do seu serviço que permitiu pelo menos o seu IP para enviar dados para a porta TCP 12201. Para fins de teste, pode ser mais fácil permitir todos os IPs (0.0.0.0/0), que é a configuração padrão.

Para este exemplo, usaremos a biblioteca graypy. Pode simplesmente instalá-la com pip install graypy.

Depois, pode escrever o seguinte código num ficheiro chamado graylog-example.py e substituir XXXXX.stackhero-network.com pelo nome do host do seu servidor:

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

my_logger.debug('Este é um teste de um script Python!')

Vá ao painel de administração do Graylog, clique no separador "Search", clique no ícone de reprodução e selecione "Update every 1 second". Depois, pode executar o script usando esta linha de comando: python graylog-example.py.

O script enviará o log para o Graylog, e deverá vê-lo na sua página de pesquisa do Graylog!

O seu primeiro log recebido no GraylogO seu primeiro log recebido no Graylog

Clique na frase "Este é um teste de um script Python!" e verá algumas informações úteis como o nome do script, a linha que cria o log, etc.

Log detalhadoLog detalhado

Uma funcionalidade útil é capturar erros e enviá-los para o Graylog, para ter uma visão global dos erros desencadeados pela sua aplicação. Terá até a capacidade de enviar notificações sobre esses erros por e-mail, ou usando Slack ou Mattermost.

Neste exemplo, tentamos chamar a função unknown_function, que não existe. Não se esqueça de substituir o valor "XXXXX.stackhero-network.com" pelo nome do host da sua instância.

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

try:
  unknown_function()
except NameError:
  my_logger.debug('A função "unknown_function" gerou um erro', exc_info=1)

Execute o script e volte ao seu painel de administração do Graylog. Verá o erro "NameError: name 'unknown_function' is not defined" e a rastreabilidade completa!

Exemplo de log de erroExemplo de log de erro

Nos exemplos anteriores, usamos TLS para encriptar a comunicação, mas não verificamos a validade do certificado. Isto foi para fins de demonstração, mas para produção, deve verificar a validade do certificado.

Pode fazê-lo simplesmente adicionando as opções validate e ca_certs assim:

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')

Deve certificar-se de que o ficheiro /etc/ssl/certs/ca-certificates.crt existe:

  • No Ubuntu/Debian, pode instalá-lo com sudo apt install ca-certificates.
  • No Alpine Linux, instale-o com apk add ca-certificates.
  • No macOS está instalado por padrão, mas chamado /etc/ssl/cert.pem.

Se não receber logs no seu Graylog, pode querer verificar estes pontos:

  1. O Graylog deve ter uma entrada definida do tipo "GELF TCP", a ouvir na porta 12201, sem qualquer configuração TLS definida.
  2. A configuração do Graylog no painel de controlo do Stackhero (botão "Configurar") deve ter a porta 12201 definida, com TCP e TLS ativados em "Input ports".
  3. O firewall no painel de controlo do Stackhero deve mostrar-lhe a porta "12201/tcp" como "ACCEPT", idealmente na posição #1 com a origem 0.0.0.0/0 definida (para fins de teste).
  4. Deve monitorizar os logs no painel de administração do seu Graylog em "Search". Para garantir que vê os seus logs, selecione "Search in the last 1 hour", clique no ícone de reprodução e selecione "Update every 1 second".