Observabilidade

Observabilidade de software é a capacidade de entender o que está acontecendo internamente em um sistema a partir das informações que ele expõe externamente, como logs, métricas e traces. O objetivo é permitir que engenheiros diagnostiquem problemas, entendam comportamentos e tomem decisões informadas sobre a saúde e o desempenho da aplicação.

Na engenharia do TCE é utilizado alguns sistemas para gerenciamento de observabilidade dos sistemas.

Monitoramento & Disponibilidade: (Uptime Kuma) https://uptime.tce.go.gov.br/status/applications

Gerenciamento de Logs: (Stack ELK - Elasticsearch, Logstash e Kibana) https://kibana.tce.go.gov.br/app/discover

Métricas: (Sonnar) http://sonnar.tce.go.gov.br/projects

Uma vez que uma aplicação é desenvolvida, é fundamental aplicarmos o monitoramento para garantir que a aplicação está disponivel e sermos notificados quando algo está indisponivel.

Para criar um monitoramento, devemos criar uma rota na aplicação chamada /health nessa rota o sistema pode verificar a disponibilidade das partes criticas como:

  • Banco de Dados
  • Acesso a APIs Externas

Caso alguma das partes importantes da aplicação não responda corretamente, a rota deve retornar um erro 500. Esse erro será capturado pelo monitoramento e enviado uma mensagem para o teams do TCE.

Uma vez configurada a rota /health basta criar o monitoramento no uptime:

Quando uma verificação de /health falhar, um alerta é enviado no Teams:

Os logs das aplicações devem ser enviados para a stack ELK (Elasticsearch, Logstash e Kibana). Inicialmente durante o desenvolvimento é importante utilizar uma bilbioteca de logs gere os arquivos application.log de forma estruturada, um exemplo é o Log4Net para .NET

Uma vez que os logs estão sendo gerados, é necessário criar um agente no servidor que enviará os logs ao logstash para processamento e ingestão no elasticsearch.

Um exemplo dessa configuração em um sistema que usa docker é configurar o gelf no docker-compose:

logging:
   driver: "gelf"
      options:
        gelf-address: "udp://172.17.110.11:12201"
        tag: "DOCKER-JSON-LOGS"

Para aplicações .NET podemos configurar o filebeat no IIS seguindo a documentação do elasticsearch https://kibana.tce.go.gov.br/app/home#/tutorial/iisLogs

OBS: Os servidores IIS do TCE já estão configurados com o agente do filebeat, portanto basta salvar os logs da aplicação em um arquivo application.log para que os mesmos sejam enviados do IIS para o ELK

O resultado são os logs enviados para o ELK e possíveis de visualização no Kibana:

https://kibana.tce.go.gov.br/app/discover#/view/80ba9850-7bc9-11ef-8471-bdbdc5553695

Métricas

As métricas de código são geradas pelo Sonar, ele é responsável por analisar o código e gerar alertas de possíveis problemas e códigos que precisam de melhorias.

A adição do sonar no projeto é feita usando a pipelinde de CI/CD do gitlab e se necessário o docker.

No projeto primeiro adicione a pipeline de CI/CD com o arquivo .gitlab-ci.yml

image:
  name: docker/compose:latest

stages:
  - sonar
  - test
  - deploy

tcego-iago:sonar:
  image: sonarsource/sonar-scanner-cli:4.8
  stage: sonar
  script:
    - sonar-scanner -Dsonar.projectKey=TCE.Iago.AI -Dsonar.sources=source/API_IAGO -Dsonar.projectName="TCE.Iago.AI" -Dsonar.host.url="http://sonnar.tce.go.gov.br" -Dsonar.login="df0c036593cc15f4decb0538447e35382b72df44"
  only:
    refs:
   - main
      - merge_requests
      - develop
  tags:
    - docker-pipes-runner

Usando a imagem do docker do sonar: sonarsource/sonar-scanner-cli:4.8 o mesmo se encarregará de enviar o código para o sonar do TCE http://sonnar.tce.go.gov.br onde será feito a análise de código.

O seguintes parametros são necessários no sonar scanner:

  • sonar.projectKey: Identificação do Projeto
  • sonar.sources: Pasta do projeto
  • sonar.projectName: Nome do Projeto
  • sonar.host.url: URL do Sonar
  • sonar.login: Token do Sonar

Ao rodar a pipeline uma dashboard de métricas será gerada no sonar com o sonar.projectKey especificado:

http://sonnar.tce.go.gov.br/dashboard?id=TCE.Iago.API

  • pres/gerti/servico_de_desenvolvimento_de_sistemas_de_informacao/projetos/observabilidade.txt
  • Última modificação: 03/06/2025 14:34
  • por mfaquino