`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Microsoft Log Parser: не журналом единым

+33
голоса

Вряд ли сегодня удастся найти специалиста, не знакомого с SQL Server, Exchange Server или Visual Studio. Однако в арсенале Microsoft также имеются продукты, незаслуженно обойденные вниманием IТ-общественности. Нередко они совершенно бесплатны, распространяются в составе различных Resource Kit и реализуют какие-то вспомогательные функции, за которые, впрочем, сторонние разработчики не гнушаются взимать плату. Трудно даже сказать, почему эти пакеты остаются малоизвестными, ведь среди них встречаются действительно замечательные решения, об одном из них мы и расскажем сегодня.

Log Parser – это утилита командной строки, название которой, в общем-то, говорит само за себя. Действительно, появившись в пакете IIS Resource Kit на рубеже столетий, Log Parser предназначалась для разбора журнальных файлов IIS с целью анализа трафика Web-сайтов, сбора статистики посещений, обнаружения попыток вторжения и т. п. Однако к 2005 г., претерпев несколько обновлений (до номера 2.2.10), она превратилась куда в более мощный инструмент, способный извлекать информацию из 20 типов источников, обладающий широчайшими функциями по ее разбору и представлению в удобном для дальнейшей работы виде (поддерживаются 10 различных форматов).

Вот типичный пример использования Log Parser:

logparser «select *
from Security
where EventID in (528;540)
order by TimeGenerated DESC»
–i:EVT –o:NAT

Здесь утилите передаются SQL-запрос (его можно также загружать из заранее подготовленного файла) и параметры, описывающие форматы источника и получателя информации. В результате выполнения данной команды в консольное окно будет выведен список всех событий из системного журнала безопасности с кодами 528 и 540, соответствующими успешным локальным и сетевым подключениям пользователей к ресурсам компьютера.

Говоря об источниках, с которыми может работать Log Parser, стоит выделить несколько наиболее важных:

  • журналы Web/FTP-сервисов IIS различных форматов, а также весьма специфические и в то же время очень полезные журналы ошибок служб http.sys и URLScan, исследование которых позволяет быстро реагировать на попытки взлома IIS;
  • журналы событий Windows, не только стандартные (Application, Security, System), но и добавляемые штатными сервисами Windows (DNS, Active Directory) и различными приложениями (например, Microsoft Virtual Server). Работать с этими источниками Log Parser может как локально, так и дистанционно (естественно, при наличии у пользователя соответствующих прав);
  • в качестве источников выступают отнюдь не только традиционные журналы. Log Parser умеет работать с файловой системой, реестром и даже службой каталогов Active Directory, получая таким образом доступ к информации о самых различных объектах, скажем, к настройкам того же IIS;
  • с помощью Log Parser можно исследовать даже Web-сайт, содержащий RSS, – в этом случае достаточно лишь указать нужный URL;
  • поддерживаются также журналы в широком понимании этого слова, т. е. CSV, TSV, XML и другие структурированные текстовые файлы. В большинстве случаев Log Parser способен автоматически проанализировать структуру данных и, соответственно, обработать запрос.

Примеры использования каждого из источников мы здесь приводить не будем, достаточно сказать, что в дистрибутиве Microsoft Log Parser 2.2 содержится комплект документации, которая поможет быстро освоиться новичку в работе с программой. Естественно, для всех источников имеются дополнительные параметры, например глубина рекурсии при обходе дерева каталогов, реестра или Active Directory, контрольные точки (checkpoint) для продолжения анализа с места окончания предыдущей операции и т. п.

Для выборки данных в Log Parser применяется язык запросов SQL, что позволяет всем, кто знаком с ним, максимально задействовать прежние навыки, и при этом никоим образом не сдерживает фантазию опытных специалистов. Более того, в диалект SQL введены различные дополнительные функции, призванные максимально учесть специфику применения Log Parser. Условно их можно разделить на несколько категорий:

  • преобразование данных из одних типов в другие, в том числе весьма специфические, такие как INT_TO_IPV4, которые не характерны для типичных областей применения SQL, но весьма уместны при работе именно с журналами;
  • работа со строками во всем многообразии этого понятия, в том числе функции для разбиения на лексемы, выделяющие определенные фрагменты данных по принципу, заранее определенному в самой функции (EXTRACT_EXTENSION, EXTRACT_FILENAME, EXTRACT_PATH) или пользователем (EXTRACT_PREFIX, EXTRACT_SUFFIX, EXTRACT_TOKEN, EXTRACT_VALUE);
  • математические и бинарные функции, позволяющие эффективно обрабатывать числовые данные, особый интерес из которых представляет функция квантования значений с выбранным шагом QUANTIZE;
  • прочие, имеющие дело с системной информацией вроде RESOLVE_SID, REVERSEDNS, WIN32_ERROR_DESCRIPTION, HASHMD5_FILE, и многие другие, названия которых говорят сами за себя.

Наличие столь богатой функциональности фактически снимает проблему получения нужной выборки данных, но не избавляет IТ-специалиста от необходимости правильной ее интерпретации (например, необходимо знать коды основных системных событий). Увы, для многих это становится преградой при освоении Log Parser, поскольку в документации прикладные аспекты не рассматриваются. Однако, во-первых, подобную вспомогательную информацию (с любым уровнем детализации) можно найти во множестве других источников, в том числе и на сайте самой Microsoft. Во-вторых, существует книга, специально посвященная Log Parser (Microsoft Log Parser Toolkit, издательство Syngress, ISBN 1932266526), автором которой является один из разработчиков программы и в которой подробно рассматриваются все особенности ее применения с обширными примерами. И в-третьих, огромное количество практической информации собрано на сайте сообщества пользователей Log Parser

Впрочем, чтобы не быть совсем уж голословными, мы приведем небольшой пример использования Log Parser, где задействованы широкий спектр дополнительных функций встроенного языка запросов и информация, которую любой IТ-специалист может за 15 минут почерпнуть из документации по структуре системного журнала безопасности Windows Server 2003.

Код в Листинге 1 является расширенным вариантом запроса из примера, приведенного в начале статьи, и также позволяет осуществлять мониторинг и анализ подключения пользователей. Сохранив его в файле logons.sql, мы можем несколько модифицировать командную строку:

logparser file:logons.sql
–i:EVT –o:NAT

Листинг 1

SELECT
-- преобразовать SID в имя пользователя
resolve_sid(SID) as UserName,
eventid,
timegenerated,
-- все данные о событии хранятся в текстовом
-- поле strings, разделенные символом |
-- Получаем нужные данные из extract_token
extract_token(strings, 0, '|' ) as LogonName,
extract_token(strings, 13, '|' ) as LogonIP,
case extract_token(strings, 3, '|' )
 WHEN '2' THEN 'interactive'
 WHEN '3' THEN 'network'
 WHEN '4' THEN 'batch'
 WHEN '5' THEN 'service'
 WHEN '7' THEN 'unlocked workstation'
 WHEN '8' THEN 'network logon using a cleartext password'
 WHEN '9' THEN 'impersonated logons'
 WHEN '10' THEN 'remote access'
 ELSE extract_token(strings, 3, '|' )
end as LogonType,
extract_token(strings, 4, '|' ) as LogonProc,
extract_token(strings, 11, '|' ) as ProcessID
FROM
 Security
WHERE
EventID IN (528;540)
order by Timegenerated DESC

Надеемся, что теперь читатели сполна ощутили мощь и гибкость Log Parser в вопросах построения выборки. Однако это лишь половина дела – ведь полученные данные необходимо представить в удобном для дальнейшего изучения виде. К счастью, и здесь Log Parser оказывается на высоте благодаря своему умению строить графики и диаграммы распространенных типов, сохранять данные в CSV, XML- и HTML-файлах, а также передавать их на SQL- и SYSLOG-серверы. Таким образом, о Log Parser можно говорить уже не как об утилите для решения узких вспомогательных задач (дабы, скажем, не перелопачивать вручную многомегабайтовые журналы), а как о законченном продукте, на основе которого создаются довольно мощные решения по контролю за текущим состоянием систем, а в связке с Microsoft SQL Reporting Services – по мониторингу и обработке событий. В подтверждение этих слов мы рассмотрим небольшой пример по формированию HTML-представления с применением приведенных выше запросов.

Прежде всего стоит сказать, что в Log Parser предусмотрен специальный язык описания шаблонов TPL, который представляет собой простейший скриптовый язык, подобный существовавшему на заре эры IIS механизму IDC. Суть состоит в том, что в текстовый файл – причем это может быть и HTML, и что-либо еще – вставляются некие специальные команды, обрабатываемые Log Parser.

Листинг 2

<lpheader>
<html>
<head>
<title>Logon</title>
</head>
<body bgcolor="#f0f0f0">
<table 
width="100%" 
border="0" 
bgcolor="#c0c0c0" 
cellpadding="4" 
cellspacing="2"
>
<tr>
<th bgcolor="#b0b0b0">%FIELDNAME_1%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_2%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_3%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_4%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_5%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_6%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_7%</th>
<th bgcolor="#b0b0b0">%FIELDNAME_8%</th>
</tr>
</lpheader>

<lpbody>
<tr>
<td align="left" bgcolor="#e0e0c0">%FIELD_1%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_2%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_3%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_4%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_5%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_6%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_7%</td>
<td align="left" bgcolor="#e0e0c0">%FIELD_8%</td>
</tr>
</lpbody>

<lpfooter>
</table>
</body>
</html>
</lpfooter>

Обратимся к Листингу 2. Здесь <lpheader> и <lpfooter> представляют собой описательные блоки единожды повторяемых частей конечного файла, <lpbody> – блок, который будет повторяться для каждой из строк, полученных в результате выполнения SQL-запроса. Непосредственно данные затем подставляются вместо идентификаторов %FIELD_n%, где n – номер столбца в текущей строке выборки. Имеются и другие команды, позволяющие, среди прочего, обращаться к именам столбцов в результатах запроса (%FIELDNAME_n%) или к системным значениям вроде текущего времени и переменных окружения. Сохранив этот шаблон в файле с именем logons.tpl и модифицировав наш запрос, как показано в Листинге 3, мы можем организовать командный файл, который будет выполняться по расписанию и собирать информацию о состоянии сразу нескольких систем в виде Web-страниц, при необходимости публикуемых на каком-либо сервере:

logparser file:logons.sql?
src="SRV1"+
dest="srv1-logons.html"
–i:EVT –o:TPL –tpl:logons.tpl
logparser file:logons.sql?
src="SRV2"+
dest="srv2-logons.html"
–i:EVT –o:TPL –tpl:logons.tpl

В приведенном примере стоит обратить внимание на специальные конструкции 0est% и rc%, с помощью которых осуществляется передача параметров из командной строки в тело запроса, благодаря чему он становится действительно универсальным. В данном случае передаются имя компьютера, чей журнал безопасности будет обрабатываться, и имя файла, где будут сохранены результаты.

Листинг 3

SELECT 
resolve_sid(SID) as UserName, 
eventid,
timegenerated,
extract_token(strings, 0, '|' ) as LogonName, 
extract_token(strings, 13, '|' ) as LogonIP, 
case extract_token(strings, 3, '|' ) 
 WHEN '2' THEN 'interactive'
 WHEN '3' THEN 'network'
 WHEN '4' THEN 'batch'
 WHEN '5' THEN 'service'
 WHEN '7' THEN 'unlocked workstation'
 WHEN '8' THEN 'network logon using a cleartext password'
 WHEN '9' THEN 'impersonated logons'
 WHEN '10' THEN 'remote access'
 ELSE extract_token(strings, 3, '|' )
end as LogonType,
extract_token(strings, 4, '|' ) as LogonProc,
extract_token(strings, 11, '|' ) as ProcessID
-- добавляет команду INTO для сохранения результатов
-- в различных форматах и хранилищах
-- 0est%, rc% - переменные, позволяющие
-- передавать значения из командной строки
INTO
 0est%
FROM
 \rc%Security
WHERE
EventID IN (528;540)
order by Timegenerated DESC

Однако даже самое изысканное табличное представление информации не сравнится по наглядности с графическим, поэтому Log Parser обеспечивает и вывод графиков. При этом во всей красе предстает столь любимая Microsoft интеграция приложений: поскольку Log Parser применяет Microsoft Office Web Components, входящий в состав любого Microsoft Office, доступны любые типы графиков и диаграмм, знакомые нам по Excel. Кроме того, обеспечивается программный доступ к объектным моделям, позволяющим манипулировать различными параметрами изображений. Вот один из наиболее простых примеров:

logparser «select
Quantize(TimeGenerated, 3600)
as Time, count(*) as Logons
into chart.gif from Security
where EventID in (528;540)
group by Time»
–i:EVT –o:CHART
–chartType:Column3D
–groupSize:800x600
–view:ON
Microsoft Log Parser не журналом единым
Именно так выглядит график, полученный в результате выполнения команды, приведенной в статье
Microsoft Log Parser не журналом единым
Статистика Web-сайта, реализованная исключительно с помощью Log Parser

Результатом выполнения данной команды будет сохраненное в файле chart.gif изображение размером 800×600 пикселов, представляющее собой трехмерную гистограмму, отображающую количество подключений пользователей по часам. Как видите, возможности визуализации информации ограничиваются только желанием, фантазией и потребностями того или иного специалиста.

Подводя итог, заметим, что в данном обзоре затронута лишь малая часть функциональности Log Parser – одним только графическим возможностям можно было бы посвятить отдельную статью, а что уж говорить о COM-интерфейсе, позволяющем легко реализовать работу с журналами или сложное преобразование данных в скриптах и программах, или о расширении способностей самого Log Parser, скажем, за счет поддержки новых источников или приемников. Главное, что хотелось бы донести до читателей, – Log Parser действительно упрощает работу IТ-специалистов, связанную с мониторингом систем, и дает возможность создавать гибкие масштабируемые решения за время, не сравнимое с тем, которое требуется на ежедневный мониторинг различных журналов вручную или на настройку и изучение разных сторонних программных продуктов и, тем более, на их замену в случае отсутствия каких-то нужных функций. Все это становится особенно актуальным при необходимости сопровождения большого количества удаленных систем, если доступ к ним ограничен только командной строкой или Web-интерфейсом. Автор сам применяет Log Parser для мониторинга около 50 серверов, используя статический Web-интерфейс для отображения наиболее критичных показателей систем и специально разработанный Web-сервис для удаленного выполнения более сложных запросов. Примеры подобных решений также можно найти на уже упоминавшемся сайте сообщества пользователей Log Parser.

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

+33
голоса

Напечатать Отправить другу

Читайте также

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT