Monitoraggio POOLs e Datasets
- Sul client, scaricare il file e scompattarlo
cd /tmp && \
wget "https://share.zabbix.com/index.php?option=com_mtree&task=att_download&link_id=350&cf_id=38" -O ZFSonLinux.zip && \
unzip ZFSonLinux.zip && \
cd ZFSonLinux
mv ZFSonLinux_sudo_rules /etc/sudoers.d/zabbix-zfs-on-linux
mv ZFSonLinux_userparameters.conf /etc/zabbix/zabbix_agentd.d/zfs-on-linux.conf
chmod 0440 /etc/zabbix/zabbix_agentd.d/zfs-on-linux.conf
- Verificare se i comandi funzionano (DATA è il nome di un pool zfs presente):
sudo -u zabbix /usr/bin/sudo /sbin/zpool list -H -o health DATA
systemctl restart zabbix-agent.service
- Dal server o dal prozy zabbix, verificare che le keys siano supportate:
zabbix_get -s 192.168.1.10 -k zfs.zpool.health[DATA]
- Importare il template ZFSonLinux_template.xml suls erver ed assegnare il template all'host
ZFSonLinux
Administration / General/ Regular Expression
Name: ZFS Fileset
Expressions
Expression type: Character string included
Expression: /
Monitoraggio degli snapshot
- Per far questo, occorre utilizzare la versione customizzata del template Zabbix
- Disabilitare il tab completion per poter creare gli script:
bind '\C-i:self-insert'
- Creare lo script di collecting dei timestamp deglis napshot:
mkdir -p /etc/zabbix/scripts
cat > /etc/zabbix/scripts/zabbix-zfs-snapshot <<'EOFile'
#!/bin/bash
# Delay maximum half an hour
#set -x
if [ -z "$1" ]
then
sleep $((RANDOM % 1800))
fi
# Clear temp file
/bin/rm -f /tmp/zfs-snapshot.dat.tmp
# Append lines in temp file
for DATASET in $(/usr/bin/sudo /sbin/zfs list \
| grep -v '^NAME' \
| /usr/bin/tr -s ' ' | /usr/bin/cut -f 1 --delimiter=' ')
do
TIMESTAMP=$(/usr/bin/sudo \
/sbin/zfs get creation -Hpr -t snapshot ${DATASET} \
| /usr/bin/cut -f 3 | /usr/bin/sort -n | /usr/bin/tail -n 1)
if [ -z "$TIMESTAMP" ]
then
DATETIME=""
else
DATETIME=$(/bin/date -d @$TIMESTAMP +"%Y-%m-%d %H:%M:%S")
fi
echo ${DATASET} $TIMESTAMP $DATETIME >> /tmp/zfs-snapshot.dat.tmp
done
# Substitute real file with temp file
mv /tmp/zfs-snapshot.dat.tmp /var/lib/zabbix/zfs-snapshot.dat
EOFile
chmod +x /etc/zabbix/scripts/zabbix-zfs-snapshot
cat > /etc/cron.d/zabbix-zfs-snapshot <<'EOFile'
# Creates zfs snapshot time creation log file
#
#min hours DayOfMonth Month DayOfWeek user command
# Incr backup mon-tue
0 * * * * zabbix /etc/zabbix/scripts/zabbix-zfs-snapshot
EOFile
cat > /etc/sudoers.d/zabbix-zfs-snapshot <<EOFile
Defaults:zabbix !requiretty
zabbix ALL=(ALL) NOPASSWD: /sbin/zfs
EOFile
chmod 0440 /etc/sudoers.d/zabbix-zfs-snapshot
- Definire gli userparamters:
cat > /etc/zabbix/zabbix_agentd.d/zfs-snapshot.conf <<'EOFile'
UserParameter=zfs.snapshot.time[*],/bin/cat /var/lib/zabbix/zfs-snapshot.dat | grep $1 | /usr/bin/cut --delimiter=' ' -f 2
EOFile
- Assicurarsi che ci sia la homedir di zabbix:
mkdir -p /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix
systemctl restart zabbix-agent.service
- Riabilitare il tab completion:
bind '\C-i:complete'
- Provare a lanciare manualmente lo script per il collecting dei timestamp:
sudo -u zabbix /etc/zabbix/scripts/zabbix-zfs-snapshot -i
- Controllare se ci sono i timestamp, ad esempio:
cat /var/lib/zabbix/zfs-snapshot.dat
BACKUP 1545069600 2018-12-17 19:00:00
BACKUP/backuppc
BACKUP/znapzend-emip-home 1545069600 2018-12-17 19:00:00
BACKUP/znapzend-emip-mysql 1545069600 2018-12-17 19:00:00
BACKUP/znapzend-kinsi-home 1542810600 2018-11-21 15:30:00
BACKUP/znapzend-xopta-dati 1545069600 2018-12-17 19:00:00
BACKUP/znapzend-xopta-files 1545069600 2018-12-17 19:00:00
BACKUP/znapzend-xopta-mysql 1545069600 2018-12-17 19:00:00
DATA 1545069600 2018-12-17 19:00:00
DATA/dati 1545069600 2018-12-17 19:00:00
DATA/files 1545069600 2018-12-17 19:00:00
DATA/mysql 1545069600 2018-12-17 19:00:00
- Dal server zabbix o proxy monitorante, verificare se si leggono i timestamp:
zabbix_get -s machinename -k zfs.snapshot.time['BACKUP/znapzend-xopta-mysql']
1545069600
- Disablitare le item per i Dataset che nons i vogliono verificare
- Di default la snapsht age è di 2 ore (7200 secondi). Per impostare age diverse, creare a macro nell'host:
{$ZFS_SNAPSHOT_AGE:"BACKUP/znapzend-xopta-mysql"}
-> Numero di secondi di età dello snapshot
Riferimenti