SiteWatch é uma plataforma de monitoramento de sites criada para demonstrar, em um projeto prático, o uso de APIs REST, banco de dados, containers, CI/CD, cloud, infraestrutura como código e observabilidade.
A aplicação permite cadastrar sites, executar verificações de disponibilidade, registrar histórico de checks, exportar métricas no formato Prometheus e visualizar indicadores em dashboards no Grafana.
O projeto é composto por:
- API REST desenvolvida com FastAPI
- Worker de monitoramento periódico em Python
- Banco PostgreSQL para persistência dos sites e verificações
- Prometheus para coleta de métricas
- Grafana para visualização dos indicadores
- Docker Compose para execução da stack
- GitHub Actions para deploy automatizado em AWS EC2
- Terraform para provisionamento básico da infraestrutura AWS
Git Push
|
v
GitHub Repository
|
v
GitHub Actions
|
v
AWS EC2
|
v
Docker Compose
|
+----------------+----------------+
| | |
v v v
SiteWatch API SiteWatch Monitor PostgreSQL
|
v
Prometheus
|
v
Grafana
Sites cadastrados
|
v
SiteWatch Monitor
|
v
POST /sites/{id}/check
|
v
Registro no PostgreSQL
|
v
Métricas em /metrics
|
v
Prometheus + Grafana
As imagens abaixo demonstram a aplicação em funcionamento, incluindo deploy automatizado, containers em produção, documentação da API, endpoints, métricas e dashboard de observabilidade.
- Cadastro de sites para monitoramento
- Listagem de sites cadastrados
- Execução manual de verificação por site
- Monitoramento periódico via worker
- Registro de status HTTP, disponibilidade e tempo de resposta
- Histórico de verificações por site
- Endpoint de health check
- Endpoint de métricas compatível com Prometheus
- Dashboard de acompanhamento no Grafana
- Deploy automatizado em instância EC2
| Método | Rota | Descrição |
|---|---|---|
GET |
/ |
Verifica se a API está respondendo |
GET |
/health |
Retorna o status de saúde da aplicação |
GET |
/metrics |
Exporta métricas no formato Prometheus |
GET |
/sites |
Lista os sites cadastrados |
POST |
/sites |
Cadastra um novo site |
POST |
/sites/{site_id}/check |
Executa uma verificação manual |
GET |
/sites/{site_id}/checks |
Lista o histórico de verificações |
Exemplo de cadastro:
{
"name": "GitHub",
"url": "https://github.com"
}| Métrica | Descrição |
|---|---|
sitewatch_site_up |
Status do site monitorado, usando 1 para online e 0 para offline |
sitewatch_response_time_ms |
Tempo de resposta do site em milissegundos |
sitewatch_checks_total |
Total de verificações executadas por site |
- Python 3.12
- FastAPI
- PostgreSQL
- Docker
- Docker Compose
- Prometheus
- Grafana
- GitHub Actions
- AWS EC2
- Terraform
- Ubuntu Linux
sitewatch/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── app/
│ ├── Dockerfile
│ ├── main.py
│ ├── monitor.py
│ └── requirements.txt
├── docs/
│ └── images/
├── infrastructure/
│ └── terraform/
│ ├── backend.tf
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── observability/
│ └── prometheus/
│ └── prometheus.yml
├── docker-compose.yml
└── README.md
Suba a stack localmente:
docker compose up -d --buildServiços publicados:
| Serviço | URL |
|---|---|
| API | http://localhost:8000 |
| Swagger UI | http://localhost:8000/docs |
| Prometheus | http://localhost:9090 |
| Grafana | http://localhost:3000 |
| PostgreSQL | localhost:5432 |
Para acompanhar os logs:
docker compose logs -fPara parar os containers:
docker compose downO deploy é executado pelo GitHub Actions quando há push na branch main.
O workflow acessa a instância EC2 por SSH, atualiza o repositório no servidor e recria os containers com Docker Compose:
git pull origin main
docker compose up -d --build
docker image prune -f
Secrets utilizados pela pipeline:
EC2_HOSTEC2_USEREC2_SSH_KEY
O diretório infrastructure/terraform contém a base de infraestrutura para execução do projeto na AWS:
- VPC
- Subnet pública
- Internet Gateway
- Route Table
- Security Group
- Instância EC2 Ubuntu
Variáveis principais:
aws_regionproject_namemy_ipkey_name
- Backend com FastAPI
- Cadastro e listagem de sites
- Serviço de monitoramento periódico
- Registro de verificações no PostgreSQL
- Containerização com Docker Compose
- Exportação de métricas para Prometheus
- Dashboard no Grafana
- Pipeline de deploy com GitHub Actions
- Deploy em AWS EC2
- Infraestrutura base com Terraform
- Script de inicialização/migração do banco de dados
- Alertas com Alertmanager
- Notificações via Discord ou e-mail
- Monitoramento de certificados SSL
- Centralização de logs com Loki
- Dashboard dedicado de performance
- Deploy em Kubernetes
- GitOps
- Desenvolvimento Backend
- Criação de APIs REST
- Persistência com banco relacional
- Containerização de aplicações
- Automação de deploy
- CI/CD
- Provisionamento de infraestrutura
- Observabilidade
- Coleta de métricas
- Troubleshooting em ambiente Linux
- Deploy de aplicação em cloud
Cassiano Marinho
DevOps | Cloud | Observabilidade | Desenvolvimento Backend
Este projeto faz parte da minha jornada de evolução profissional nas áreas de Desenvolvimento Backend, DevOps, Cloud Computing, Monitoramento, Observabilidade e Site Reliability Engineering.






