Превращать серии в столбцы в Kusto / Azure Data Explorer - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь превратить данные событий xml журнала событий Windows в журналах Azure (kusto) в столбцы, поэтому, учитывая массив EventData в xml, возвращаемый parse_xml (), как мне превратить его в столбцы?

Я попробовал mvexplode, который дал мне строки (серии), но затем я хотел бы превратить их в столбцы, где col name - это атрибут «Name» в теге, а value - свойство text.

WindowsЖурнал событий xml ниже для справки

<EventData xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <Data Name="DomainPolicyChanged">Password Policy</Data> <Data Name="DomainName">XXX</Data> <Data Name="DomainSid">S-1-5-21-....</Data> <Data Name="SubjectUserSid">S-1-5-18</Data> <Data Name="SubjectUserName">SRV-XX-001$</Data> <Data Name="SubjectDomainName">DOMAIN</Data> <Data Name="SubjectLogonId">0x3e7</Data> <Data Name="PrivilegeList">-</Data> <Data Name="MinPasswordAge"></Data> <Data Name="MaxPasswordAge"></Data> <Data Name="ForceLogoff"></Data> <Data Name="LockoutThreshold">耠</Data> <Data Name="LockoutObservationWindow"></Data> <Data Name="LockoutDuration"></Data> <Data Name="PasswordProperties">耠-</Data> <Data Name="MinPasswordLength">-</Data> <Data Name="PasswordHistoryLength">-</Data> <Data Name="MachineAccountQuota">-</Data> <Data Name="MixedDomainMode">1</Data> <Data Name="DomainBehaviorVersion">8</Data> <Data Name="OemInformation">12</Data> </EventData>

1 Ответ

0 голосов
/ 20 декабря 2018

Может сработать следующий подход (в зависимости от того, как вы на самом деле планируете запрашивать данные, может быть более эффективный способ - поэтому, если вы можете поделиться примером запроса, это может быть полезно)

datatable(someColumn:string, xmlValue:string)
["hello", '<EventData xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\r\n'
  '<Data Name="DomainBehaviorVersion">8</Data>\r\n'
  '<Data Name="OemInformation">12</Data>\r\n'
  '<Data Name="DomainPolicyChanged">Password Policy</Data>\r\n'
  '<Data Name="DomainName">XXX</Data>\r\n'
  '<Data Name="DomainSid">S-1-5-21-....</Data>\r\n'
  '<Data Name="SubjectUserSid">S-1-5-18</Data>\r\n'
  '<Data Name="SubjectUserName">SRV-XX-001$</Data>\r\n'
  '<Data Name="SubjectDomainName">DOMAIN</Data>\r\n'
  '<Data Name="SubjectLogonId">0x3e7</Data>\r\n'
  '<Data Name="PrivilegeList">-</Data>\r\n'
  '<Data Name="MinPasswordAge"></Data>\r\n'
  '<Data Name="MaxPasswordAge"></Data>\r\n'
  '<Data Name="ForceLogoff"></Data>\r\n'
  '<Data Name="LockoutThreshold">耠</Data>\r\n'
  '<Data Name="LockoutObservationWindow"></Data>\r\n'
  '<Data Name="LockoutDuration"></Data>\r\n'
  '<Data Name="PasswordProperties">耠-</Data>\r\n'
  '<Data Name="MinPasswordLength">-</Data>\r\n'
  '<Data Name="PasswordHistoryLength">-</Data>\r\n'
  '<Data Name="MachineAccountQuota">-</Data>\r\n'
  '<Data Name="MixedDomainMode">1</Data>\r\n'
'</EventData>',
"world", '<EventData xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\r\n'
  '<Data Name="DomainBehaviorVersion">876543</Data>\r\n'
  '<Data Name="OemInformation">12345</Data>\r\n'
'</EventData>'
]
| extend parsed = parse_xml(xmlValue).EventData.Data
| mvexpand parsed
| summarize d = make_bag(pack(tostring(parsed['@Name']), parsed['#text'])) by someColumn
| evaluate bag_unpack(d)

Документы для операторов / функций, используемых в этом примере:

...