Graylog: Utilizar com Python
Como enviar logs de Python para o 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 o Graylog é um processo simples. Neste guia, vamos mostrar como pode utilizar os pacotes graypy e logging para encaminhar logs da sua aplicação Python para a sua instância Graylog.
Configuração do Graylog
Primeiro, deve configurar uma entrada GELF TCP no seu servidor Graylog.
Aceda ao painel de administração do Graylog. Em "System" > "Inputs", pode criar uma nova entrada do tipo "GELF TCP". Certifique-se de selecionar a opção "global", introduza um "title" para a sua entrada e confirme que a porta está definida para 12201.
Não ative nenhuma opção de TLS aqui. A encriptação TLS será gerida pelo reverse proxy incluído na sua instância.
Configuração da entrada
Configuração do seu serviço na Stackhero
No dashboard da Stackhero, selecione o seu serviço Graylog e clique em "Configure".
Verifique que a porta TCP 12201 está corretamente configurada e que a "TLS encryption" está ativada para esta porta. Guarde as alterações para aplicar a configuração.
Configuração da porta de entrada
Deve verificar no "Firewall" do seu serviço se pelo menos o seu IP está autorizado a enviar dados para a porta TCP 12201. Para testes, pode ser mais simples permitir todas as IPs (0.0.0.0/0), que é a configuração por defeito.
Exemplo: Enviar logs a partir de Python
Para este exemplo, pode utilizar a biblioteca graypy. Para começar, basta instalá-la com pip install graypy.
De seguida, crie um ficheiro chamado graylog-example.py e substitua <XXXXXX>.stackhero-network.com pelo hostname do seu servidor. Eis um exemplo de script que pode experimentar:
import logging
import graypy
my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)
handler = graypy.GELFTLSHandler('<XXXXXX>.stackhero-network.com', 12201)
my_logger.addHandler(handler)
my_logger.debug('This is a test from a Python script!')
Para visualizar os seus logs, abra o painel de administração do Graylog, vá ao separador "Search", clique no ícone de play e defina a atualização para cada segundo. Pode executar o seu script com:
python graylog-example.py
Assim que o script for executado, a sua mensagem de log será enviada para o Graylog e deverá vê-la aparecer nos resultados da pesquisa.
Primeiro log recebido no Graylog
Ao clicar na mensagem "This is a test from a Python script!", poderá ver detalhes úteis como o nome do script e a linha exata que gerou o log.
Detalhes do log
Enviar logs de erro
O Graylog não serve apenas para mensagens de log normais. Também pode capturar e encaminhar erros para obter melhor visibilidade sobre o comportamento da sua aplicação. Isto facilita a monitorização e a receção de notificações sobre problemas por email, Slack ou Mattermost.
Aqui está um exemplo onde chamamos intencionalmente uma função que não existe para gerar um erro. Lembre-se de substituir "<XXXXXX>.stackhero-network.com" pelo hostname real da sua instância.
import logging
import graypy
my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)
handler = graypy.GELFTLSHandler('<XXXXXX>.stackhero-network.com', 12201)
my_logger.addHandler(handler)
try:
unknown_function()
except NameError:
my_logger.debug('The "unknown_function" raised an error', exc_info=1)
Pode executar este script tal como anteriormente. No painel de administração do Graylog, verá a mensagem de erro "NameError: name 'unknown_function' is not defined" juntamente com o stack trace completo.
Exemplo de log de erro
Reforçar a segurança das comunicações
Embora os exemplos anteriores utilizem encriptação TLS, não fazem validação do certificado. Isto é aceitável para testes, mas em ambiente de produção, é importante verificar a validade do certificado.
Pode ativar a validação do certificado adicionando as opções validate e ca_certs desta forma:
handler = graypy.GELFTLSHandler('<XXXXXX>.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')
Certifique-se de que o ficheiro /etc/ssl/certs/ca-certificates.crt existe no seu sistema:
- Em Ubuntu/Debian, pode instalá-lo com
sudo apt install ca-certificates. - Em Alpine Linux, instale com
apk add ca-certificates. - Em macOS, já está instalado por defeito, mas o ficheiro chama-se
/etc/ssl/cert.pem.
Resolução de problemas
Se não estiver a ver os seus logs no Graylog, verifique os seguintes pontos:
- Confirme que o Graylog tem uma entrada GELF TCP a escutar na porta 12201 e que o TLS não está ativado nesta entrada.
- No dashboard da Stackhero, em "Configure", confirme que a porta 12201 está configurada como TCP e com TLS ativado em "Input ports".
- Verifique que as definições do firewall na Stackhero mostram a porta "12201/tcp" como "ACCEPT", idealmente na posição #1 com a origem definida para 0.0.0.0/0 para testes.
- No painel de administração do Graylog, em "Search", certifique-se de que está a visualizar logs da última hora e defina a vista para atualizar a cada segundo para apanhar novas mensagens assim que chegam.