Использование содержащихся в XML полей данных для суммирования событий окон в журнальной аналитике - PullRequest
1 голос
/ 13 июня 2019

В Azure Log Analytics я пытаюсь проанализировать события, созданные планировщиком задач, и сгруппировать их по имени выполненной задачи.

Базовый запрос выглядит как

Event 
| where Source == "Microsoft-Windows-TaskScheduler" 
and TimeGenerated > ago(24h) 
and EventLog == "Microsoft-Windows-TaskScheduler/Operational" 
and EventID == 201

Яборется с задачей группировки результатов по именам запланированных задач, так как имена содержатся в XML-кодированных данных в атрибутах ParameterXML и EventData, которые имеют следующие форматы:

ParamterXML:

<Param>\MyScheduledTasksName</Param>
<Param>{1F1893C6-0696-430C-9738-50B068DDE37B}</Param>
<Param>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Param> 
<Param>0</Param>
<Param>9684</Param>

EventData:

<DataItem type="System.XmlData" time="2019-06-13T11:18:45.4806563+02:00" sourceHealthServiceId="D4165670-2EBA-67E0-FF6B-1D838007CE5B">
  <EventData Name="ActionSuccess" xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <Data Name="TaskName">\MyScheduledTasksName</Data>
    <Data Name="TaskInstanceId">{1F1893C6-0696-430C-9738-50B068DDE37B}</Data>
    <Data Name="ActionName">C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Data>
    <Data Name="ResultCode">0</Data><Data Name="EnginePID">9684</Data> 
 </EventData>
</DataItem>

Как мне выполнить синтаксический анализ имени задачи XML, чтобы использовать его для группировки / суммирования втруба?

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Вот пример использования parse_xml() в сочетании с mv-apply для доступа только к определенным элементам в полезной нагрузке XML, например, TaskName в этом случае:

datatable(id:int, EventData:string)
[
    1, '<DataItem type="System.XmlData" time="2019-06-13T11:18:45.4806563+02:00" sourceHealthServiceId="D4165670-2EBA-67E0-FF6B-1D838007CE5B">\n  <EventData Name="ActionSuccess" xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\n    <Data Name="TaskName">\\MyScheduledTasksName</Data>\n    <Data Name="TaskInstanceId">{1F1893C6-0696-430C-9738-50B068DDE37B}</Data>\n    <Data Name="ActionName">C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe</Data>\n    <Data Name="ResultCode">0</Data><Data Name="EnginePID">9684</Data>\n </EventData>\n</DataItem>',
    2, '<DataItem type="System.XmlData" time="2019-06-13T11:18:45.4806563+02:00" sourceHealthServiceId="D4165670-2EBA-67E0-FF6B-1D838007CE5B">\n  <EventData Name="ActionSuccess" xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\n    <Data Name="TaskName">\\MyOtherTask</Data>\n    <Data Name="TaskInstanceId">{1F1893C6-0696-430C-9738-50B068DDE37B}</Data>\n    <Data Name="ActionName">C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe</Data>\n    <Data Name="ResultCode">0</Data><Data Name="EnginePID">9684</Data>\n </EventData>\n</DataItem>'
]
| mv-apply EventData = parse_xml(EventData).DataItem.EventData.Data on 
(
    where EventData['@Name'] ==  'TaskName'
    | project TaskName = EventData['#text']
)

Приведенный выше запрос возвращает следующеестол:

| id | TaskName              |
|----|-----------------------|
| 1  | \MyScheduledTasksName |
| 2  | \MyOtherTask          |
1 голос
/ 13 июня 2019

Похоже, вы ищете функцию parse_xml (): https://docs.microsoft.com/en-us/azure/kusto/query/parse-xmlfunction

...