Sistema de Monitoramento de Logs
Essa seção descreve a configuração e o uso do serviço de monitoramento por meio de logs para o projeto. O serviço é implementado usando FastAPI, Elasticsearch e Kibana, com suporte para registro e consulta de logs.
Como o Sistema Funciona
FastAPI:
- FastAPI é usado para criar uma API que recebe logs de diferentes serviços.
- A API tem endpoints para registrar logs
(/log)
, verificar a saúde do serviço(/ping)
, e consultar logs armazenados(/)
. - Quando um log é enviado para o endpoint
/log
, ele é indexado (armazenado) no Elasticsearch.
Elasticsearch:
- Elasticsearch é um motor de busca e análise de dados distribuído.
- Ele armazena os logs recebidos pela API do FastAPI.
- Os logs são indexados, o que significa que eles são organizados de forma a permitir buscas rápidas e eficientes.
- Os dados podem ser consultados quase em tempo real, o que é crucial para monitoramento de sistemas.
Kibana:
- Kibana é uma interface de análise e visualização que trabalha com os dados armazenados no Elasticsearch.
- Ele permite criar dashboards interativos para visualizar e analisar os logs.
- Usando Kibana, podemos criar gráficos, tabelas e outras visualizações que ajudam a entender melhor os dados de log.
- Facilita o monitoramento e a análise de logs de forma visual e intuitiva.
Por que Usar Kibana e Elasticsearch
Elasticsearch
- Desempenho: Capacidade de buscar e analisar grandes volumes de dados de forma muito rápida.
- Escalabilidade: Pode ser distribuído em vários nós, permitindo lidar com grandes quantidades de dados.
- Flexibilidade: Suporta diversos tipos de dados e permite realizar buscas complexas.
Kibana
- Visualização: Oferece ferramentas poderosas para criar visualizações que ajudam a entender os dados.
- Interatividade: Dashboards interativos que permitem explorar os dados de diferentes maneiras.
- Facilidade de Uso: Interface amigável que facilita a criação de gráficos e visualizações sem necessidade de código.
Detalhes da Implementação
Características Principais
- Registro de Logs: Logs podem ser registrados com informações sobre o serviço, usuário, ação, resultado, causa e timestamp.
- Consulta de Logs: Logs registrados podem ser consultados através de uma API.
- Visualização de Logs: Logs são visualizados e analisados no Kibana.
- Configuração via Docker Compose: Serviços são configurados e gerenciados usando Docker Compose.
API com FastAPI
Endpoints
1. Registro de Log:
- Método:
POST
- Rota: /log
- Descrição: Este endpoint recebe uma entrada de log contendo detalhes como o serviço, o ID do usuário, a ação realizada, o resultado, a causa (opcional) e o timestamp (opcional). O log é então indexado no Elasticsearch.
- Corpo da Requisição: Deve conter um objeto JSON com os campos mencionados acima.
- Resposta: Retorna um status de sucesso e o ID do log indexado no Elasticsearch.
2. Ping:
- Método:
POST
- Rota: /ping
- Descrição: Este endpoint é usado para verificar se o serviço está funcionando corretamente. Ele retorna um status de sucesso.
- Corpo da Requisição: Não é necessário.
- Resposta: Retorna um status de sucesso.
3. Consulta de Logs:
- Método:
GET
- Rota: /
- Descrição: Este endpoint permite a consulta de todos os logs armazenados no Elasticsearch. Ele realiza uma busca por todos os documentos no índice de logs e retorna os resultados.
- Corpo da Requisição: Não é necessário.
- Resposta: Retorna todos os logs armazenados, organizados por índice.
Mecanismo de Indexação
Quando um log é enviado para o endpoint de registro (/log)
, a API:
- Verifica se o campo timestamp está presente. Se não estiver, atribui o timestamp atual.
- Converte o log para um formato JSON.
- Envia o log para o Elasticsearch, onde é indexado.
- Retorna uma resposta de sucesso com o ID do log indexado.
Tratamento de Erros
A API possui tratamento de erros para garantir a robustez do sistema:
- Em caso de falha na conexão com o Elasticsearch, é retornado um erro 500 com a mensagem "Elasticsearch connection error".
Configuração do Docker Compose
A configuração do Docker Compose envolve a definição dos serviços Elasticsearch e Kibana, especificando as imagens Docker a serem usadas, volumes de dados, portas expostas e variáveis de ambiente necessárias. O Elasticsearch é configurado para rodar como um nó único, enquanto o Kibana é configurado para se conectar ao Elasticsearch.
Passos para Configuração
-
Instalar Dependências: Certifique-se de ter o Docker e Docker Compose instalados na sua máquina.
-
Configurar Variáveis de Ambiente: Crie um arquivo
.env
com as seguintes variáveis:STACK_VERSION=7.15.0
ES_PORT=9200
KIBANA_PORT=5601
ELASTIC_PASSWORD=your_elastic_password
KIBANA_PASSWORD=your_kibana_password
CLUSTER_NAME=docker-cluster
MEM_LIMIT=1g
LICENSE=basic
-
Iniciar os Serviços: Execute os seguintes comandos para iniciar os serviços:
docker-compose down
docker-compose up -d
-
Verificar Logs: Verifique os logs dos serviços para garantir que estão rodando corretamente.
docker-compose logs -f es01
docker-compose logs -f kibana
-
Acessar Kibana: Acesse Kibana através do navegador na URL
http://localhost:5601.
Verificação e Monitoramento
Para verificar e monitorar os logs indexados:
- Acessar Kibana: Abra Kibana no navegador.
- Criar um Padrão de Índice: Navegue até Stack Management > Index Patterns e crie um novo padrão de índice para log*.
- Explorar Dados: Use a aba Discover para explorar os logs armazenados no Elasticsearch.