Relatórios Shell Script & PHP

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: pt-brPortuguêsenEnglish (Inglês)

Deixe uma resposta