Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Endpoint para consultar status do sistema #102

Closed
filipedeschamps opened this issue Aug 13, 2021 · 7 comments
Closed

Endpoint para consultar status do sistema #102

filipedeschamps opened this issue Aug 13, 2021 · 7 comments
Labels
back Envolve modificações no backend infra Mudanças relacionadas à infraestrutura

Comments

@filipedeschamps
Copy link
Owner

filipedeschamps commented Aug 13, 2021

Descrição

Como responsável pelo SRE do site, eu gostaria de ter disponível um endpoint /status que ao ser feito um GET retorna a saúde do sistema e dos serviços dependentes, em formato JSON.

Execução

Eu tentei procurar se existe algum padrão de retorno em APIs REST, e não encontrei nada, meio que cada um implementa da forma que quiser. O que achei de padrão foram endpoints para gerenciar a saúde e readiness num contexto Kubernetes, mas daí meio que acaba tendo uma função que vai mais pro lado de gerenciar o cluster (e também pra mensurar a saúde). Talvez o que seria mais interessante é pesquisar se existe padrões no contexto de microsserviços, procurei aqui e não achei muita coisa.

De qualquer forma, o que sugiro é implementarmos o endpoint /api/v1/status (ou /health confira ali em baixo) e o retorno pode depender de como o serviço de monitoria que utilizarmos funciona (se ele vai conseguir interpretar um JSON).

Por exemplo podemos retornar 200 OK se tudo estiver saudável e 503 Service Unavailable se algum serviço não estiver saudável, como por exemplo o banco de dados que é a única dependência atual do site.

{
    "updated_at": "2021-08-13T18:36:35.138Z",
    "dependencies": {
        "database": {
            "status": "healthy",        // "healthy", "degraded", "unhealthy"
            "opened_connections": 30
        }
    }
}

Ou até podemos retornar 200 mesmo com uma dependência não saudável, dado que o endpoint fez com sucesso o que deveria fazer. E deixa o 5xx se der algum problema inesperado na consulta. O que acham? Novamente, vai depender de como as ferramentas de monitoria conseguem interpretar o cabeçalho ou objeto retornado.

Status ou Health?

Me pergunto isso, porque seria interessante mais para frente ter um endpoint que retorna as estatísticas do site, por exemplo, quantidade de cadastros, views, etc... me preocupo do nome desse endpoint ser muito parecido com "status"). Então por isso penso que talvez o nome do endpoint que retorna a saúde dos sistemas deva ser /health. Por outro lado, é comum se usar a nomenclatura "status page" para procurar a página de status de um serviço. Inclusive o subdomínio de muitos serviços é status.dominio.com.

Alguém tem alguma opinião?

Serviços de monitoria

Esbarrei faz pouco tempo atrás com esse https://updown.io/ e achei bem barato.

Alguém tem sugestões sobre que tipo de serviço usar para monitoramento?

Dependência

Existe a issue #96 que poderia ser executada antes, mas essa aqui pode ser executada em paralelo sem problemas, porque a única coisa que daria conflito seria no package.json.

Agora o que realmente tem de dependência é o PR #98 do @brunofamiliar , nada muito grave, pois só vai alterar a interface do módulo do banco de factory para singleton.

@filipedeschamps filipedeschamps added back Envolve modificações no backend infra Mudanças relacionadas à infraestrutura labels Aug 13, 2021
@eduprog
Copy link

eduprog commented Aug 13, 2021

@filipedeschamps pelo que coloquei testando aqui o https://uptimerobot.com/ é totalmente free se quiser o básico. Achei interessante, apesar de não dar para mudar muito a página de monitoramento com os temas e tudo mais, nem usar um domínio próprio a não ser no pro. Mas achei bem legal.

A esquerda a página de monitoramento que pode ter vários serviços

A direita a página de dashboard dentro do site da UptimeRobot.

PS: Criei apenas um endpoint get retornando um ok. Em uma api aqui para poder testar e deixei ativo, bem interessante, segue o link público da página da esquerda.

image

@tcarreira
Copy link

tcarreira commented Aug 19, 2021

O termo status é health (ou healthcheck) costuma ser usado como sinónimo.
A minha preferência pessoal é status (o termo healthcheck me soa demasiado direto a saúde do site)

E como sugeriu o @eduprog, a maioria dos serviços de monitoração levam em conta o status code da resposta. Ou seja, 50x se queremos ter um "alarme", 20x se está tudo bem.

Por outro lado, se vc quer obter estatísticas, isso significa métricas, o que normalmente é no endpoint /metrics
Tem o padrão de prometheus que é muito usado e liga bem com o grafana para dashboards, mas isso é outra issue.

@rhandrade
Copy link
Contributor

Eu prefiro o termo status também seguindo a mesmo linha de pensamento do @tcarreira.

Para serviços de monitoramento, na empresa que trabalho já usamos o https://www.pingdom.com e funcionava muito bem para as nossas necessidades de monitorar alguns sites complexos de clientes.

Sobre ferramentas para página de status, não conhecia a uptimerobot que o @eduprog mencionou, mas já vi vários sites usando a Status Page da Atlassian e acho ele bem legal também.

Segue imagem do Reddit
image

@liverday
Copy link
Contributor

A combinação de Grafana + Prometheus é extremamente poderosa! São Open Source e tem inúmeras funcionalidades para conseguirmos ter um bom ambiente de monitoramento do TN.

Mas pensando numa pequena entrega, criei um PR #130 com o endpoint /status criado. Se tiverem alguma sugestão ou tiverem algo pra adicionar ou retirar nele, fico a disposição.

@filipedeschamps
Copy link
Owner Author

Pessoal, endpoint está criado e em produção: https://www.tabnews.com.br/api/v1/status

No PR #137 apontei um detalhe para isolarmos o escopo do número de conexões do banco. Com isso feito, podemos fechar essa issue, pois o restante do trabalho vai ser ir adaptando o endpoint para entender se ele consegue ser usado pelos serviços de health check 👍

@liverday
Copy link
Contributor

@filipedeschamps aproveitei que estava em casa e fiz a mudança: #138

@filipedeschamps
Copy link
Owner Author

Estamos bem avançados nessa Milestone 🤝

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
back Envolve modificações no backend infra Mudanças relacionadas à infraestrutura
Projects
None yet
Development

No branches or pull requests

5 participants