Durante cerca de cinco anos, enfrentei a tarefa de recolher logs, tipicamente de bases de código pequenas a médias. Enviar logs a partir do código não é um problema: Java e Go têm bibliotecas para isso praticamente prontas a usar. Mas implementar algo para os recolher é uma dor de cabeça. Compreendo que é uma tarefa solucionável (mesmo antes do ChatGPT, e agora ainda mais). Ainda assim, todos os sistemas de logging são principalmente orientados para o mundo empresarial e os seus requisitos, em vez de pequenas equipas ou desenvolvedores individuais com poucos recursos e um prazo "para ontem".
Lançar o ELK é um desafio para mim de cada vez: um monte de configurações, uma implementação não trivial, e quando entro na interface, os meus olhos ficam confusos com os separadores. Com Loki e Graylog, é um pouco mais fácil, mas ainda há muito mais funcionalidades do que preciso. Ao mesmo tempo, separar logs entre projetos e adicionar outros utilizadores ao sistema para que não vejam o que não devem, também não é o processo mais óbvio.
Então, há cerca de um ano, decidi criar o meu próprio sistema de recolha de logs. Um que fosse o mais fácil possível de usar e lançar. Seria implementado no servidor com um único comando, sem qualquer configuração ou separadores desnecessários na interface. Foi assim que surgiu o Log Bull, e agora é open source: um sistema de recolha de logs para desenvolvedores com projetos de média dimensão.
Índice:
O Log Bull é um sistema de recolha de logs com ênfase na facilidade de uso (configuração mínima, funcionalidades mínimas, zero configuração no arranque). O projeto é completamente open source sob a licença Apache 2.0. A minha prioridade principal foi criar uma solução que permitisse a um desenvolvedor júnior descobrir facilmente como iniciar o sistema, como enviar logs para ele e como visualizá-los em cerca de 15 minutos.
Principais funcionalidades do projeto:
https://www.youtube.com/watch?v=8H8jF8nVzJE&embedable=true
O projeto é desenvolvido em Go e construído sobre OpenSearch.
Website do projeto - https://logbull.com
GitHub do projeto - https://github.com/logbull/logbull
P.S. Se achar o projeto útil e tiver uma conta GitHub, por favor dê-lhe uma estrela ⭐️. As primeiras estrelas são difíceis de recolher. Ficaria extremamente grato pelo seu apoio!
Existem três formas de implementar um projeto: através de um script .sh (que recomendo), via Docker e via Docker Compose.
Método 1: Instalação via script
O script irá instalar o Docker, colocar o projeto na pasta /opt/logbull, e configurar o arranque automático quando o sistema é reiniciado. Comando de instalação:
sudo apt-get install -y curl && \ sudo curl -sSL https://raw.githubusercontent.com/logbull/logbull/main/install-logbull.sh \ | sudo bash
Método 2: Lançamento via Docker Compose
Crie o ficheiro docker-compose.yml com o seguinte conteúdo:
services: logbull: container_name: logbull image: logbull/logbull:latest ports: - "4005:4005" volumes: - ./logbull-data:/logbull-data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:4005/api/v1/system/health"] interval: 5s timeout: 5s retries: 30
E execute o comando docker compose up -d. O sistema irá iniciar na porta 4005.
Método 3: Lançamento via comando Docker
Execute o seguinte comando no terminal (o sistema também irá iniciar na porta 4005):
docker run -d \ --name logbull \ -p 4005:4005 \ -v ./logbull-data:/logbull-data \ --restart unless-stopped \ --health-cmd="curl -f http://localhost:4005/api/v1/system/health || exit 1" \ --health-interval=5s \ --health-retries=30 \ logbull/logbull:latest
Projetei o projeto tendo em mente a conveniência, principalmente para desenvolvedores. É por isso que criei bibliotecas para a maioria das linguagens de desenvolvimento populares. Fiz isto com a ideia de que o Log Bull pode ser conectado a qualquer biblioteca popular como um processador sem alterar a base de código atual.
Recomendo vivamente verificar os exemplos no website, porque existe um painel interativo para selecionar uma linguagem:

Vamos usar Python como exemplo. Primeiro, precisa de instalar a biblioteca (embora também possa enviar via HTTP; existem exemplos para cURL):
pip install logbull
Depois envie a partir do código:
import time from logbull import LogBullLogger # Initialize logger logger = LogBullLogger( host="http://LOGBULL_HOST", project_id="LOGBULL_PROJECT_ID", ) # Log messages (printed to console AND sent to LogBull) logger.info("User logged in successfully", fields={ "user_id": "12345", "username": "john_doe", "ip": "192.168.1.100" }) # With context session_logger = logger.with_context({ "session_id": "sess_abc123", "user_id": "user_456" }) session_logger.info("Processing request", fields={ "action": "purchase" }) # Ensure all logs are sent before exiting logger.flush() time.sleep(5)
Todos os logs são exibidos imediatamente no ecrã principal. Pode:
Reduzir o tamanho das mensagens (cortando a linha para ~50-100 caracteres).
Expandir a lista de campos enviados (userid, orderid, etc.).
Clicar num campo e adicioná-lo ao filtro. Pesquisa de logs com condições:



Também pode recolher grupos de condições (por exemplo, a mensagem inclui determinado texto, mas exclui um endereço IP de servidor específico).
Espero que o meu sistema de recolha de logs seja útil para aqueles desenvolvedores que não querem ou não podem (devido a recursos limitados do projeto) implementar soluções "pesadas" como o ELK. Já estou a usar o Log Bull em projetos de produção, e tudo está a correr bem. Agradeço feedback, sugestões de melhoria e problemas no GitHub.


