Показаны сообщения с ярлыком debian. Показать все сообщения
Показаны сообщения с ярлыком debian. Показать все сообщения

воскресенье, 23 августа 2015 г.

Инкрементное резервное копирование с помощью Rsnapshot.


В данной статье разберем создание инкрементных резервных копий с помощью Rsnapshot.
Главное достоинство Rsnapshot, это простота получения файлов из резервной копии. У вас есть прямой доступ к папкам с резервными копиями по периодам копирования.
Как обычно, платформа для установки Debian 8.

1) Установка.
apt-get install rsnapshot
После установки, файл настроек доступен по пути: /etc/rsnapshot.conf.

2) Настройка.
mv /etc/rsnapshot.conf /etc/rsnapshot.conf.BACK
echo "
####Версия программы
config_version  1.2
####Где будут хранится резервные копии
snapshot_root   /home/where_we_do_backup/
####Что будем резервировать и как назвать копию
backup  /home/what_we_do_backup/   snapshots/
####Основные команды
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_logger      /usr/bin/logger
####Задания копирования
#Резервные копии за каждый день в течении 60 дней
retain          daily   60
#Резервные копии 2 раза в месяц, 23 раза = почти 12 месяцев
#retain         weekly  23
####Уровень логов
# 1     Quiet           Print fatal errors only
# 2     Default         Print errors and warnings only
# 3     Verbose         Show equivalent shell commands being executed
# 4     Extra Verbose   Show extra verbose information
# 5     Debug mode      Everything
verbose         3
loglevel        3
####Файл лога
logfile         /var/log/rsnapshot.log
####pid
lockfile        /var/run/rsnapshot.pid
" >> /etc/rsnapshot.conf
В данном файле, как видно, есть 3 основные настройки:
1) snapshot_root - путь, где будут хранится наши резервные копии
2) backup - путь до папки, которую мы будем резервировать (/home/what_we_do_backup/) и папка, которая создастся в snapshot_root для этого пути (snapshots/)
3) retain - названия резервирования (daily/weekly) и количество копий, которые будет хранить Rsnapshot.

ВАЖНО! вместо пробелов в файле /etc/rsnapshot.conf используйте ТАБУЛЯЦИЮ

3) Автоматизация.
Для отладки процесса, можно использовать команду:
rsnapshot configtest
Которая проверит правильность конфигурации.
Либо:
rsnapshot -t daily
Которая уже протестирует вашу настройку под именем daily.
Если написать
rsnapshot daily
То произойдет резервное копирование по настройке daily.

Rsnapshot при установке создает собственный файл в Cron по пути /etc/cron.d/rsnapshot, можно использовать его, но нам необходимо получить подробный отчет о проделанной работе, поэтому создадим следующий файл:
echo "
#!/bin/sh
# Бекап с помощью rsnapshot
### Настройки ###
#Ошибки (по умолчанию нет)
ERRORS="no errors"
#Получатели письма счастья )
MAILTO='admin@myil.ru'
MAILFROM='backuper@myil.ru'
SUBJECTED='INCREMENT BACKUP report ('$ERRORS')'
LOGFILE=/tmp/rsnapshot.log.z
#расположение rsnapshot
RS=/usr/bin/rsnapshot
#Передаем параметр со скриптом (запуск скрипта в ежедневном или другом режиме)
PARAM=$1
#Путь до папки, которую будем проверять до и после бэкапа на изменение размера
ZERODAYPATH=/home/where_we_do_backup/daily.0/snapshots
#Временный файл, в который будет записан результат проверки размеров файлов папки ZERODAYPATH
TMPFILE=/tmp/size2.tmp
#Строка проверки размера папки
HOWMUCH='/usr/bin/du -sh *'


#Чистим лог для начала
cat /dev/null > $LOGFILE

##Записываем в начало лога данные, которые будут использованы при отправке письма
echo "To:$MAILTO
From:$MAILFROM
Subject: $SUBJECTED
Content-Type: text/plain; charset=UTF-8; format=flowed
Hi all" >> $LOGFILE

#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
Before backup:
" >> $LOGFILE
#Нужно записать в лог размер содержимого из /BACKUP/daily.0/AUP
#Проверяем осталась ли запись после бэкапа с прошлого раза, если да то пишем ее
#Если нет, делаем du чтобы узнать размер и записываем в лог
if [ -f $TMPFILE ]; then
cat $TMPFILE >> $LOGFILE
else
cd $ZERODAYPATH
$HOWMUCH >> $LOGFILE
fi
#Дописываем в лог разделитель
echo "------------------------------------------------------------------" >> $LOGFILE

#Записываем время начала операции копирования
STARTTIME="$(date +%H:%M:%S)"

###########################################################################
## Запускаем бэкап
$RS $PARAM >> $LOGFILE 2>&1
###########################################################################

#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
After backup:
" >> $LOGFILE
#Нужно записать в лог размер содержимого из /BACKUP/daily.0/AUP после бэкапа
#Проверяем осталась ли запись после бэкапа с прошлого раза, если да то удаляем
#Делаем du чтобы узнать размер и записываем в лог и файл
if [ -f $TMPFILE ]; then
rm $TMPFILE
fi
cd $ZERODAYPATH
$HOWMUCH >> $TMPFILE
cat $TMPFILE >> $LOGFILE

#Дописываем в лог разделитель
echo "------------------------------------------------------------------" >> $LOGFILE

#Записываем время начала и конца операции
ENDTIME="$(date +%H:%M:%S)"
sed -i '5a Start time: '$STARTTIME $LOGFILE
sed -i '6a End time: '$ENDTIME $LOGFILE

###Проверка на ошибки
##Если будет найдена ошибка в логе, переменная ERRORS будет изменена
##и в теме письма будет крупно написано ERRORS!!
if [ `cat $LOGFILE | grep 'ERROR:' | grep -cv grep` != "0" ]; then
        grep -i -e 's/no errors/ERRORS!!/' $LOGFILE
fi

#Отправка почты с помошью ssmtp
/usr/sbin/ssmtp -t < $LOGFILE

exit 0
" >> /etc/backuper_rsnapshot.bin
Сделаем файл исполняемым:
chmod +x /etc/backuper_rsnapshot.bin
Т.к. для отправки отчета используем ssmtp, установим ее:
apt-get install ssmtp
И настроим:
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.BACK
echo "
###Тема для тестовых сообщений
Subject: test message
###Адрес почтового сервера
mailhub=smtp.myil.ru
###От кого будет посылаться сообщение
hostname=backuper@myil.ru
###Использовать шифрование STARTTLS
UseSTARTTLS=no
###метод авторизации
AuthMethod=LOGIN
###Логин
AuthUser=backuper
###Пароль
AuthPass=backuper_psw
###Разрешить изменить адрес отправителя (hostname)
FromLineOverride=YES
" >> /etc/ssmtp/ssmtp.conf
Теперь добавим соответствующую задачу в Cron. Напишите crontab -e, и добавьте следующую строку:
###Бэкап в 0 часов 5 минут каждые 2 дня
5 0 */2 * * /etc/backuper_rsnapshot.bin daily
Теперь, после выполнения скрипта, на почтовый адрес admin@myil.ru должно прийти примерно следующее письмо:
Hi all
Start time: 00:05:02
End time: 00:13:08

------------------------------------------------------------------
Before backup:

248G    Back_Folder1
22G    Back_Folder2
9.1G    Back_Folder3
4.4G    Back_Folder4
------------------------------------------------------------------
echo 21866 > /var/run/rsnapshot.pid mv /home/where_we_do_backup/daily.6/ /home/where_we_do_backup/daily.7/ mv /home/where_we_do_backup/daily.5/ /home/where_we_do_backup/daily.6/ mv /home/where_we_do_backup/daily.4/ /home/where_we_do_backup/daily.5/ mv /home/where_we_do_backup/daily.3/ /home/where_we_do_backup/daily.4/ mv /home/where_we_do_backup/daily.2/ /home/where_we_do_backup/daily.3/ mv /home/where_we_do_backup/daily.1/ /home/where_we_do_backup/daily.2/ /bin/cp -al /home/where_we_do_backup/daily.0 /home/where_we_do_backup/daily.1 /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /AUP \
   /home/where_we_do_backup/daily.0/snapshots/ touch /home/where_we_do_backup/daily.0/ rm -f /var/run/rsnapshot.pid
------------------------------------------------------------------
After backup:

249G    Back_Folder1
23G    Back_Folder2
9.1G    Back_Folder3
4.5G    Back_Folder4
------------------------------------------------------------------ 

вторник, 4 августа 2015 г.

Инкрементное резервное копирование данных с помощью rdiff-backup


Перепробовав решения под Windows, как бесплатные, так и платный Acronis Backup and Recovery, купленный на эти цели за "дорого для такой глючной программы", и уже было отчаявшись в поисках - решил попробовать бесплатные решения на Linux.
Из-за своей простоты, качества и скорости - выбор был сделан в пользу rdiff-backup.
Итак посмотрим, как сделать полноценный сервер резервирования данных на основе Rdiff (как обычно на Debian 8.0)

1)Установка
Т.к. Rdiff - идет в стандартных репозиториях, то тут ничего сложного нет:
apt-get -q -y install rdiff-backup
Все, программа готова к работе, вот так вот просто.

2) Синтаксис
Как и со всеми Linux-way дистрибутивами, работа с rdiff-backup очень и очень простая.
Для того чтобы сделать копию нужного каталога достаточно набрать:
rdiff-backup /data_path /destination_path
После чего в папке destination_path будет создана инкрементная копия data_path. Если после данного копирования вы измените состав или содержимое файлов в data_path и заново выполните копирование - скопируются только измененные файлы.
Чтобы посмотреть все доступные инкрементные данные поданной папке достаточно набрать:
rdiff-backup -l /destination_path
Вывод данной команды будет примерно вот такой:
Found 5 increments:
increments.2014-07-14T21:51:05+06:00.dir   Sat Jul 14 21:51:05 2014
increments.2014-07-15T21:51:03+06:00.dir   Sun Jul 15 21:51:03 2014
increments.2014-07-15T22:02:30+06:00.dir   Sun Jul 15 22:02:30 2014
increments.2014-07-16T21:51:08+06:00.dir   Mon Jul 16 21:51:08 2014
increments.2014-07-19T21:51:08+06:00.dir   Thu Jul 19 21:51:08 2014

Current mirror: Sat Aug 25 01:25:01 2014
Здесь мы видим 5 слепков данной дериктории, датированные 14-19 июля. Это значит, что в данные дни были выполнены какие-то изменения в data_path.

3) Восстановление данных
Чтобы восстановить данные за какой-то определенный день необходимо набрать:
rdiff-backup -r 2014-07-19T21:51:08+06:00 /destination_path/some_file_or_dir /local_dir
Разберем команду:
2014-07-19T21:51:08+06:00 - я взял из предыдущего вывода (последний инкремент). Программа поддерживает не только такое представление, чтобы восстановить данные 5-ти дневной давности можно набрать 5D, 2-х недельной 2W и так далее.
/destination_path/some_file_or_dir - можно указать конкретный файл из сохраненных данных, либо дирикторию полностью.
/local_dir - здесь нужно указать в какую директорию выполнить восстановление данных.

4) Диагностика
По умолчанию, после запуска, rdiff-backup ведет себя более чем скромно, и сообщает только если сталкивается с какими-либо ошибками при копировании.
Для повышения уровня дебага есть встроенная опция '-v' или '--verbosity', уровень можно регулировать от 0 до 9.
rdiff-backup -v 4 /tmp /backup
Using rdiff-backup version 1.2.8
Unable to import win32security module. Windows ACLs
not supported by filesystem at /tmp
escape_dos_devices not required by filesystem at /tmp
-----------------------------------------------------------------
Detected abilities for source (read only) file system:
  Access control lists                         On
  Extended attributes                          On
  Windows access control lists                 Off
  Case sensitivity                             On
  Escape DOS devices                           Off
  Escape trailing spaces                       Off
  Mac OS X style resource forks                Off
  Mac OS X Finder information                  Off
-----------------------------------------------------------------
Unable to import win32security module. Windows ACLs
not supported by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
escape_dos_devices not required by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
-----------------------------------------------------------------
Detected abilities for destination (read/write) file system:
  Ownership changing                           On
  Hard linking                                 On
  fsync() directories                          On
  Directory inc permissions                    On
  High-bit permissions                         On
  Symlink permissions                          Off
  Extended filenames                           On
  Windows reserved filenames                   Off
  Access control lists                         On
  Extended attributes                          On
  Windows access control lists                 Off
  Case sensitivity                             On
  Escape DOS devices                           Off
  Escape trailing spaces                       Off
  Mac OS X style resource forks                Off
  Mac OS X Finder information                  Off
-----------------------------------------------------------------
Backup: must_escape_dos_devices = 0
Starting mirror /tmp to /backup
При повышении уровня - количество сообщений в консоль увеличивается
5) Удаление старых инкрементных копий
Для того, чтобы не хранить старые версии файлов, есть замечательный метод удаления инкрементных данных:
rdiff-backup --remove-older-than 40W /destination_path
Опция --remove-older-than 40W выполнит удаление всех слепков, старше чем 40 недель.

6) Автоматизация процесса резервирования
Так, ну а теперь напишем небольшой скрипт, который будет выполнять резервное копирование данных и отправлять отчет о проделанной работе. Создадим файл backuper.bin
touch /etc/backuper.bin
И запишем в него следующий код:
#!/bin/sh
###!!! ВАШИ Настройки ЗДЕСЬ !!!###
#Определим сегодняшнюю и вчерашнюю даты
TODAY="$(date +%X.%Y.%m.%d)"
YESTERDAY="$(date -d 'yesterday' +%Y.%m.%d)"
#Ошибки (по умолчанию нет)
ERRORS="no errors"
#Получатели письма счастья )
MAILTO='user1@myil.ru,user2@myil.ru'
MAILFROM='backuper@myil.ru'
SUBJECTED='INCREMENT BACKUP report ('$ERRORS')'
#Что копировать
SAVE_DATA=/DATA_PATH
#Куда копировать
BACKUP_DATA=/BACKUP_PATH
#лог-файл процесса инкрементного копирования
LOGFILE=/tmp/backuplog
#Расположение rdiff-backup
RDIFF='/usr/bin/rdiff-backup'
#Строка запуска инкрементного копирования (доп опции)
EXT_STRING='--force --no-eas --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links --print-statistics'
EXT_STRING2='--force --no-hard-links --remove-older-than'
#Уровень логов RDIFF
LOG_LEVEL='-v 7'
#Удалять файлы старше 40 недель
EXPIRE='40W'

#Чистим лог для начала
cat /dev/null > $LOGFILE

##Записываем в начало лога данные, которые будут использованы при отправке письма
echo "To:$MAILTO
From:$MAILFROM
Subject: $SUBJECTED
Content-Type: text/plain; charset=UTF-8; format=flowed
Hi all :D! " >> $LOGFILE

#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
$TODAY
INCREMENT BACKUP for yesterday files($YESTERDAY):" >> $LOGFILE
#Записываем время начала операции копирования
STARTTIME="$(date +%H:%M:%S)"
#Запускаем процесс инкрементного копирования:
$RDIFF $EXT_STRING $LOG_LEVEL $SAVE_DATA $BACKUP_DATA >> $LOGFILE 2>&1

##Удаляем файлы старше чем EXPIRE
#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
Removing old files (EXPIRE=$EXPIRE):" >> $LOGFILE
#Запускаем удаление
$RDIFF $EXT_STRING2 $EXPIRE $BACKUP_DATA >> $LOGFILE 2>&1

#Записываем время начала и конца операции
ENDTIME="$(date +%H:%M:%S)"
echo "
------------------------------------------------------------------
STARTTIME: $STARTTIME
ENDTIME: $ENDTIME" >> $LOGFILE

##Проверка на ошибки
#Если будет найдена ошибка в логе, переменная ERRORS будет изменена
#и в теме письма будет крупно написано ERRORS!!
if [ `cat $LOGFILE | grep 'Error' | grep -v 'Errors 0' | grep -cv grep` != "0" ]; then
    sed -i -e 's/$ERRORS/ERRORS!!/' $LOGFILE
fi

#Отправка почты с помошью ssmtp
/usr/sbin/ssmtp -t < $LOGFILE

exit 0
Думаю не нужно объяснять, что необходимо самостоятельно заполнить поле "ВАШИ Настройки ЗДЕСЬ"
Как вы наверно заметили, в данном примере отправка почты происходит с помощью ssmtp, давайте его установим:
apt-get install ssmtp
И настроим:
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.BACK
echo "
#Тема для тестовых сообщений
Subject: Test message

#Адрес почтового сервера
mailhub=mail.myil.ru

#От кого будет посылаться сообщение
hostname=backuper@myil.ru

#Использовать шифрование STARTTLS
UseSTARTTLS=no

#метод авторизации
AuthMethod=LOGIN

#Логин
AuthUser=backuper@myil.ru

#Пароль
AuthPass=backuper_psw

#Разрешить изменить адрес отправителя (hostname)
FromLineOverride=YES
 
" >> /etc/ssmtp/ssmtp.conf
Вам самостоятельно нужно заполнить следующие поля:
mailhub - почтовый сервер на который будет выполнена отправка сообщения.
hostname - от кого будет сообщение.
UseSTARTTLS - использовать или нет шифрование STARTTLS.
AuthUser - имя пользователя на почтовом сервере.
AuthPass - пароль на почтовом сервере.

Осталось подкорректировать права запуска файла:
chmod +x /etc/backuper.bin
И добавить задачу в Cron. Пишем # crontab -e, и добавляем в конец строку:
5 0 * * *  /etc/backuper.bin
Таким образом, наш файл /etc/backuper.bin - будет запускаться каждый день в 00 часов 05 минут.

четверг, 2 июля 2015 г.

Настройка Nagios 3


Сегодня добавим хост на мониторинг в Nagios3 (сервер Debian 8).
Итак, для начала немного теории.
1) Все настройки мониторинга хранятся в папке /etc/nagios3/conf.d
2) Nagios "воспринимает" только файлы с расширением .cfg
3) Все хосты можно разбить по разным файлам, а можно объеденить хосты и сервисы (методы проверки) в разные файлы

Начнем с самого начала.
Установим Nagios:
apt-get install nagios3
Cделаем backup существующих настроек:
mv /etc/nagios3/conf.d /etc/nagios3/conf.d.BACK
mkdir /etc/nagios3/conf.d
1) Первое, что нам нужно - это определить временные интервалы.
Создадим файл настроек временных интервалов /etc/nagios3/conf.d/01-timeperiods.cfg:
echo "
# Период 24х7 (Круглосуточная проверка) - которым в основном и будем пользоваться
define timeperiod{
    timeperiod_name 24x7        ; Имя временного периода (24x7)
    alias           24x7        ; Описание периода
    monday          00:00-24:00 ; Временной интервал в понедельник
    tuesday         00:00-24:00 ; Временной интервал во вторник
    wednesday       00:00-24:00 ; Временной интервал в среду
    thursday        00:00-24:00 ; Временной интервал в четверг
    friday          00:00-24:00 ; Временной интервал в пятницу
    saturday        00:00-24:00 ; Временной интервал в субботу
    sunday          00:00-24:00 ; Временной интервал в воскресение
    }
# Рабочие часы
define timeperiod{
    timeperiod_name workhours
    alias           workhours
    monday          09:00-17:00
    tuesday         09:00-17:00
    wednesday       09:00-17:00
    thursday        09:00-17:00
    friday          09:00-17:00
    }
# Не рабочие часы
define timeperiod{
    timeperiod_name nonworkhours
    alias           nonworkhours
    monday          00:00-09:00,17:00-24:00
    tuesday         00:00-09:00,17:00-24:00
    wednesday       00:00-09:00,17:00-24:00
    thursday        00:00-09:00,17:00-24:00
    friday          00:00-09:00,17:00-24:00
    saturday        00:00-24:00
    sunday          00:00-24:00
    }
# Для того "чтобы было" период "никогда"
# Здесь не заданны временные интервалы, это значит, что проверки не будет
define timeperiod{
    timeperiod_name never 
    alias           Never
    }
" >> /etc/nagios3/conf.d/01-timeperiods.cfg
2) Нужно задать команду оповещения по почте, и настроить эту самую почту.
Установим sendemail, с помощью которого будем производить почтовую рассылку:
apt-get install sendemail
Добавим следующий код в файл /etc/nagios3/commands.cfg:
#Оповещение по email о состоянии хоста
define command{
    command_name    notify-host-by-email
    command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n"
    }
#Оповещение по email о состоянии сервиса
define command{
    command_name    notify-service-by-email
    command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$"
    }
#Команда проверки по SNMP
define command{
    command_name    check_snmp01
    command_line    /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ $ARG1$
    }
Итак, если не вдаваться в подробности, видно, что мы только что добавили 3 команды:
notify-host-by-email - оповещение по почте о состоянии хоста
notify-service-by-email - оповещение по почте о состоянии сервиса
Ключевые моменты данных команд, которые нужно настроить исходя из сервера, через который будет происходить рассылка:
-s youre.mail.server    - ip или DNS имя почтового сервера
-xu monitoring_username - имя пользователя
-xp monitoring_password - пароль
-f frommail@mail.server - почтовый ящик мониторинга
-o tls=no               - используется или нет tls 
И check_snmp01, с помощью которой будем проверять состояние хостов по SNMP
3) Задаем контактные лица, которым будут отправляться оповещения о пропадании сервисов /etc/nagios3/conf.d/02-contacts.cfg:
echo "
#service_notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)

#host_notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)

#Контакт №1
define contact{
    contact_name                  main_admin              ; Имя контакта
    alias                         Glavnii admin           ; Описание контакта
    service_notification_period   24x7                    ; Оповещать о состоянии сервиса во временной интервал
    host_notification_period      24x7                    ; Оповещать о состоянии хоста во временной интервал
    service_notification_options  w,u,c,r                 ; WARNING,UNKNOWN,CRITICAL,RECOVERY
    host_notification_options     d,r                     ; DOWN,RECOVERY
    service_notifications_enabled 1                       ; Оповещать о изменениях сервисов
    host_notifications_enabled    1                       ; Оповещать о изменениях хоста
    service_notification_commands notify-service-by-email ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
    host_notification_commands    notify-host-by-email    ; Способ оповещения о состоянии хоста(задан в commands.cfg)
    email                         main_admin@yordomain.com; Почтовый ящик контактного лица
    }
#Контакт №2
define contact{
define contact{
    contact_name                  second_admin              ; Имя контакта
    alias                         Ne Glavnii admin          ; Описание контакта
    service_notification_period   24x7                      ; Оповещать о состоянии сервиса во временной интервал
    host_notification_period      24x7                      ; Оповещать о состоянии хоста во временной интервал
    service_notification_options  w,u,c,r                   ; WARNING,UNKNOWN,CRITICAL,RECOVERY
    host_notification_options     d,r                       ; DOWN,RECOVERY
    service_notifications_enabled 1                         ; Оповещать о изменениях сервисов
    host_notifications_enabled    1                         ; Оповещать о изменениях хоста
    service_notification_commands notify-service-by-email   ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
    host_notification_commands    notify-host-by-email      ; Способ оповещения о состоянии хоста(задан в commands.cfg)
    email                         second_admin@yordomain.com; Почтовый ящик контактного лица
    }
#Группа контактов
define contactgroup{
    contactgroup_name       admins                    ; Имя группы
    alias                   Nagios Administrators     ; Описание
    members                 main_admin,second_admin   ; Состав группы
    }
" >> /etc/nagios3/conf.d/02-contacts.cfg
4) Зададим шаблон для хостов. Это необязательно, но в дальнейшем значительно упростит конфигурацию Nagios-а
echo "
#notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)

define host{
    name                         host-shablon      ; Имя шаблона
    notifications_enabled        1                 ; Включить оповещения
    event_handler_enabled        1                 ; Включить обработчик событий (контролировать состояние хоста)
    flap_detection_enabled       1                 ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл хоста)
    failure_prediction_enabled   1                 ; Прогнозирование сбоев. В дальнейшем Nagios от этого 
                                                   ;  параметра отказался совсем, т.к. он часто сбоит
    process_perf_data            1                 ; Обработка данных о производительности
    retain_status_information    1                 ; Обработка состояния хоста(включен, выключен, перезагружен)
                                                   ;  Если включен retain_nonstatus_information - запоминает состояние
                                                   ;  хоста и восстанавливает значение в случае перезагрузки нагиоса
    retain_nonstatus_information 1                 ; Запоминать состояние хоста в случае перезагрузки нагиоса
    check_command                check-host-alive  ; Команда проверки. check-host-alive - проверка хоста на доступность
    max_check_attempts           3                 ; Количество проверок статуса отличного от ОК, 
                                                   ;  перед тем как будет создано оповещение
    notification_interval        60                ; Если статус отличен от ОК, выдавать оповещения каждый час 
                                                   ;  (0-чтобы оповещать только в случае восстановления)
    notification_period          24x7              ; Период оповещения 24х7
    notification_options         d,u,r             ; DOWN, UNREACHABLE, RECOVERY
    contact_groups               admins            ; Кому рассылать оповещения
    register                     0                 ; Не регистрировать в Нагиосе, т.к. это только шаблон
    }
" >> /etc/nagios3/conf.d/03-host_template.cfg
5) Зададим шаблон для сервисов:
echo "
#notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)

define service{
    name                            service_shablon ; Имя шаблона
                                                    ; Есть 2 типа проверок состояния сервиса регулярно и по расписанию
    active_checks_enabled           1               ; Включить акивные (регулярные) проверки
    passive_checks_enabled          1               ; Включить пассивные (по расписанию) проверки
    parallelize_check               1               ; Активные проверки должны быть параллельными  
    obsess_over_service             1               ; Предпочитать эту проверку а не через ocsp_command
    check_freshness                 0               ; Проверка на "свежесть" пассивных проверок
    notifications_enabled           1               ; Включить оповещения
    event_handler_enabled           1               ; Включить обработчик событий
    flap_detection_enabled          1               ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл сервиса)
    failure_prediction_enabled      1               ; Прогнозирование сбоев. В дальнейшем Nagios от этого 
                                                    ;  параметра отказался совсем, т.к. он часто сбоит
    process_perf_data               1               ; Обработка данных о производительности
    retain_status_information       1               ; Обработка состояния сервиса(включен, выключен, перезагружен)
                                                    ;  Если включен retain_nonstatus_information - запоминает состояние
                                                    ;  сервиса и восстанавливает значение в случае перезагрузки нагиоса
    retain_nonstatus_information    1               ; Запоминать состояние сервиса в случае перезагрузки нагиоса
    notification_interval           60              ; Если статус отличен от ОК, выдавать оповещения каждый час 
                                                    ;  (0-чтобы оповещать только в случае восстановления)
    is_volatile                     0               ; Постоянный(0) или непостоянный(1) сервис
    check_period                    24x7            ; Период проверки 24х7
    normal_check_interval           1               ; Интервал нормальной проверки
    retry_check_interval            1               ; Интервал повторной проверки
    max_check_attempts              1               ; Количество проверок статуса отличного от ОК, 
                                                    ;  перед тем как будет создано оповещение
    notification_period             24x7            ; Период оповещения 24х7
    notification_options            w,u,c,r         ; WARNING UNKNOWN CRITICAL RECOVERY
    contact_groups                  admins          ; Кому рассылать оповещения
    register                        0               ; Не регистрировать в Нагиосе, т.к. это только шаблон
    }
" >> /etc/nagios3/conf.d/03-service_template.cfg
6) Создаем сервис PING, в который будут включены все хосты, и будут они просто пинговаться:
echo "
#Данный сервис пингует все хосты, которые включены в мониторинг
#Сначала сам сервис:
define service {
    hostgroup_name                  PING-CHECK                     ; Название сервиса
    service_description             PING                           ; Описание сервиса
    check_command                   check_ping!200.0,40%!400.0,80% ; Команда проверки
    use                             service_shablon                ; Использовать шаблон service_shablon
}
#А теперь группа хостов, которая будет пинговаться:
#Здесь есть 1 момент, когда hostgroup_name сервиса и группы хостов совпадает
#Таким образов в данной группе хосты будут мониторится по описанному выше сервису
define hostgroup {
    hostgroup_name  PING-CHECK  ; Название группы
    alias           ping all    ; Описание группы
    members         *           ; Состав группы * - значит все хосты
    }
" >> /etc/nagios3/conf.d/04-ping_all_hosts.cfg
7) Ну а теперь зададим наш хост:
echo "
#Здесь задается хост
define host{
    host_name               my_host1                  ; Имя хоста. Лучше без пробелов и по английски
    alias                   my host number 1          ; Описание хоста
    use                     host-shablon              ; Использовать шаблон              
    address                 212.193.163.6             ; IP Адрес хоста (который автоматически будет добавлен в сервис пинг)
    }
#Определим группу хостов. В дальнейшем, когда в мониторинге будет много хостов - это будет помогать
define hostgroup {
    hostgroup_name          my_hosts_group_1          ; Имя группы 
    alias                   Group of hosts 1          ; Описание
    members                 my_host1                  ; Члены группы (по полю host_name). 
                                                      ; Если членов несколько, то через запятую my_host1,my_host2 и т.д.
    }
" >> /etc/nagios3/conf.d/20-my_host_01.cfg
8) Хост у нас уже есть, а теперь запишем принтер.
Будем мониторить состояние картриджей в принтере Kyocera 6026 (Kyocera 6126,2035,2135).
Мониторинг будет осуществляться по SNMP:
echo "
#Сетевой принтер определяется для нагиоса как обычный хост
define host {
 host_name         Printer 6026 Ur Otdel
 alias             Printer in Ur office
 address           10.77.0.11
 use               host-shablon
 }
#Можно включить его в группу с предыдущим хостом
define hostgroup {
    hostgroup_name          my_hosts_group_1          ; Имя группы 
    alias                   Group of hosts 1          ; Описание
    members                 Printer 6026 Ur Otdel     ; Члены группы (по полю host_name). 
    }
#Проверка черного картриджа 
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon       ; Шаблон сервиса
        host_name               Printer 6026 Ur Otdel ; Имя хоста (по полю host_name). 
        service_description     Black Cartridge       ; Описание сервиса
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.4 -w 433: -c 100: ; SNMP запрос
        }
#Проверка синего картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Blue Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.1 -w 433: -c 100:
        }
#Проверка красного картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Red Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.2 -w 433: -c 100:
        }
#Проверка желтого картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Yellow Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.3 -w 433: -c 100:
        }
" >> /etc/nagios3/conf.d/30-my_printer_01.cfg


Вот собственно и все.
Осталось перезагрузить Нагиос:
/etc/init.d/nagios3 restart
Теперь у нас должны появится 2 хоста в мониторинге, объединенные в одну группы.
При этом у принтера будет проверка состояния картриджей, и оба будут пинговаться.