Skip to content

[GT Observabilidade] Implementar ferramentas para monitoramento de logs #69

Open
@ogecece

Description

@ogecece

Descrição

Construção inicial de um ambiente de observabilidade para a API utilizando OpenTelemetry e Grafana. Começamos pelos logs pois provavelmente é a etapa que menos exigiria alterações no código.

O fluxo de desenvolvimento será feito utilizando a branch dev como base. Qualquer Pull Request deverá ser feito a partir e para esta branch.

Requisitos

  • Configuração inicial dos recursos (OpenTelemetry Collector, Grafana + Grafana Loki)
    - Dockerfile, arquivos de configuração, variáveis de ambiente, comandos para build e execução no Makefile
    - Testes são desejáveis, mas no momento não são obrigatórios, pois a base de testes está defasada
  • Caso necessário, criação de novas mensagens de log
    - Todos os logs da aplicação devem ser exportados, especialmente no fluxo dos pontos de acesso, identificando no mínimo o trecho de código que gerou o log, nível, timestamp e mensagem clara
    - Mensagens de log não devem poluir muito o fluxo principal do código, focando em etapas relevantes da execução
  • Exportação dos logs da API para OTel Collector
    - Deve ser possível acessar diretamente os pontos de acesso do OTel Collector para debug
  • (opcional) Conexão OTel Collector - Grafana
    - Deve ser possível acessar o OTel collector como fonte de dados no Grafana
  • Configuração de visualização de logs no Grafana
    - O ambiente dessa prova de conceito não deve considerar que ficará apenas em desenvolvimento, mas que eventualmente irá para produção, ou seja, não usaremos plugin docker do Loki
    - Deve ser possível acessar o Loki como fonte de dados no Grafana
    - Um protótipo de dashboard baseado nos logs deve ser configurado

Configurando ambiente de desenvolvimento

Mais simples, usando apenas o repo da API e dados fake

  1. Execute make run.
    O comando irá levantar opensearch, postgres e tentará levantar o servidor da API, com falha. É necessário criar o índice no opensearch antes de levantar a API.
  2. Execute make load-data
  3. Execute make re-run

Mais completo, usando repo de processamento de dados, raspadores e api, com dados reais

  1. Execute make build-devel && podman pull ghcr.io/okfn-brasil/querido-diario-apache-tika-server:latest no repo querido-diario-data-processing
  2. No Makefile do repo querido-diario-data-processing, mudar variável FULL_PROJECT para true
  3. Execute make setup no repo querido-diario-data-processing

Agora o pod foi criado, assim como vários recursos como Opensearch, Postgres e Minio. Porém, eles ainda estão vazios. Vamos populá-los.

  1. Copie .local.env do repo querido-diario para .env
  2. Configure o ambiente de desenvolvimento do repo querido-diario de acordo com seu README
  3. Execute um raspador no repo querido-diario (ex: scrapy crawl rn_natal -a start_date=2024-03-01)
  4. Execute make re-run no repo querido-diario-data-processing

Agora temos arquivos, tabelas e índices populados. Podemos habilitar a API.

  1. Execute make build && make re-run no repo querido-diario-api

Pronto! Agora o ambiente está todo configurado.

Usando o ambiente

Algumas maneiras úteis de usar o ambiente de desenvolvimento:

  • Quer acessar o motor de busca para ver os índices textuais de diários e excertos temáticos?

    Execute curl -k -u admin:admin -X GET "localhost:9200/_cat/indices?v&pretty=true" (outros endpoints funcionarão igualmente de acordo com a documentação do opensearch).

  • Quer baixar mais arquivos de diários e processá-los?

    Execute outro scrapy crawl no repo querido-diario e então execute make re-run no querido-diario-data-processing novamente.

  • O live reload não está habilitado na API. Como checar as mudanças?

    Execute make re-run novamente.

  • Como acessar a documentação da API?

    Acesse 0.0.0.0:8080/docs.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    • Status

      Em andamento

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions