使用包含 XML 的数据字段来汇总日志分析中的 windows 事件

Using XML-contained data fields for summarizing windows events in log analytics

在 Azure Log Analytics 中,我正在尝试分析任务计划程序创建的事件并按已执行任务的名称对它们进行分组。

基本查询如下所示

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

我正在努力完成按计划任务名称对结果进行分组的任务,因为这些名称包含在 XML 编码的数据中 ParameterXMLEventData 属性中具有以下格式:

参数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']
)

上面的查询returns下面的table:

| id | TaskName              |
|----|-----------------------|
| 1  | \MyScheduledTasksName |
| 2  | \MyOtherTask          |