Понадобилось сделать проверку, которая бы раз в день проверяла дату последнего выполнения заданий на сервере и отсылала отчетик по почте.
Такую задачу можно решить многими способами. Здесь опишу свой вариант.
Использовать я буду NRPE для Windows, а точнее его реализацию в NSC++ клиенте (0.3.х версия). NRPE позволяет выполнять на стороне клиента любые скрипты и получать от них результаты - главное всё правильно настроить ;) Как установить и настроить NRPE на сервере и клиенте я писал в
этой статье. Для скриптов будем использовать Python 3. Почему? Во 1-х я знаю этот язык :) а во 2-х, я долго мучался с PowerShell, в котором очень криво работает парсинг CSV и мне так и не удалось заставить его нормально вытягивать данные. В итоге, я положий большой и толстый на мракобесную приблуду и заюзал православный питон, в котором тоже была пара граблей, но гугл помог их решить :)
Итак. Для начала настроим клиента.
Идем на
http://python.org/download/ и скачиваем 3ю версию питона для Windows, устанавливаем (Далее, Далее... Готово :) ).
Открываем конфиг NSC++ и в секцию
[External Scripts] прописываем:
check_scheduler=C:\Python32\python.exe "C:\Program Files\NSClient++\scripts\script.py"
Затем собсно и пишем этот скриптец (создаем текстовый файлик, переименовываем и ПКМ / Edit with IDLE):
import csvimport sys
import os
##Deleting old log
os.system('del "log.csv"')
##Performing schtasks command
os.system('schtasks /query /fo CSV /v >> "log.csv"')
##Clean bad characters inserted by schtasks
fi = open('log.csv', 'rb')
data = fi.read()
fi.close()
fo = open('log.csv1', 'wb')
fo.write(data.replace(b'\x00', b''))
fo.close()
##Opening cleaned CSV
ifile = open('log.csv1', "r")
reader = csv.reader(ifile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
##Extracting needed data
for row in reader:
if (row[1] == "rdc_106") or (row[1] == "rdc_108") or (row[1] == "rdc_115") or (row[1] == "rdc_116"):
print (row[1]+" : "+row[5])
ifile.close()
Алгоритм работы скрипта такой:
- удаляем старый лог чтоб не мешал
- командой schtasks /query /fo CSV /v >> "log.csv" получаем список заданий и в формате CSV записываем в лог-файл
- очищаем файлик от символов неотображаемых null которые мракософтные команды и Excel зачем-то пихают в файлик CSV, а питон ругается на аткие символы
- а затем извлекаем в командную строку поля TaskName и Last Run Time для нужных нам заданий.
Перезапускаем службу NSClient++. Всё, если вы ничего не напутали с путями, то клиент настроен.
Настроим теперь сервер.
Тут всё даже попроще. Редактируем файл команд
/usr/local/nagios/etc/objects/commands.cfg добавив в конец:
define command{
command_name check_scheduler
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_scheduler
}
Затем пишем скриптец на bash, который будет чекать наши задания и отправлять результаты по почте. Мне не надо было делать постоянный чек, потому я не прописывал сервис для хоста.
#!/bin/bash
#удаляем старый лог чтоб не мешал
rm /home/user/daily_log
#тут пишем комментарии, чеки и всё такое
echo " `date ` \n\n Daily report for Super-duper server.\n\n [Disk space on D:]" >> /home/user/daily_log>
/usr/local/nagios/libexec/check_nt -H 192.168.1.4 -p 12489 -v USEDDISKSPACE -l d -d SHOWALL >> /home/user/daily_log
echo "\n [Processes state:]" >> /home/user/daily_log
/usr/local/nagios/libexec/check_nt -H 192.168.1.41 -p 12489 -v PROCSTATE -l someprocess.exe -d SHOWALL >> /home/user/daily_log
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.4 -p 5666 -c check_scheduler >> /home/user/daily_log
cat /home/user/daily_log | mail -s "Report for Super-duper" -c copy_mail@domain.com recipient@domain.com
chmod +x /home/user/daily_report.sh
И пихаем этот скриптик в планировщик на нужное на время
crontab -e (например, в 6-45 по рабочим дням):
45 6 * * 1-5 sh /home/user/daily_report.sh
Усё. Если всё сделано правильно, то пожинаем плоды своего труда.