Laboratório: Pipeline de Extração do Bluesoft ERP para Dashboard no Metabase via PostgreSQL
Você irá implementar um pipeline completo: extração de dados da API do Bluesoft ERP, carga em um banco PostgreSQL próprio e visualização em dashboards no Metabase. O laboratório pode ser concluído em cerca de 2 a 3 horas.

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.
- Duração estimada
- 120 min
- Passos
- 10
- Validações
- 4
- Versões da documentação consultada
- PostgreSQL a versão estável atual · Python a versão estável atual · Metabase a versão estável atual · requests a versão estável atual
O objetivo é demonstrar, na prática, como integrar dados de um ERP SaaS (Bluesoft) usando apenas a API oficial, carregando-os em um banco PostgreSQL local e explorando-os com o Metabase open source. Você vai entender cada elo: extração autenticada, transformação mínima, carga, consulta SQL e visualização, simulando um cenário real de BI para supermercados.
Topologia
O laboratório usa três componentes principais em uma rede local: uma máquina (ou VM) executa o extrator Python, que acessa a API do Bluesoft ERP pela internet (usando token x-CustomToken), processa os dados e insere no PostgreSQL local (192.168.56.10). O Metabase (192.168.56.20) conecta-se ao PostgreSQL para montar dashboards. O usuário interage via navegador com o Metabase.
[Internet]
|
[Extrator Python]
| \
| \---[API Bluesoft ERP]
|
[PostgreSQL 192.168.56.10]
|
[Metabase 192.168.56.20]
|
[Navegador Usuário]Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM ou notebook para extrator Python | 1 vCPU, 2 GB RAM, acesso à internet |
| VM ou notebook para PostgreSQL | 1 vCPU, 2 GB RAM, porta 5432 aberta |
| VM ou notebook para Metabase | 2 vCPU, 4 GB RAM, porta 3000 aberta |
| PostgreSQL | PostgreSQL License · a versão estável atual |
| Python | PSF License · a versão estável atual |
| Metabase | AGPL v3 · a versão estável atual |
| requests | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar ambiente do PostgreSQL
Instale o PostgreSQL na máquina 192.168.56.10. O banco será o destino dos dados extraídos. Crie o banco bi_varejo e um usuário dedicado.
sudo apt update && sudo apt install postgresql sudo -u postgres psql -c "CREATE DATABASE bi_varejo;" sudo -u postgres psql -c "CREATE USER extrator WITH PASSWORD 'extrator123';" sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE bi_varejo TO extrator;"O que você deve ver: Banco bi_varejo criado e acessível pelo usuário extrator.
- Criar esquema de estudo no PostgreSQL
Implemente o modelo de estudo com tabelas fato_venda, fato_venda_item, dim_produto, dim_cliente, dim_loja, dim_campanha. Não é o modelo do fabricante.
psql -U extrator -d bi_varejo -h 192.168.56.10 CREATE TABLE dim_produto ( id SERIAL PRIMARY KEY, codigo VARCHAR(50), descricao VARCHAR(255) ); CREATE TABLE dim_cliente ( id SERIAL PRIMARY KEY, codigo VARCHAR(50), nome VARCHAR(255) ); CREATE TABLE dim_loja ( id SERIAL PRIMARY KEY, codigo VARCHAR(50), nome VARCHAR(255) ); CREATE TABLE dim_campanha ( id SERIAL PRIMARY KEY, codigo VARCHAR(50), nome VARCHAR(255) ); CREATE TABLE fato_venda ( id SERIAL PRIMARY KEY, data DATE, id_loja INTEGER REFERENCES dim_loja(id), id_cliente INTEGER REFERENCES dim_cliente(id), id_campanha INTEGER REFERENCES dim_campanha(id), valor_total NUMERIC ); CREATE TABLE fato_venda_item ( id SERIAL PRIMARY KEY, id_venda INTEGER REFERENCES fato_venda(id), id_produto INTEGER REFERENCES dim_produto(id), quantidade NUMERIC, preco_unitario NUMERIC );O que você deve ver: Tabelas criadas no banco bi_varejo.
- Instalar Python e dependências
O extrator será feito em Python. Instale Python 3.x e o pacote requests.
sudo apt update && sudo apt install python3 python3-pip pip3 install requests psycopg2-binaryO que você deve ver: Python 3.x, requests e psycopg2-binary instalados.
- Configurar variáveis do extrator
Crie um arquivo config.json com as credenciais do banco, token do Bluesoft e URLs dos recursos. Não coloque endpoints literais; consulte o api-docs do seu tenant.
{ "db_host": "192.168.56.10", "db_name": "bi_varejo", "db_user": "extrator", "db_pass": "extrator123", "token": "SEU_TOKEN_X_CUSTOMTOKEN", "url_produtos": "URL_RECURSO_PRODUTOS", "url_clientes": "URL_RECURSO_CLIENTES", "url_vendas": "URL_RECURSO_VENDAS" }O que você deve ver: Arquivo config.json criado com parâmetros reais.
- Implementar extrator Python
Implemente um script Python que leia config.json, autentique na API do Bluesoft ERP usando x-CustomToken, extraia produtos, clientes e vendas, e insira nas tabelas. Use requests para HTTP e psycopg2 para PostgreSQL.
Consulte a documentação de requests (https://requests.readthedocs.io/) e psycopg2 (https://www.psycopg.org/docs/). Exemplo de cabeçalho: headers = {'x-CustomToken': config['token']} Exemplo de requisição: resp = requests.get(config['url_produtos'], headers=headers) Consulte o api-docs do seu tenant para parâmetros e paginação. Exemplo de inserção: cur.execute('INSERT INTO dim_produto (codigo, descricao) VALUES (%s, %s)', (codigo, descricao))O que você deve ver: Script extrai dados da API e popula as tabelas do PostgreSQL.
- Executar extração inicial
Rode o script Python para realizar a primeira carga. Observe logs e mensagens de erro.
python3 extrator_bluesoft.pyO que você deve ver: Mensagens indicando progresso da extração e inserção. Tabelas populadas.
- Instalar e configurar Metabase
No host 192.168.56.20, instale o Metabase via Docker. O Metabase será a interface de BI.
sudo apt update && sudo apt install docker.io sudo docker run -d -p 3000:3000 --name metabase metabase/metabaseO que você deve ver: Container Metabase rodando na porta 3000.
- Conectar Metabase ao PostgreSQL
No primeiro acesso ao Metabase (http://192.168.56.20:3000), configure o acesso ao banco bi_varejo usando as credenciais criadas.
Acesse via navegador e preencha: Host: 192.168.56.10 Porta: 5432 Banco: bi_varejo Usuário: extrator Senha: extrator123O que você deve ver: Metabase conectado ao banco e reconhecendo as tabelas.
- Criar dashboards básicos
No Metabase, crie pelo menos um dashboard com gráficos de vendas por loja, curva ABC de produtos e vendas por campanha. Use o editor visual ou SQL.
No Metabase, clique em "Nova Consulta", selecione a tabela fato_venda, agrupe por id_loja, some valor_total, e salve como gráfico.O que você deve ver: Dashboards visuais mostrando os dados extraídos.
- Agendar extração periódica (opcional)
Use cron (Linux) para agendar o script Python e manter os dados atualizados.
crontab -e 0 * * * * /usr/bin/python3 /caminho/para/extrator_bluesoft.py >> /var/log/extrator_bluesoft.log 2>&1O que você deve ver: Script executa automaticamente a cada hora.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar tabelas populadas | psql -U extrator -d bi_varejo -h 192.168.56.10 -c "SELECT COUNT(*) FROM dim_produto;" | Retorna número maior que zero. |
| Testar conexão Metabase-PostgreSQL | No Metabase, tente visualizar a tabela fato_venda. | Tabela aparece e mostra linhas. |
| Visualizar dashboard de vendas | No Metabase, abra o dashboard criado. | Gráficos mostram dados coerentes. |
| Verificar logs do extrator | tail -f /var/log/extrator_bluesoft.log | Sem erros de autenticação ou conexão. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Erro de autenticação na API | Token x-CustomToken inválido ou expirado | Gere novo token no ERP e atualize config.json |
| Conexão recusada ao PostgreSQL | PostgreSQL não está ouvindo na interface correta ou firewall bloqueando | Edite postgresql.conf para listen_addresses = '*' e ajuste o pg_hba.conf; reinicie o serviço |
| Metabase não conecta ao banco | Credenciais ou host incorretos | Revise dados de conexão e permissões do usuário |
| Dados ausentes ou incompletos nos dashboards | Script Python não extraiu ou inseriu corretamente | Revise logs do extrator e o mapeamento dos campos |
| Erro de dependência ao rodar o script Python | Pacotes requests ou psycopg2 não instalados | Reinstale com pip3 install requests psycopg2-binary |
Segurança e hardening
- Nunca compartilhe o token x-CustomToken fora do ambiente controlado
- Restrinja o acesso ao banco PostgreSQL apenas aos hosts necessários
- Use firewall para limitar acesso às portas 5432 (PostgreSQL) e 3000 (Metabase)
- Armazene config.json com permissões restritas (chmod 600)
- Revogue tokens não utilizados no ERP
- Considere usar SSL/TLS nas conexões, conforme a documentação das ferramentas
Checklist final
Referências
- Documentação oficial da API Bluesoft ERP · Erp.bluesoft (erp.bluesoft.com.br)
- Documentação oficial do Metabase · Metabase (metabase.com)
- Documentação oficial do PostgreSQL · PostgreSQL Global Development Group (postgresql.org)
- Documentação oficial do requests · Requests.readthedocs (requests.readthedocs.io)
- Documentação oficial do Python · Python Software Foundation (docs.python.org)
- Publicado
- 11/09/2026
- Última revisão
- 13/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 5 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
