Ir al contenido

Esquema de la base del catálogo

El catálogo de NGBackup es un esquema PostgreSQL abierto y documentado. Nada en él es propietario ni oculto: los administradores pueden conectarse con cualquier cliente PostgreSQL, construir reportes personalizados o integrar monitoreo de terceros (Grafana, Zabbix, Power BI, …) directamente contra las tablas descritas aquí. El esquema sigue el linaje Bacula, así que las consultas de reportes de Bacula y los dashboards de la comunidad funcionan sin cambios.

Para reportes usa solo acceso de solo lectura — el Director es dueño de todas las escrituras. Crea un rol PostgreSQL dedicado con privilegio SELECT para las herramientas de reportes.

Una fila por ejecución de job — la columna vertebral de todo reporte.

ColumnaSignificado
JobIdId numérico único de la ejecución.
NameNombre del job.
TypeTipo de job (B backup, R restore, V verify, C copy, M migrate, D admin).
LevelNivel (F full, D differential, I incremental, …).
ClientIdFK → Client.
JobStatusEstado de terminación/ejecución de un carácter (ver códigos de estado).
SchedTime / StartTime / EndTimeTimestamps programado, de inicio real y de fin.
JobFilesArchivos procesados.
JobBytesBytes procesados.
JobErrorsConteo de errores no fatales.

Una fila por nodo protegido: ClientId, Name, Uname (cadena de SO/arquitectura reportada por el File daemon) y los períodos de retención de archivos/jobs del cliente.

Una fila por volumen, físico o lógico.

ColumnaSignificado
VolumeNameEtiqueta del volumen.
PoolIdFK → Pool.
MediaTypeCadena de tipo de medio (coincide con las definiciones de Storage/Device — disco, nube, cinta).
VolBytesBytes actualmente almacenados en el volumen.
VolStatusFull, Used, Append, Recycle, Error, …
LastWrittenTimestamp de la última escritura.
LocationIdFK → Location (ubicación física actual, para seguimiento de bóveda).

Una fila por pool: PoolId, Name, PoolType, retención (VolRetention), banderas de reciclaje (Recycle, AutoPrune), límites (MaxVols, MaxVolBytes) y el LabelFormat de los volúmenes.

File / Path / Filename (índice de archivos)

Sección titulada «File / Path / Filename (índice de archivos)»

El índice por archivo detrás de los restores y de los reportes a nivel de archivo. File guarda una fila por archivo por job (FileId, FileIndex, JobId, PathId, atributos codificados en LStat, digest MD5/checksum); Path deduplica rutas de directorio (PathId, Path). En los esquemas actuales el nombre del archivo va en la propia fila de File (columna Filename); los catálogos más antiguos del linaje Bacula mantienen una tabla Filename separada — las consultas contra cualquiera de las dos formas están documentadas.

El mapeo job↔volumen: qué volúmenes escribió cada job y dónde (JobId, MediaId, FirstIndex/LastIndex, direcciones de bloque). Haz join para responder “¿qué jobs están en esta cinta?” o “¿qué volúmenes necesita el restore de este job?”.

Las líneas completas del log de job (LogId, JobId, Time, LogText) — el mismo texto que imprime list joblog jobid=N, consultable para reportes de patrones de error.

Seguimiento de bóveda (vault). Location define lugares físicos con nombre (LocationId, Location, Cost, Enabled); LocationLog registra cada movimiento de un volumen entre ubicaciones, con timestamp, estado y el id del medio — una pista de auditoría de la rotación off-site.

Una tabla de referencia que mapea cada código JobStatus de un carácter a su significado legible, para que los reportes hagan join contra ella en lugar de codificar la leyenda. Los códigos más comunes:

CódigoSignificado
TTerminó normalmente (OK).
WTerminó con advertencias.
ETerminó con error.
fError fatal.
ACancelado por el usuario.
REn ejecución.
CCreado, aún no en ejecución.

Ejemplo: tasa de éxito por cliente, últimos 30 días

Sección titulada «Ejemplo: tasa de éxito por cliente, últimos 30 días»
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;

Tres vías de lectura; las dos primeras no requieren credenciales directas de la base:

  • Verbo .sql del console* .sql query="SELECT ..." ejecuta una consulta de solo lectura a través del Director e imprime las filas; útil para verificaciones ad-hoc desde backup-console.
  • API REST — los endpoints de jobs, medios y estadísticas exponen los mismos datos del catálogo como JSON; consulta la referencia de la API REST.
  • PostgreSQL directo — un rol de solo lectura apuntado a la base del catálogo, para herramientas de BI y monitoreo.

Los reportes integrados y programados sobre este esquema se cubren en Reportes & analytics.