Com shell script sabemos que é possível fazer qualquer coisa, e com PHP facilitamos a visualização de informações do Bacula por qualquer browser.
1. Velocidade de cada Job em Tempo Real (no Storage)
O script gera o seguinte exemplo de saída, atualizado a cada segundo.
Writing: Full Backup job BackupLibreOffice JobId=335 Volume="Vol-0038" Files=6,137 Bytes=94,374,514 AveBytes/sec=2,859,833 LastBytes/sec=2,859,833 -- Writing: Full Backup job BackupLibreOffice JobId=336 Volume="Vol-0038" Files=5,101 Bytes=19,010,555 AveBytes/sec=1,118,267 LastBytes/sec=1,118,267 -- Writing: Full Backup job BackupLibreOffice JobId=337 Volume="Vol-0038" Files=2,716 Bytes=2,346,155 AveBytes/sec=156,410 LastBytes/sec=156,410 -- Writing: Full Backup job BackupLibreOffice JobId=338 Volume="Vol-0038" Files=2,147 Bytes=1,900,566 AveBytes/sec=158,380 LastBytes/sec=158,380 -- Writing: Full Backup job BackupLibreOffice JobId=339 Volume="Vol-0038" Files=2,232 Bytes=1,932,744 AveBytes/sec=161,062 LastBytes/sec=161,062
Conteúdo do PHP que chama o script:
<meta http-equiv="refresh" content="1"> <?php $output = shell_exec('echo status storage |bconsole |grep -A 3 Writing |grep -v -e spool -e pool'); echo "<pre>$output</pre>"; ?>
2. Um sumário de jobs dos Últimos 2 Dias
Um exemplo de Saída:
RELATÓRIO ANALÍTICO BACULA: 2016-03-01 - Jobs com erro últimos 2 dias: - +---------------------------------------------------------------------------------------------------------------------------------------------+ | JobId | Nome do Job | Hora Início | Tipo | Nível | Arquivos | Tamanho em B | Status Job | +---------------------------------------------------------------------------------------------------------------------------------------------+ | 333 | BackupLibreOffice | 2016-02-29 15:51:49 | B | F | 6,607 | 109,006,683 | Incompleto | +---------------------------------------------------------------------------------------------------------------------------------------------+ Qtd Jobs com erro desde ontem: 1 Qtd Jobs OK: 7 +---------------------------------------------------------------------------------------------------------------------------------------------+
Para habilitar, criamos o script que gera as informações (dê permissão de execução):
# /etc/bacula/sctips/sumario.sh HOJE=$(date +%Y-%m-%d) ONTEM=$(date +%Y-%m-%d --date="1 day ago") # Lista Jobs ontem e Hoje echo "list jobs joberrors" |bconsole | grep -E "$HOJE|$ONTEM" > /tmp/listjobs2dias echo "list jobs jobstatus=T" |bconsole | grep -E "$HOJE|$ONTEM" > /tmp/listjobs2diasOK QTDERR=$(wc -l < /tmp/listjobs2dias) QTDOK=$(wc -l < /tmp/listjobs2diasOK) echo "RELATÓRIO ANALÍTICO BACULA:" $HOJE echo "-" echo "Jobs com erro últimos 2 dias:" echo "-" echo "+---------------------------------------------------------------------------------------------------------------------------------------------+" echo "| JobId | Nome do Job | Hora Início | Tipo | Nível | Arquivos | Tamanho em Bytes| Status Job |" echo "+---------------------------------------------------------------------------------------------------------------------------------------------+" cat /tmp/listjobs2dias |sed s/'| T '/'| OK c Alerta'/g |sed s/'| f '/'| Erro Fatal'/g |sed s/'| I '/'| Incompleto '/g echo "+---------------------------------------------------------------------------------------------------------------------------------------------+" echo "Qtd Jobs com erro desde ontem:" $QTDERR echo "Qtd Jobs OK:" $QTDOK echo "+---------------------------------------------------------------------------------------------------------------------------------------------+"
Configuramos um arquivo php para executar o script (normalmente em /var/www/html):
<?php $output = shell_exec('/etc/bacula/scripts/sumario.sh'); echo "<pre>$output</pre>"; ?>
3. Consumo de Jobs Agrupados por Servidores de um mesmo Consumidor
Exemplo de saída:
| Soma em GB | Cliente | Qtd | Servidor | GB| | 3.20 GB | ACME | 4 | | | | | | | Bkp_ACME_FileServer | 0.80 GB| | | | | Bkp_ACME_ERP | 0.80 GB| | | | | Bkp_ACME_FileServer | 0.80 GB| | | | | Bkp_ACME_ERP | 0.80 GB| | 0.00 GB | Costumer2 | 1 | | | | | | | Bkp_Costumer2_DataBases | 0.00 GB|
Para este script funcionar é necessário que a nomenclatura de seus jobs tenha uma sintaxe especial, o nome que deseja agrupar entre underscores (_) no início. Exemplo:
Bkp_Consumidor_Arquivos
Criamos o script que gera as informações (dê permissão de execução):
#!/bin/bash # /etc/bacula/scripts/consumo.sh echo "list jobs"|bconsole |tail -n +9 > /tmp/listajobs Clientes=$(cut -sf2 -d_ /tmp/listajobs | sort | uniq) printf '| %12s | %-13s | %6s | %-29s | %13s|n' "Soma em GB" Cliente Qtd " Servidor" GB for Cliente in $Clientes do Regs=$(grep _$Cliente_ /tmp/listajobs) Qtd=$(wc -l <<< "$Regs") Tot=$(cut -f8 -d | <<< "$Regs" | tr -d , | paste -s -d+ | bc) Tot=$(bc <<< "scale=2; $Tot / 1073741824") Servs= LC_ALL=C printf '| %9.2f GB | %-13s | %6d | %29s | %12s |n' $Tot $Cliente $Qtd ' ' ' ' IFS=$'n' Compl=($(paste <(cut -f3 -d| <<< "$Regs") <(cut -f8 -d | <<< "$Regs" | tr -d , | xargs -i echo 'scale=2; {}/1073741824' | bc | sed 's/^./0./' | LC_ALL=C xargs -n1 printf '| %10.2f GB|n'))) for i in ${!Compl[@]} do printf '| %12s | %13s | %51sn' ' ' ' ' $(echo | ${Compl[i]}) done #read done
Configuramos um arquivo php para executar o script (normalmente em /var/www/html):
<?php $output = shell_exec('/etc/bacula/scripts/consumo.sh'); echo "<pre>$output</pre>"; ?>
*Este script foi na maior parte elaborado pelo Professor Julio Neves, instrutor de Shell Script.
Disponível em: PortuguêsEnglish (Inglês)