Skip to content

Repository files navigation

http-server-projeto-korp

Projeto desenvolvido como parte do desafio técnico da Korp.

Objetivo

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.


Tecnologias Utilizadas

  • Golang
  • Docker
  • Docker Compose
  • NGINX
  • Prometheus
  • Grafana
  • Ansible

Pré-requisitos

Antes de executar o projeto, é necessário possuir:

  • Docker
  • Docker Compose
  • Ansible

Instale a collection utilizada pelo playbook:

ansible-galaxy collection install community.docker

Verifique a instalação:

ansible-galaxy collection list | grep community.docker

Arquitetura

Cliente
   |
   v
NGINX (porta 80)
   |
   v
Aplicação Go (porta 8080)
   |
   +--> /health
   |
   +--> /metrics
           |
           v
      Prometheus
           |
           v
        Grafana

Funcionalidades

Endpoint principal

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.

Endpoint de Health Check

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"
}

Endpoint de Métricas

GET /metrics

Métricas expostas no padrão Prometheus.


Estrutura do Projeto

.
├── 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

Dockerfile

A aplicação utiliza multi-stage build para reduzir o tamanho da imagem final.

Etapas:

  1. Compilação da aplicação utilizando a imagem oficial do Golang.
  2. Geração do binário estático.
  3. 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

Executando com Docker Compose

Build e inicialização

docker compose up -d --build

Verificar containers

docker ps

Testar aplicação

curl http://localhost/projeto-korp

Testar Health Check

curl http://localhost/health

Testar métricas

curl http://localhost/metrics

Monitoramento

Prometheus

Acesse:

http://localhost:9090

Verifique os targets em:

Status → Targets

O serviço deve aparecer com status UP.

Exemplo:

Prometheus

Grafana

Dashboard de 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)

Configuração do Grafana

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

http://prometheus:9090

Salvar em:

Save & Test

Exemplo:

Grafana


Queries Utilizadas

Disponibilidade do serviço:

up{job="http-server-projeto-korp"}

Valor:

  • 1 → Serviço disponível (UP)
  • 0 → Serviço indisponível (DOWN)

Volume de Requisições

http_requests_total

Contabiliza o total de requisições recebidas pela aplicação.

Dashboard Grafana

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.

Acesso

Aplicação:

http://localhost/projeto-korp

Grafana:

http://localhost:3000

Prometheus:

http://localhost:9090

Teste do Monitoramento

Gerar algumas requisições:

curl http://localhost/projeto-korp
curl http://localhost/projeto-korp
curl http://localhost/projeto-korp

Após alguns segundos, os painéis do Grafana serão atualizados automaticamente exibindo:

  • Disponibilidade do Serviço (UP)
  • Total de Requisições

Inicialização do Projeto

docker compose up -d --build

Os 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

Automação com Ansible

Para provisionar o ambiente:

ansible-playbook -i ansible/inventory.ini ansible/playbook.yml

O 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.yml

Teste Esperado

Após a execução do ambiente:

curl http://localhost/projeto-korp

Resposta esperada:

{
  "nome": "Projeto Korp",
  "horario": "<horário UTC atual>"
}

About

Projeto de monitoramento e observabilidade utilizando Golang, Docker, NGINX, Prometheus, Grafana e Ansible.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages