Healthz
Healthz é uma técnica de monitoramento muito utilizada pelo time de DevOps. Ela consiste em verificar periodicamente a "saúde" (health) da aplicação. O termo healthz foi introduzido pelo Google e é amplamente utilizado dentro da empresa.
O objetivo dessa técnica é fazer requisições periódicas em uma determinada rota da aplicação para certificar que a aplicação está disponível e funcional. Por convenção, utilizamos a rota /healthz
.
Criando a rota /healthz
Para criar a rota /heathz
, edite o arquivo router.js
.
const express = require('express');
const mongoose = require('mongoose');
const router = express.Router();
router.get('/', (req, res) => {
res.json({ message: 'It works!' });
});
// rota healthz
router.get('/healthz', (req, res) => {
res.sendStatus(200);
});
module.exports = router;
Abra o Postman e faça uma requisição GET
em http://localhost:3000/healthz
. O resultado deve ser o status 200 OK
.
OK
Implementando a rota /healthz
Como a aplicação se conecta com um banco de dados, a API só pode ser considerada saudável se a comunicação com o banco também estiver. Não adianta receber requisições se não há comunicação com o banco.
Essa rota precisa decidir se a aplicação está ou não saudável e para isso é necessário validar se a conexão com o banco está funcionando.
Abra o arquivo router.js
e altere a rota /healthz
.
router.get('/healthz', (req, res) => {
mongoose.connection.db
.admin()
.ping()
.then(() => res.sendStatus(200))
.catch(() => res.sendStatus(500));
});
A função ping()
é utilizada para testar se um servidor está respondendo aos comandos. Quando a rota /healthz
for solicitada, o Mongoose realiza um ping
no banco de dados. Se a conexão estiver ativa, a rota retorna o status 200 OK
, caso contrário ela retorna o status 500 Internal Server Error
.
Dica
Se a aplicação utilizasse mais algum serviço além do banco de dados, como por exemplo um serviço de cache, nós deveríamos testar também se o serviço de cache está ativo.
Mundo Real
Quando trabalhamos com aplicações em Containers, utilizamos essa técnica para verificar periodicamente se aquela instância está ativa. Quando a instância responder com o erro 500 Internal Server Error
, precisamos reciclar a aplicação, ou seja, encerrar a instância falha e inicializar uma nova.
No Kubernetes, por exemplo, utilizamos essa técnica tanto para verificar a "saúde" da instância bem como para saber se ela já está disponível para receber requisições no momento da inicialização.
Resumo
- Aprendemos sobre a técnica Healthz
- Entendemos a importância de utilizar essa técnica nas aplicações
- Implementamos a rota
/healthz
no Express para verificar a saúde da aplicação