Projeto desenvolvido como parte do desafio técnico da Korp.
Implementar um serviço HTTP em Golang executado em containers Docker, utilizando NGINX como proxy reverso, Prometheus para monitoramento, Grafana para visualização de métricas e Ansible para automação do provisionamento.
- Golang
- Docker
- Docker Compose
- NGINX
- Prometheus
- Grafana
- Ansible
Antes de executar o projeto, é necessário possuir:
- Docker
- Docker Compose
- Ansible
Instale a collection utilizada pelo playbook:
ansible-galaxy collection install community.dockerVerifique a instalação:
ansible-galaxy collection list | grep community.dockerCliente
|
v
NGINX (porta 80)
|
v
Aplicação Go (porta 8080)
|
+--> /health
|
+--> /metrics
|
v
Prometheus
|
v
Grafana
GET /projeto-korp
Exemplo de resposta:
{
"nome": "Projeto Korp",
"horario": "2026-06-08T11:29:12Z"
}O campo horario é gerado dinamicamente em UTC a cada requisição.
O endpoint /health foi implementado para validação de disponibilidade da aplicação.
Ele pode ser utilizado por ferramentas de monitoramento, balanceadores de carga ou automações para verificar se o serviço está operacional.
GET /health
Resposta:
{
"status": "UP"
}GET /metrics
Métricas expostas no padrão Prometheus.
.
├── ansible
├── docs
│ ├── grafana.png
│ └── prometheus.png
├── grafana
│ └── provisioning
│ ├── dashboards
│ │ ├── dashboard.json
│ │ └── dashboard.yml
│ └── datasources
│ └── datasource.yml
├── nginx
├── prometheus
├── Dockerfile
├── docker-compose.yml
├── main.go
└── README.md
A aplicação utiliza multi-stage build para reduzir o tamanho da imagem final.
Etapas:
- Compilação da aplicação utilizando a imagem oficial do Golang.
- Geração do binário estático.
- Criação de uma imagem final baseada em Alpine Linux contendo apenas o binário da aplicação.
Benefícios:
- Imagem menor
- Menor superfície de ataque
- Build mais eficiente
- Melhor prática para aplicações Go em containers
docker compose up -d --builddocker pscurl http://localhost/projeto-korpcurl http://localhost/healthcurl http://localhost/metricsAcesse:
Verifique os targets em:
Status → Targets
O serviço deve aparecer com status UP.
Exemplo:
O projeto disponibiliza um dashboard exportado:
grafana/dashboard.json
Para importar:
- Dashboards → Import
- Selecionar o arquivo
grafana/dashboard.json
Acessar:
http://localhost:3000
``
Login padrão:
```text
Usuário: admin
Senha: admin
Dashboard configurado para exibir:
Disponibilidade do serviço (service_up) Total de requisições (http_requests_total)
Após o primeiro acesso é necessário configurar o datasource do Prometheus.
Menu:
Connections → Data Sources
Selecionar:
Prometheus
URL utilizada pelo datasource do Grafana:git
Salvar em:
Save & Test
Exemplo:
Disponibilidade do serviço:
up{job="http-server-projeto-korp"}
Valor:
1→ Serviço disponível (UP)0→ Serviço indisponível (DOWN)
http_requests_total
Contabiliza o total de requisições recebidas pela aplicação.
O dashboard é provisionado automaticamente durante a inicialização do ambiente.
Não é necessário:
- Importar dashboards manualmente
- Configurar datasource manualmente
- Executar consultas manualmente
Ao acessar o Grafana, o dashboard já estará disponível e conectado ao Prometheus.
O dashboard e a datasource são provisionados automaticamente durante a inicialização do ambiente, garantindo que o monitoramento esteja disponível sem configuração manual.
Aplicação:
http://localhost/projeto-korpGrafana:
http://localhost:3000Prometheus:
http://localhost:9090Gerar algumas requisições:
curl http://localhost/projeto-korp
curl http://localhost/projeto-korp
curl http://localhost/projeto-korpApós alguns segundos, os painéis do Grafana serão atualizados automaticamente exibindo:
- Disponibilidade do Serviço (UP)
- Total de Requisições
docker compose up -d --buildOs seguintes serviços serão iniciados automaticamente:
- http-server
- nginx
- prometheus
- grafana
O Grafana carregará automaticamente:
- Datasource Prometheus
- Dashboard de monitoramento
- Consultas das métricas
Para provisionar o ambiente:
ansible-playbook -i ansible/inventory.ini ansible/playbook.ymlO playbook realiza:
- Verificação do Docker
- Criação da rede Docker
- Build da aplicação
- Inicialização dos containers
- Configuração do proxy reverso
- Inicialização do Prometheus
- Inicialização do Grafana
- Validação do endpoint HTTP
- Exibição da resposta no terminal
O playbook utiliza a collection community.docker para gerenciamento da rede Docker.
Executar:
ansible-playbook -i ansible/inventory.ini ansible/playbook.ymlApós a execução do ambiente:
curl http://localhost/projeto-korpResposta esperada:
{
"nome": "Projeto Korp",
"horario": "<horário UTC atual>"
}
