Perl для системного администрирования



              

Двоичные журналы - часть 5


Использование API операционной системы для ведения журналов

Давайте перейдем к службе Event Log Service Windows NT/2000, чтобы рассмотреть этот подход. Как мы уже упоминали, в этом случае, к сожалению, журналы хранятся не в текстовых файлах. Самый лучший и единственный поддерживаемый способ, позволяющий добраться до этих данных, заключается в применении набора специальных API-вызовов. Большинство пользователей для получения этих данных полагаются на программу Event Viewer.

К счастью, существует модуль, написанный Джесси Доэрти (Jesse Dougherty) (и обновленный Мартином Поли (Martin Pauley) и Бретом Гиддингсом (Bret Giddings)), обеспечивающий простой доступ к API-вызовам Event Log. Вот простая программа, которая выводит список событий из журнала System в формате, подобном syslog. Позже мы подробно рассмотрим более сложную версию этой программы.

use Win32::EventLog;

П

у каждого события есть тип, вот как выглядят самые

и распространенные типы %type = (1 => "ERROR",

2 => "WARNING", 4 =<• "INFORMATION", 8 => "AUDIT_SUCCESS", 16 => "AUDIT_FAILURE");

# если это значение установлено, мы также получаем полный текст

# каждого сообщения при каждом вызове

Read() $Win32::EventLog::GetMessageText = 1;

fl открываем журнал событий

System Slog = new Win32::EventLog("System") or die

 "Невозможно открыть системный журнал:$~Е\п";

# читаем его по одной записи, начиная с первой

while ($log->Read((EVENTLOG_SEQUENTIAL_READ|EVENTLOG_FORWARDS_READ),

1,$entry)){

print scalar localtime($entry->{TimeGenerated})." ";

print $entry->{Computer}."[".($entry->{EventID} &

Oxffff)."] ";

print Sentry->{Source}.":".$type{$entry->{EventType}}; print $entry->{Message};

}

В NT/2000 существуют также утилиты, работающие из командной строки, такие как last, выводящие события из журнала в текстовом виде. Позже мы посмотрим на эти утилиты в действии.




Содержание  Назад  Вперед