Ir para o conteúdo
ou

Software livre Brasil

Heitor Medrado de Faria

 Voltar a Blog
Tela cheia

Monitoração Zabbix de Jobs e Processos do Bacula

17 de Outubro de 2018, 23:59 , por Bacula Backup Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado uma vez

Este é um fork de um projeto do GIT. Verifique possíveis atualizações: https://github.com/germanodlf/bacula-zabbix

Esse projeto consiste de um shell script que coleta informações do servidor do Bacula, envia para o servidor Zabbix através de seu cliente (Zabbix sender), e um template a ser instalado no servidor de monitoração.

Características

  • Monitoramento individual para cada Job de backup
  • Diferentes níveis de Job têm diferentes gravidades
  • Monitoramento dos processos do Diretor, Storage e Cliente do Bacula
  • Gráficos e dashboards
  • Funciona com Catálogos do Bacula em PostgreSQL e MySQL

Dados Coletados pelo Script

  • Status de término do Job (item OK)
  • Número de bytes transferidos (item Bytes)
  • Número de arquivos transferidos (item Files)
  • Duração (item Time)
  • Taxa de transferência (item Speed)
  • Taxa de compactação (item Compression)

Dados dos Processos do Bacula

  • Status do processo do Bacula Director. O nome do processo é definido pela variável {$BACULA.DIR} e tem seu valor padrão como 'bacula-dir'. Este item precisa ser desabilitado em hosts que são apenas clientes do Bacula.
  • Status do Storage Daemon. O nome do processo é definido pela variável {$BACULA.SD} e tem seu valor padrão como 'bacula-sd'. Este item precisa ser desabilitado em hosts que são apenas clientes do Bacula.
  • Status do File Daemon. O nome do processo é definido pela variável {$ BACULA.FD} e tem seu valor padrão como 'bacula-fd'.

Gatilhos

  • O daemon do Bacula está DOWN em {HOST.NAME}: Inicia um alerta de gravidade do desastre quando o processo do Bacula está parado
  • Backup Full FAIL em {HOST.NAME}: inicia um alerta de alta gravidade quando uma tarefa de backup completo falha
  • Backup Diferencial FAIL em {HOST.NAME}: inicia um alerta de gravidade médio quando uma tarefa de backup diferencial falha
  • Backup Incremental FAIL em {HOST.NAME}: inicia um alerta de gravidade de aviso quando uma tarefa de backup incremental falha

Configuração

Template Zabbix

Faça o download do template xml (zip) e importe-o para o seu servidor Zabbix.

Prossiga com a instalação do script nas máquinas com Bacula à seguir. Posteriormente, o modelo do Zabbix deverá ser fornecido a cada um desses hosts. Cada host configurado no Zabbix com este modelo vinculado precisa ter seu nome igual ao nome configurado no recurso Cliente do Bacula. Caso contrário, os dados coletados pelo script bash não serão recebidos pelo servidor Zabbix.

Script Zabbix Servidor Bacula

Instale o Zabbix Sender. Ele será necessário para o envio de informações ao Zabbix.

Crie o arquivo de configuração /opt/bacula/etc/bacula-zabbix.conf com o seguinte conteúdo. Modifique com as informações de seu ambiente:

### BACULA CONFIG ###

# Use 'M' for MySQL
# Use 'P' for PostgreSQL
baculaDbSgdb='P'

# IP address or FQDN of database server
baculaDbAddr='127.0.0.1'

# TCP port of database server
baculaDbPort='5432'

# Name of the database used by Bacula
baculaDbName='bacula'

# User used by Bacula on it's database
baculaDbUser='bacula'

# Password used by Bacula on it's database
baculaDbPass=''

### ZABBIX CONFIG ###

# IP address or FQDN of Zabbix server
zabbixSrvAddr='192.168.37.200'

# TCP port of Zabbix server
zabbixSrvPort='10051'

# Path to zabbix_sender command
zabbixSender='/usr/bin/zabbix_sender'

Forneça permissões ao usuário Bacula ao arquivo .conf criado.

chown root:bacula /opt/bacula/etc/bacula-zabbix.conf
chmod 640 /opt/bacula/etc/bacula-zabbix.conf

Crie o arquivo de script bash /opt/bacula/scripts/bacula-zabbix.bash, com o conteúdo que segue.

#!/bin/bash

# Import configuration file
source /opt/bacula/etc/bacula-zabbix.conf

# Get Job ID from parameter
baculaJobId="$1"
if [ -z $baculaJobId ] ; then exit 3 ; fi

# Test if zabbix_sender exists and execute permission is granted, if not, exit
if [ ! -x $zabbixSender ] ; then exit 5 ; fi

# Chose which database command to use
case $baculaDbSgdb in
  P) sql="PGPASSWORD=$baculaDbPass /usr/bin/psql -h$baculaDbAddr -p$baculaDbPort -U$baculaDbUser -d$baculaDbName -c" ;;
  M) sql="/usr/bin/mysql -NB -h$baculaDbAddr -P$baculaDbPort -u$baculaDbUser -p$baculaDbPass -D$baculaDbName -e" ;;
  *) exit 7 ;;
esac

# Get Job type from database, then if it is a backup job, proceed, if not, exit
baculaJobType=$($sql "select Type from Job where JobId=$baculaJobId;" 2>/dev/null)
if [ "$baculaJobType" != "B" ] ; then exit 9 ; fi

# Get Job level from database and classify it as Full, Differential, or Incremental
baculaJobLevel=$($sql "select Level from Job where JobId=$baculaJobId;" 2>/dev/null)
case $baculaJobLevel in
  'F') level='full' ;;
  'D') level='diff' ;;
  'I') level='incr' ;;
  *)   exit 11 ;;
esac

# Get Job exit status from database and classify it as OK, OK with warnings, or Fail
baculaJobStatus=$($sql "select JobStatus from Job where JobId=$baculaJobId;" 2>/dev/null)
if [ -z $baculaJobStatus ] ; then exit 13 ; fi
case $baculaJobStatus in
  "T") status=0 ;;
  "W") status=1 ;;
  *)   status=2 ;;
esac

# Get client's name from database
baculaClientName=$($sql "select Client.Name from Client,Job where Job.ClientId=Client.ClientId and Job.JobId=$baculaJobId;" 2>/dev/null)
if [ -z $baculaClientName ] ; then exit 15 ; fi

# Initialize return as zero
return=0

# Send Job exit status to Zabbix server
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.status" -o $status >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+1)) ; fi

# Get from database the number of bytes transferred by the Job and send it to Zabbix server
baculaJobBytes=$($sql "select JobBytes from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.bytes" -o $baculaJobBytes >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+2)) ; fi

# Get from database the number of files transferred by the Job and send it to Zabbix server
baculaJobFiles=$($sql "select JobFiles from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.files" -o $baculaJobFiles >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+4)) ; fi

# Get from database the time spent by the Job and send it to Zabbix server
baculaJobTime=$($sql "select timestampdiff(second,StartTime,EndTime) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.time" -o $baculaJobTime >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+8)) ; fi

# Get Job speed from database and send it to Zabbix server
baculaJobSpeed=$($sql "select round(JobBytes/timestampdiff(second,StartTime,EndTime)/1024,2) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.speed" -o $baculaJobSpeed >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+16)) ; fi

# Get Job compression rate from database and send it to Zabbix server
baculaJobCompr=$($sql "select round(1-JobBytes/ReadBytes,2) from Job where JobId=$baculaJobId;" 2>/dev/null)
$zabbixSender -z $zabbixSrvAddr -p $zabbixSrvPort -s $baculaClientName -k "bacula.$level.job.compr" -o $baculaJobCompr >/dev/null 2>&1
if [ $? -ne 0 ] ; then return=$(($return+32)) ; fi

# Exit with return status
exit $return

Forneça as permissões para a execução do script.

chown bacula:bacula /opt/bacula/scripts/bacula-zabbix.bash
chmod 700 /opt/bacula/scripts/bacula-zabbix.bash

Acrescente as seguintes diretivas no recurso Messages de configuração de seu Director que mandas as mensagens dos Jobs (/opt/bacula/etc/bacula-dir.conf, Messages de nome standard por padrão).

Messages {
  ...
  mailcommand = "/var/spool/bacula/bacula-zabbix.bash %i"
  mail = 127.0.0.1 = all, !skipped
  ...
}

Reinicie o serviço do Director.

service bacula-dir restart

Monitoração dos Clientes Bacula

Edite seus hosts que configuraram tarefas de backup para usar o template do Zabbix. Não esqueça de editar as variáveis com os nomes dos processos do Bacula, e desabilitar nos hosts que são apenas clientes do Bacula os itens que checam os processos do Bacula Director e Storage.

 


Fonte: http://www.bacula.com.br/monitoracao-zabbix-de-jobs-e-processos-do-bacula/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.