Este projeto levanta um ambiente completo com:
- PostgreSQL 17 com suporte a SSH
- Servidor de backup em Ubuntu com pgBackRest
- Exportador de métricas postgres_exporter
- Monitoramento via Prometheus
- Dashboard com Grafana
- ETL com Airflow + dbt
- EL com PGLoader
- PostgreSQL 17 servindo como DW
O projeto utiliza Docker Compose para facilitar o provisionamento e gerenciamento dos serviços.
| Serviço | Descrição |
|---|---|
maquina1 |
PostgreSQL 17 com SSH habilitado |
maquina2 |
Ubuntu com pgBackRest configurado para backups remotos |
postgres_exporter |
Exportador de métricas para o Prometheus |
prometheus |
Coletor de métricas |
grafana |
Dashboard para visualização dos dados |
O serviço deve ser buildado dessa forma, caso contrário o airflow, não irá funcionar. O bash exporta uma variável que é utilizada por ele. Faz o build das imagens com cache desabilitado e limite de memória:
docker-compose build --no-cache --memory 4g --progress=plainSobe todos os containers em segundo plano (-d):
docker-compose up -dDerruba todos os containers:
docker-compose downReinicia todos os serviços:
docker-compose down && docker-compose up -dDerruba os containers, remove imagens, volumes e dados persistidos localmente:
docker-compose down --volumes --remove-orphans --rmi all
docker builder prune --all --force
sudo rm -rf ./maquina1/data ./maquina1/log
sudo rm -rf ./maquina2/data ./maquina2/logGera e configura chaves SSH entre maquina1 e maquina2 para permitir backups via pgBackRest.
Abre um shell interativo no container maquina1 como usuário postgres.
Abre um shell interativo no container maquina2 como usuário postgres.
- A exportação de métricas do PostgreSQL é feita via
postgres_exporter. - O Prometheus coleta e armazena as métricas.
- O Grafana exibe as métricas em dashboards interativos.
- O
pgBackResté instalado no containermaquina2(Ubuntu). - A comunicação entre os servidores é feita via SSH.
- O script
cpKeyscuida da geração e troca de chaves públicas.
-
Execute:
./run.sh cpKeys
para configurar a comunicação SSH entre as máquinas.
-
Execute:
docker exec -u postgres maquina1 pgbackrest --stanza=maquina1 stanza-createpara criar pasta dedicada para o backup no servidor de backup
maquina2. -
Execute:
docker exec -u postgres maquina1 pgbackrest --stanza=maquina1 checkpara testar a comunicação SSH entre as máquinas.
-
Execute:
docker exec -u postgres maquina1 pgbackrest --stanza=maquina1 --type=full backuppara realizar o primeiro backup completo.
-
Execute:
docker exec -u postgres maquina1 pgbackrest --stanza=maquina1 infopara verificar o status do backup.
-
Execute:
docker exec -u postgres maquina1 pg_ctl stop -D /var/lib/postgresql/data/pgdata docker exec -u root maquina1 rm -rf /var/lib/postgresql/data/pgdata docker exec -u root maquina1 ls /var/lib/postgresql/data/pgdata --> o caminho não pode existir, deletamos todos o banco docker exec -u postgres maquina1 pgbackrest --stanza=maquina1 --type=time --target="2025-07-07 18:50:47-03" restore docker exec -u root maquina1 chown -R postgres:postgres /var/lib/postgresql/data/pgdata docker exec -u root maquina1 chmod 750 /var/lib/postgresql/data/pgdata bash run.sh restart
para realizar o restore do backup.
⚠️ Atenção: Para ver os arquivos é necessários executar o comando para ter permissão. sudo chmod 777 ./ -R -
Verifique os logs do PostgreSQL se houver falhas no
pgBackRest:docker exec maquina1 tail -f /var/lib/postgresql/log/postgresql.logou acesse direto pelo na pasta
maquina1/log
-
Acesse o Grafana em: http://localhost:3000
- Usuário padrão:
admin - Senha padrão:
senha
exemplo de dash: https://grafana.com/grafana/dashboards/9628-postgresql-database/
- Usuário padrão:
-
Lembre-se de colocar o arquivo .sqlite que será importado dentro da pasta pgloader
cd pglaoder bash run.sh
O Airflow já está configurado e os volumes dentro dele e do dbt já foram criados, portanto, não precisa reiniciar o container para modificar arquivos de DAGs e model do DBT.
-
Suas DAGs são o processos do Airflow que irão executar seu ETL.
-
Os diretórios das DAGs já foram configurados e a interface do Airflow pode ser acessada em http://localhost:8080/ utilizar a senha "airflow" e usuário "airflow". Uma DAG que roda o batch do dbt já irá estar disponível. Utilizem a interface para rodar seus DAGs.
-
O DBT irá executar os arquivos de SQL que estiverem dentro da pasta models. Criei 2 schemas iniciais: staging, intermediate e mart. Usem eles para executarem diferentes transformações com o dbt para tranformar as tabelas até chegar a formação do dw.
-
Uma model de exemplo já foi criada e já está levando as informações do container da maquina1 para o dw.
-
Criem os arquivo de sql necessários para execução de processo de etl.
-
Comando para rodar o dbt manualmente. Este já está dentro da dag do airflow:
cd /opt/airflow/dbt && dbt run --target destination --profiles-dir /opt/airflow/dbt