суббота, 27 ноября 2010 г.

Мониторинг для VMware Data Recovery

Data Recovery (vDR) - это средство для резервного копирования виртуальных машин на VMware vSphere (если кто не знает).
Представляет из себя виртуальную машину, распространяется как VA. Т.е. - скачал, импортировал на виртуальную инфраструктуру, установил плагин к консоли vCenter и можно бэкапить виртуалки. Но... есть ряд ограничений и неудобств.
Одно из таких неудобств - это отсутствие средств мониторинга для vDR, только лог событий доступный через плагин vCenter.
К счастью виртуальная машина vDR создана на основе Linux! =)
Ниже привожу описание реализации мониторинга с помощью скрипта, запускаемого по расписанию внутри vDR и отправляющего email с событиями резервного копирования:

1. События резервного копирования vDR журналируются в файле /var/vmware/datarecovery/operations_log.utx и хранятся в виде:
$[//]11/27/2010 3:37:22 PM: Normal backup using $[1]$[19]"Название задания"$[20]$[2].....
т.е. каждое событие  - это отдельная строка со значениями разделенными знаком "$".
Используя команды grep и awk можно сделать выборку интересующих событий в удобном виде, а с помощью telnet передать их на почтовый сервер.
Пример скрипта собирающего новые события об ошибках с передачей по SMTP:

#!/bin/bash
cat /dev/null >> /root/olderror.out
#Делаем выборку событий содержащих ошибки
strings -e l /var/vmware/datarecovery/operations_log.utx | grep -i "error" | awk -F"$" '{print substr($2,5, 30) substr($3, 9, 100) substr ($6, 17, 30) $8}' > /root/newerror.out
# Сравниваем список старых ошибок с новым списком
if ! diff /root/olderror.out /root/newerror.out
then
diff olderror.out newerror.out  | grep ">"  > /root/diff.out
err=$(cat /root/diff.out | grep -c ">")
mv /root/newerror.out /root/olderror.out -f
# Отправляем email с новыми ошибками
(
sleep 1
echo "HELO"
sleep 1
echo "mail from: vdr@domain.com"
sleep 1
echo "rcpt to:admin@domain.com"
sleep 1
echo "data"
sleep 1
echo "subject: VDR Errors: "$err
sleep 1
echo "from: VDR"
sleep 1
echo "to:admin@domain.com"
sleep 1
echo ""
sleep 1
echo " "
sleep 1
echo "VDR Errors: "$err
sleep 1
cat /root/diff.out
sleep 1
echo " "
sleep 1
echo "."
sleep 1
echo "QUIT"
) | telnet mailserver.domain.com 25
fi

2. Чтобы запланировать выполнение скрипта по расписанию, можно воспользоваться планировщиком crond. Для этого в консоли vDR:
crontab -e
Откроется редактор Vi для редактирования заданий crond. Например, если надо выполнять скрипт каждый день в 8 утра пишем следующее:
0 8 * * * /root/script/vdrtask.sh
где: 0 - минуты, 8 - часы, /root/script/vdrtask.sh - путь к файлу скрипта.

Пример результата выполнения скрипта, письмо с текстом о последних ошибках:
VDR Errors: 2
11/26/2010 6:39:03 PM: Trouble reading files, error -3942 ( delete snapshot failed)
11/27/2010 8:03:18 AM: Failed to create snapshot for VM, error -3960 ( cannot quiesce virtual machine)

воскресенье, 21 ноября 2010 г.