В 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
, которые имеют следующие форматы:
ПараметрXML:
<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>
Данные события:
<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, чтобы я мог использовать его для группировки/обобщения в канале?
Кажется, вы ищете функцию parse_xml(): https://docs.microsoft.com/en-us/azure/kusto/query/parse-xmlfunction
вот пример использования 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 |
Спасибо, это сработало. Последующий
| summarize count() by tostring(TaskName)
дал мне результат, который я искал.