Моніторинг та оповіщення про події в журналах Windows тригери подій

У Windows Server 2008 (Vista) з'явився новий функціонал, що дозволяє прив'язати завдання планувальника до будь-якої події в журналах системи. Завдяки цій можливості адміністратор може на будь-яку подію Windows призначити виконання певного скрипта або відправку повідомлення електронною поштою. Розберемося з цією можливістю докладніше.

Можливість запуску завдань при настанні певних подій Windows заснована на тісній інтеграції Task Scheduler і Event Viewer. Призначити завдання планувальника на будь-яку подію Windows можна прямо з консолі журналу перегляд події (Event Viewer). Як реакція на подію, що відбулася планувальник може запустити скрипт або відправити поштове повідомлення адміністратору (або будь-якого іншого користувачеві).

Припустимо, наша задача - налаштувати оповістити адміністратора безпеки про блокування облікового запису користувача в Active Directory.

Порада. Ми вибрали це події для наочності. Насправді спектр застосування цього функціоналу досить широкий. Це можуть бути, наприклад, оповіщення про зупинку певної служби Windows, запуск певної програми по завершенню резервного копіювання Exchange, оповіщення про зміну в групах безпеки Active Directory або зміни в певних папках або файлах і т.п.

Подія блокування облікового запису в AD відзначається на контролері домену в журналі Security (Безпека). Event ID події блокування - 4740. Відкриваємо консоль журналу подій Windows (Event Viewer - eventvwr.msc) І шукаємо цікавить нас. Клацаємо по ньому ПКМ і вибираємо пункт Attach Task To This Event (Прикріпити завдання до цієї події).

Запускається майстер створення нового завдання планувальника. Майстер запропонує вказати ім'я завдання. Воно генерується автоматично - Security_Microsoft-Windows-Security-Auditing_4740 і нас влаштовує.

На наступному кроці вказані вид журналу подій, джерело і Event ID події (все поля заповнюються автоматично і не доступні для редагування на цьому кроці).

Далі пропонується вибрати тип реакції на подію. Можливі наступні варіанти:

  • Start a program - запуск програми (скрипта)
  • Send an e-mail - відправка поштового повідомлення
  • Display a message - відображення повідомлення в консолі

Нас цікавить сповіщення по Email. Вказуємо відправника, одержувача, адреса SMTP сервера, тему і текст письма.

На останньому кроці майстра можна побачити отримані настройки тригера. В результаті в планувальнику завдань з'явиться нове завдання, прив'язане до нашого події. відкриємо консоль Task Scheduler (В Administrative Tools). Створене завдання можна знайти в розділі Task Scheduler Library -> Event Viewer Tasks.

Тут же можна змінити налаштування тригера події і примусово його запустити, протестувавши реакцію на подію.

Порада. Якщо потрібно один тригер прив'язати до безлічі EventID, їх потрібно вказувати через кому.

Тригер є активним. Тепер при блокуванні всіх облікових записів AD - на вказаний email буде відправлятися лист з повідомленням.

Примітка. Аналогічний функціонал в Windows Server 2003 і більш ранніх версіях Windows реалізовувався за допомогою консольної утиліти - eventtriggers.exe. Дана утиліта також дозволяла відслідковувати події в журналах системи і "вішати" на певні події тригери. Для нашого приклад, коли до події 4740 потрібно прив'язати виконання скрипта vbs або powershell, який відправляє лист на ящик адміністратора, команда може бути такою:

eventtriggers / create / TR "Lock Account" / TK "C: \ WINDOWS \ system32 \ windowspowershell \ v1.0 \ powershell.exe c: \ script \ SendEmail.ps1" / L Security / EID 4740

Таке повідомлення не дуже інформативно, і для перегляду детальної інформації про подію доводиться відкривати журнал Event Viewer. Спробуємо прикріпити до листа дані з журналу подій. У цьому нам допоможе утиліта wevtutil, що дозволяє вивантажити з журналів Windows інформацію про будь-яку подію. Так, щоб отримати дані про останній події з кодом 4740 з журналу Security, потрібно виконати:

wevtutil qe Security / q: "* [System [(EventID = 4740)]]" / f: text / rd: true / c: 1

Створимо скрипт (query.cmd) з двох рядків: перша видаляє старий файл з балкою, друга - вивантажує з журналу остання подія і зберігає його в файл логу:

del c: \ script \ query.txt
wevtutil qe Security / q: "* [System [(EventID = 4740)]]" / f: text / rd: true / c: 1> c: \ script \ query.txt

Залишилося ще раз відкрити настройки створеного раніше тригера в журналі планувальника завдань. На вкладці Actions додамо нову дію - запуск скрипта query.cmd. Потім потрібно змінити порядок виконання дій, перенесемо його вгору списку за допомогою стрілок праворуч (скрипт повинен виконуватися першим).

Далі відредагуємо друга дія - відправку електронного листа, вибравши в якості вкладення до листа файл c: \ script \ query.txt .

Примітка. У нашому прикладі, щоб завдання запрацювало коректно, потрібно запускати його з підвищеними привілеями. Для цього в його настройках потрібно встановити галку Run with highest privileges.

Протестуємо завдання ще раз. Тепер на пошту адміністратора буде приходити повідомлення з вкладенням, в якому вказано дані про імені заблокованої облікового запису, часу блокування та іншою корисною інформацією.

Порада. Використання функціоналу тригерів подій Window для оповіщення адміністратора про критичних проблемах на серверах не є повноцінною заміною системи моніторингу, такий як System Center Operations Manager і Zenoss. Однак як просте вбудоване засіб моніторингу та оповіщення для малого бізнесу, що не потребує вкладень у впровадження і навчання персоналу, укупі з можливістю консолідації логів відразу з декількох серверів (Forwarded Events), воно цілком юзабельно.

Прив'язка завдань планувальника до подій в журналах систем працює у всіх версіях Windows, починаючи з Windows Server 2008 / Vista. Цей функціонал дозволяє швидко оповістити адміністратора про виникнення певних проблем з серверів і відреагувати на них.