====== 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. ==== Ferramentas Utilizadas ==== 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|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|https://kibana.tce.go.gov.br/app/discover]] Métricas: (Sonnar) [[http://sonnar.tce.go.gov.br/projects|http://sonnar.tce.go.gov.br/projects]] ==== Monitoramento ==== 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:{{https://projetos.tce.go.gov.br/attachments/download/20623/clipboard-202506031100-fw5hv.png?nolink&1867x938}} Quando uma verificação de /health falhar, um alerta é enviado no Teams: \\ \\ {{https://projetos.tce.go.gov.br/attachments/download/20624/clipboard-202506031102-brhud.png?nolink&1449x902}} ==== Logs ==== 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 [[https://logging.apache.org/log4net/index.html|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|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|https://kibana.tce.go.gov.br/app/discover#/view/80ba9850-7bc9-11ef-8471-bdbdc5553695]] {{https://projetos.tce.go.gov.br/attachments/download/20510/clipboard-202505301155-m2b9a.png?nolink&2802x1657}} **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|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|http://sonnar.tce.go.gov.br/dashboard?id=TCE.Iago.API]] {{https://projetos.tce.go.gov.br/attachments/download/20626/clipboard-202506031133-pvbqv.png?nolink&1870x942}}