Pular para o conteúdo

Schema do banco do catálogo

O catálogo do NGBackup é um schema PostgreSQL aberto e documentado. Nada nele é proprietário ou oculto: administradores podem conectar com qualquer cliente PostgreSQL, construir relatórios customizados ou integrar monitoramento de terceiros (Grafana, Zabbix, Power BI, …) diretamente contra as tabelas descritas aqui. O schema segue a linhagem Bacula, então consultas de relatório do Bacula e dashboards da comunidade funcionam sem alteração.

Para relatórios, use apenas acesso somente-leitura — o Director é dono de todas as escritas. Crie uma role PostgreSQL dedicada com privilégio SELECT para as ferramentas de relatório.

Uma linha por execução de job — a espinha dorsal de todo relatório.

ColunaSignificado
JobIdId numérico único da execução.
NameNome do job.
TypeTipo do job (B backup, R restore, V verify, C copy, M migrate, D admin).
LevelNível (F full, D differential, I incremental, …).
ClientIdFK → Client.
JobStatusStatus de término/execução em um caractere (veja códigos de status).
SchedTime / StartTime / EndTimeTimestamps agendado, de início real e de fim.
JobFilesArquivos processados.
JobBytesBytes processados.
JobErrorsContagem de erros não-fatais.

Uma linha por nó protegido: ClientId, Name, Uname (string de SO/arquitetura reportada pelo File daemon) e os períodos de retenção de arquivos/jobs do cliente.

Uma linha por volume, físico ou lógico.

ColunaSignificado
VolumeNameRótulo do volume.
PoolIdFK → Pool.
MediaTypeString de tipo de mídia (casa com as definições de Storage/Device — disco, nuvem, fita).
VolBytesBytes atualmente armazenados no volume.
VolStatusFull, Used, Append, Recycle, Error, …
LastWrittenTimestamp da última gravação.
LocationIdFK → Location (localização física atual, para rastreio de cofre).

Uma linha por pool: PoolId, Name, PoolType, retenção (VolRetention), flags de reciclagem (Recycle, AutoPrune), limites (MaxVols, MaxVolBytes) e o LabelFormat dos volumes.

O índice por arquivo por trás dos restores e dos relatórios em nível de arquivo. File guarda uma linha por arquivo por job (FileId, FileIndex, JobId, PathId, atributos codificados em LStat, digest MD5/checksum); Path desduplica caminhos de diretório (PathId, Path). Nos schemas atuais o nome do arquivo vai na própria linha de File (coluna Filename); catálogos mais antigos da linhagem Bacula mantêm uma tabela Filename separada — consultas contra qualquer dos dois formatos estão documentadas.

O mapeamento job↔volume: quais volumes cada job gravou e onde (JobId, MediaId, FirstIndex/LastIndex, endereços de bloco). Faça join para responder “quais jobs estão nesta fita?” ou “de quais volumes o restore deste job precisa?”.

As linhas completas do log de job (LogId, JobId, Time, LogText) — o mesmo texto que list joblog jobid=N imprime, consultável para relatórios de padrões de erro.

Rastreio de cofre (vault). Location define lugares físicos nomeados (LocationId, Location, Cost, Enabled); LocationLog registra cada movimento de um volume entre localizações, com timestamp, status e o id da mídia — uma trilha de auditoria da rotação off-site.

Uma tabela de referência que mapeia cada código JobStatus de um caractere para seu significado legível, para que relatórios façam join nela em vez de codificar a legenda. Os códigos mais comuns:

CódigoSignificado
TTerminou normalmente (OK).
WTerminou com avisos.
ETerminou com erro.
fErro fatal.
ACancelado pelo usuário.
REm execução.
CCriado, ainda não em execução.

Exemplo: taxa de sucesso por cliente, últimos 30 dias

Seção intitulada “Exemplo: taxa de sucesso por cliente, últimos 30 dias”
SELECT c.Name AS client,
COUNT(*) AS jobs,
COUNT(*) FILTER (WHERE j.JobStatus = 'T') AS ok,
ROUND(100.0 * COUNT(*) FILTER (WHERE j.JobStatus = 'T')
/ COUNT(*), 1) AS success_pct
FROM Job j
JOIN Client c ON c.ClientId = j.ClientId
WHERE j.Type = 'B'
AND j.SchedTime >= NOW() - INTERVAL '30 days'
GROUP BY c.Name
ORDER BY success_pct ASC;

Três caminhos de leitura; os dois primeiros não exigem credenciais diretas do banco:

  • Verbo .sql do console* .sql query="SELECT ..." roda uma consulta somente-leitura via Director e imprime as linhas; útil para verificações ad-hoc no backup-console.
  • API REST — endpoints de jobs, mídias e estatísticas expõem os mesmos dados do catálogo como JSON; veja a referência da API REST.
  • PostgreSQL direto — uma role somente-leitura apontada para o banco do catálogo, para ferramentas de BI e monitoramento.

Os relatórios embutidos e agendados sobre este schema estão em Relatórios & analytics.