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.
Configurar Graylog
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 entrada
Configurar o serviço
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 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.
Exemplo de código Python
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 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 detalhado
Enviar erros para Graylog
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 erro
Reforçar a segurança da comunicação
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.
Resolução de problemas
Se não receber logs no seu Graylog, pode querer verificar estes pontos:
- O Graylog deve ter uma entrada definida do tipo "GELF TCP", a ouvir na porta 12201, sem qualquer configuração TLS definida.
- 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".
- 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).
- 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".