Application: "Bacula Dir 2.4/5.2/7.4".
В предыдущих примерах конфигурирования "Bacula" я не стал усложнять схему настройками системы уведомления о событиях, применив самую простую схему с параллельным выводом информации на консоль и в журнальный файл. Пришло время повысить информативность работы сервиса резервирования, задавшись целью реализовать отправку сообщений о статусе исполнения заданий администратору и оператору устройств хранения на электронную почту.
В блоке описания системы уведомления применимы директивы описания способа отправки сообщений и мест назначения.
Директивы описания способа оправки сообщения (для входящей в комплект поставки "Bacula" программы "bsmtp"):
MailCommand - команда отправки сообщения, пример: "/usr/sbin/bsmtp -8 -h mx.example.net:25 -f bacula@example.net -r bacula@example.net -s \"Bacula: %t %e of %n %l\" %r"
OperatorCommand - команда отправки сообщения оператору устройств хранения, пример: "/usr/sbin/bsmtp -8 -h mx.example.net -f bacula@example.net -r bacula@example.net -s \"Bacula: Intervention needed for %j\" %r"
OperatorCommand - команда отправки сообщения оператору устройств хранения, пример: "/usr/sbin/bsmtp -8 -h mx.example.net -f bacula@example.net -r bacula@example.net -s \"Bacula: Intervention needed for %j\" %r"
Где опции утилиты "bsmtp":
-8 - указание использовать кодировку utf-8;
-h - указываем имя SMTP сервера и прослушиваемый порт;
-f - устанавливаем значение поля "From:" в заголовке сообщения;
-r - устанавливаем значение поля "Reply-To:" в заголовке сообщения;
-s - устанавливаем значение поля "Subject:" в заголовке сообщения.
-h - указываем имя SMTP сервера и прослушиваемый порт;
-f - устанавливаем значение поля "From:" в заголовке сообщения;
-r - устанавливаем значение поля "Reply-To:" в заголовке сообщения;
-s - устанавливаем значение поля "Subject:" в заголовке сообщения.
...и переменные окружения "Bacula", используемые в директиве "MailCommand":
"%%" - %;
"%c" - имя клиента;
"%d" - имя директора;
"%e" - код завершения (OK, Error, Fatal);
"%i" - идентификатор задания;
"%j" - уникальное имя задания;
"%l" - тип резервирования (Full, Incremental, Differential, Base);
"%n" - имя задания;
"%r" - получатели сообщения;
"%t" - тип задания (Backup, Restore).
"%c" - имя клиента;
"%d" - имя директора;
"%e" - код завершения (OK, Error, Fatal);
"%i" - идентификатор задания;
"%j" - уникальное имя задания;
"%l" - тип резервирования (Full, Incremental, Differential, Base);
"%n" - имя задания;
"%r" - получатели сообщения;
"%t" - тип задания (Backup, Restore).
В поле "From:" желательно указывать реальный почтовый адрес, зарегистрированный на используемом почтовом SMTP сервере.
Директивы указания респондентов и типов отчётов:
Mail = recipient0@example.net, recipient1@example.net, ... = All, !skipped - общего набора сообщений (в качестве параметров указывается список получателей через запятую, после знака "=" - список типов сообщений через запятую);
Operator = recipient0@example.net = mount - набора сообщений оператору устройств хранения с требованием смены носителей.
Operator = recipient0@example.net = mount - набора сообщений оператору устройств хранения с требованием смены носителей.
Используя вышеописанные директивы строим блок обработки сообщений:
# vi /etc/bacula/bacula-dir.conf
....
# # Блок описания подсистемы отправки уведомлений о состоянии сервиса "Director Daemon":
Messages {
Name = Standard
Console = all, !skipped, !saved
Append = "/var/log/bacula/bacula.log" = all, !skipped
MailCommand = "/usr/sbin/bsmtp -8 -h mx.example.net:25 -f bacula@example.net -s \"Bacula: %t %e of %n %l\" %r"
OperatorCommand = "/usr/sbin/bsmtp -8 -h mx.example.net:25 -f bacula@example.net -s \"Bacula: Intervention needed for %j\" %r"
Mail = admin@example.net = all, !skipped
Operator = oper@example.net = mount
# Syslog = all
}
....
# # Блок описания подсистемы отправки уведомлений о состоянии сервиса "Director Daemon":
Messages {
Name = Standard
Console = all, !skipped, !saved
Append = "/var/log/bacula/bacula.log" = all, !skipped
MailCommand = "/usr/sbin/bsmtp -8 -h mx.example.net:25 -f bacula@example.net -s \"Bacula: %t %e of %n %l\" %r"
OperatorCommand = "/usr/sbin/bsmtp -8 -h mx.example.net:25 -f bacula@example.net -s \"Bacula: Intervention needed for %j\" %r"
Mail = admin@example.net = all, !skipped
Operator = oper@example.net = mount
# Syslog = all
}
....
Проверим корректность конфигурации средствами самого "Bacula":
# bacula-dir -c /etc/bacula/bacula-dir.conf -t
Укажем "Bacula" перечитать и принять новую конфигурацию:
# /etc/init.d/bacula-director reload
Теперь респондентам директивы "Mail" будет приходить полный отчёт о событиях сопровождающих исполнение заданий после их завершения, успешного или нет. Утилита "bsmtp" сама сделает полную выборку событий применительно к отрабатываемому заданию. Выглядеть письмо будет примерно следующим образом:
27-Jul 16:42 dir0.backup.local JobId 402: Start Backup JobId 402, Job=job-backup-test.domain.local.2010-07-27_16.42.54.54
....
27-Jul 17:51 dir0.backup.local JobId 402:
Build OS: x86_64-pc-linux-gnu debian lenny/sid
JobId: 402
Job: job-backup-test.domain.local.2010-07-27_16.42.54.54
Backup Level: Incremental, since=2010-07-22 19:33:18
....
FD Bytes Written: 873,260,844 (873.2 MB)
SD Bytes Written: 874,459,833 (874.4 MB)
....
Non-fatal FD errors: 0
SD Errors: 0
FD termination status: OK
SD termination status: OK
Termination: Backup OK
....
....
27-Jul 17:51 dir0.backup.local JobId 402:
Build OS: x86_64-pc-linux-gnu debian lenny/sid
JobId: 402
Job: job-backup-test.domain.local.2010-07-27_16.42.54.54
Backup Level: Incremental, since=2010-07-22 19:33:18
....
FD Bytes Written: 873,260,844 (873.2 MB)
SD Bytes Written: 874,459,833 (874.4 MB)
....
Non-fatal FD errors: 0
SD Errors: 0
FD termination status: OK
SD termination status: OK
Termination: Backup OK
....
Респондентам директивы "Operator" будет приходить уведомление о необходимости сменить носитель информации: ленту "стриммера", DVD диск, подключаемый диск. Вид сообщения примерно такой:
01-Aug 18:20 sd0.backup.local JobId 470: Please mount Volume "test0.domain.local-0074" or label a new one for:
Job: job-backup-test0.domain.local.2010-08-01_18.20.23.03
Storage: "dev4.sd0.backup.local" (/mnt/storage0/bacula/dev4)
Pool: pool-test0.domain.local
Media type: DVDRW
Job: job-backup-test0.domain.local.2010-08-01_18.20.23.03
Storage: "dev4.sd0.backup.local" (/mnt/storage0/bacula/dev4)
Pool: pool-test0.domain.local
Media type: DVDRW
Кстати, Bacula будет слать оператору просьбы сменить носитель так же в общем случае, если таковой недоступен. То есть, если дисковый массив Терабайт эдак на пятьдесят, предположим, недоступен, оператора попросят сменить этот самый массив на другой.