Skip to content

BrunoTulio/FluentBiPsql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fluent Bit PostgreSQL Log Storage Facilitator 🚀📊

Descrição

Este projeto fornece uma solução dockerizada e flexível para coletar, processar e armazenar logs no PostgreSQL usando Fluent Bit. Simplifica a integração de logs de diferentes fontes com um banco de dados PostgreSQL.

🌟 Funcionalidades Principais

  • 🔄 Coleta de logs de múltiplas fontes
  • 🧩 Configuração dinâmica via variáveis de ambiente
  • 🔒 Suporte a diferentes níveis de log
  • 📦 Empacotado como imagem Docker para fácil implantação

🛠 Pré-requisitos

  • Docker
  • PostgreSQL
  • Conhecimentos básicos de Fluent Bit

📦 Instalação

Clonar o Repositório

git clone https://github.com/seu-usuario/fluent-bit-postgres-storage
cd fluent-bit-postgres-storage

Construir a Imagem Docker

docker build -t fluent-bit-postgres .

🚀 Uso Rápido

Variáveis de Ambiente Principais

  • FLB_FLUSH: Intervalo de flush em segundos (padrão: 1)
  • FLB_LOG_LEVEL: Nível de log (debug, info, warn, error)
  • FLB_INPUT_NAME: Nome da fonte de entrada (padrão: tail)
  • FLB_INPUT_PATH: Caminho dos logs para monitorar
  • FLB_INPUT_PARSER: Parser para os logs (json, etc)
  • FLB_MATCH: Tag para correspondência de logs

Variáveis de Ambiente para PostgreSQL

  • FLB_OUTPUT_HOST: Endereço do host do PostgreSQL
  • FLB_OUTPUT_PORT: Porta do PostgreSQL (padrão: 5432)
  • FLB_OUTPUT_DATABASE: Nome do banco de dados
  • FLB_OUTPUT_USER: Usuário do banco de dados
  • FLB_OUTPUT_PASSWORD: Senha do banco de dados
  • FLB_OUTPUT_TABLE: Nome da tabela para armazenar logs

Filtros de Log Opcionais

  • FLB_ENABLED_ONLY_LEVEL: Habilitar filtro para descartar logs por nível (true/false)
  • FLB_LEVEL_FILTER_ONLY_LEVEL: Nível de log a ser descartado antes da inserção no banco (debug, info, etc)

Nota: Quando habilitado, logs no nível especificado serão completamente descartados e NÃO serão inseridos no banco de dados.

Exemplo de Execução

docker run -d \
  -e FLB_FLUSH=1 \
  -e FLB_LOG_LEVEL=debug \
  -e FLB_INPUT_NAME=tail \
  -e FLB_INPUT_PATH=/var/log/app.log \
  -e FLB_INPUT_PARSER=json \
  -e FLB_MATCH=patrimony \
  -e FLB_OUTPUT_HOST=db \
  -e FLB_OUTPUT_PORT=5432 \
  -e FLB_OUTPUT_DATABASE=patrimony \
  -e FLB_OUTPUT_USER=patrimony \
  -e FLB_OUTPUT_PASSWORD=patrimony \
  -e FLB_OUTPUT_TABLE=logs \
  fluent-bit-postgres

📝 Configuração Detalhada

Arquivos de Configuração

  • fluent-bit.template.conf: Template principal de configuração
  • parsers.conf: Definições de parsers para diferentes formatos de log
  • entrypoint.sh: Script de inicialização que processa variáveis de ambiente

Personalização

Você pode personalizar o comportamento do Fluent Bit modificando os arquivos de configuração ou passando variáveis de ambiente.

🔍 Filtros de Log

O projeto suporta filtragem avançada de logs:

  • Filtro por nível de log
  • Parsing automático de logs em formato JSON
  • Suporte a múltiplos parsers

🚨 Requisito Fundamental: Logs em JSON

ATENÇÃO: Este projeto suporta EXCLUSIVAMENTE logs no formato JSON.

📋 Formato de Log Esperado

{
  "date": 1609459200.000,
  "level": "info",
  "msg": "Mensagem de log",
  "user_id": "123e4567-e89b-12d3-a456-426614174000",
  "requestId": "req-123-456-789"
}

Características Obrigatórias

  • Todos os logs DEVEM ser estruturados em JSON
  • Campos como date, level, msg são esperados
  • Logs em outros formatos serão descartados
  • Recomenda-se uso de bibliotecas de log que suportem JSON

🛑 Limitações

  • Não há suporte para logs em texto plano
  • Não há conversão automática de outros formatos
  • A estrutura JSON deve ser consistente

🤝 Contribuição

  1. Faça um fork do projeto
  2. Crie sua branch de feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. Abra um Pull Request

📄 Licença

MIT License - Veja o arquivo LICENSE para detalhes completos.

🐛 Problemas e Suporte

Reporte problemas através do GitHub Issues. Contribuições são bem-vindas!

📞 Contato

Bruno Tulio - [Seu Email ou Perfil GitHub]

📊 Estrutura da Tabela de Logs

A solução utiliza uma tabela PostgreSQL com campos flexíveis para capturar informações de logs:

Coluna Tipo Descrição
math varchar(50) Identificador matemático único
ts timestamptz Timestamp do log original
data jsonb Dados processados do log
level varchar(10) Nível do log extraído
msg text Mensagem de log extraída
user_id varchar(36) ID do usuário extraído
request_id text ID da requisição extraído

🔍 Processamento Automático de Logs

Função de Processamento de Logs

CREATE OR REPLACE FUNCTION public.process_log_data()
RETURNS TRIGGER LANGUAGE plpgsql AS $$
BEGIN
    IF NEW.data IS NOT NULL THEN
        DECLARE
            data_jsonb jsonb;
        BEGIN
            data_jsonb := NEW.data;

            -- Extrai campos do JSON
            NEW.ts := to_timestamp((data_jsonb->>'date')::float);
            NEW.level := data_jsonb->>'level';
            NEW.msg := data_jsonb->>'msg';
            NEW.user_id := data_jsonb->>'user_id';
            NEW.request_id := data_jsonb->>'requestId';
        END;
    END IF;

    RETURN NEW;
END;
$$;

Trigger de Inserção de Logs

CREATE TRIGGER before_insert_log 
BEFORE INSERT ON public.logs 
FOR EACH ROW 
EXECUTE FUNCTION process_log_data();

Como Funciona

  • A função process_log_data() é executada automaticamente antes de cada inserção
  • Extrai campos específicos do JSON original
  • Popula colunas adicionais de forma dinâmica
  • Converte timestamps e outros campos conforme necessário

Benefícios:

  • Processamento automático de logs
  • Flexibilidade na extração de dados
  • Mínima intervenção manual

🚀 Caso de Uso Exemplo

Sistema de logs de aplicação web:

  • Registra eventos de autenticação
  • Captura informações de requisições
  • Facilita auditoria e monitoramento

Happy Logging! 🚀📊

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published