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

时间:2019-06-13 12:37:50

标签: azure-log-analytics kusto

在Azure Log Analytics中,我试图分析由Task Scheduler创建的事件,并按执行任务的名称对它们进行分组。

基本查询如下

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

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

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 个答案:

答案 0 :(得分:2)

这是将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 :(得分:1)

似乎您正在寻找parse_xml()函数:https://docs.microsoft.com/en-us/azure/kusto/query/parse-xmlfunction