Я пытаюсь проанализировать FrontDoorWebApplicationFirewallLog, в котором есть столбец AdditionalFields, как описано ниже. Я подумал, что могу запустить mv-expand, а затем оценить bag_unpack для разбора этого столбца. Однако mv-expand не влияет на столбец details_matches, он просто возвращает исходный ввод. Я бы хотел, чтобы каждая строка JSON разбивалась на отдельную строку. Как этого добиться?
datatable(Column: string) [
'{\"socketIP\":\"1.1.1.6\",\"details_matches\":\"[\\r\\n {\\r\\n \\\"matchVariableName\\\": \\\"CookieValue:search.settings.breadcrumb\\\",\\r\\n \\\"matchVariableValue\\\": \\\"[{\\\\\\\"ownerId\\\\\\\":null,\\\\\\\"folderId\\\\\\\":null,\\\\\\\"folderName\\\\\\\":\\\\\\\"Saved Settings\\\\\\\",\\\\\\\"searchLevel\\\\\\\":0,\\\\\\\"isSubFolderForMcApp\\\\\\\":false},{\\\\\\\"ownerId\\\\\\\":60409,\\\\\\\"folderId\\\\\\\":29193,\\\\\\\"folderName\\\\\\\":\\\\\\\"My saved settings\\\\\\\",\\\\\\\"searchLevel\\\\\\\":0,\\\\\\\"isSubFolderForMcApp\\\\\\\":false}]\\\"\\r\\n },\\r\\n {\\r\\n \\\"matchVariableName\\\": \\\"CookieValue:user.trail\\\",\\r\\n \\\"matchVariableValue\\\": \\\"[{\\\\\\\"url\\\\\\\":\\\\\\\"pletion\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 07:09:00 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"Completion\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 07:09:04 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"rojectslixx\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:19:51 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"67\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:19:59 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"913384\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:20:04 GMT+0100 (Central European Standard Time)\\\\\\\"}]\\\"\\r\\n }\\r\\n]\",\"details_msg\":\"Detects MySQL comment-/space-obfuscated injections and backtick termination\"}'
]
| extend Column_d = todynamic(Column)
| extend socketIp_s = Column_d.socketIP
| extend details_msg = Column_d.details_msg
| extend details_matches = Column_d.details_matches
| project socketIp_s, details_matches, details_msg, Column_d
изменить: на вопрос теперь ответил Дэвид. Еще бы знать, почему
| extend Column_d = todynamic(Column)
| extend details_matches = Column_d.details_matches
| mv-expand details_matches
не влияет на столбец details_matches, в то время как ответ ниже влияет. Это почему?
Спасибо, это объясняет!
datatable(Column: string) [
'{\"socketIP\":\"1.1.1.6\",\"details_matches\":\"[\\r\\n {\\r\\n \\\"matchVariableName\\\": \\\"CookieValue:search.settings.breadcrumb\\\",\\r\\n \\\"matchVariableValue\\\": \\\"[{\\\\\\\"ownerId\\\\\\\":null,\\\\\\\"folderId\\\\\\\":null,\\\\\\\"folderName\\\\\\\":\\\\\\\"Saved Settings\\\\\\\",\\\\\\\"searchLevel\\\\\\\":0,\\\\\\\"isSubFolderForMcApp\\\\\\\":false},{\\\\\\\"ownerId\\\\\\\":60409,\\\\\\\"folderId\\\\\\\":29193,\\\\\\\"folderName\\\\\\\":\\\\\\\"My saved settings\\\\\\\",\\\\\\\"searchLevel\\\\\\\":0,\\\\\\\"isSubFolderForMcApp\\\\\\\":false}]\\\"\\r\\n },\\r\\n {\\r\\n \\\"matchVariableName\\\": \\\"CookieValue:user.trail\\\",\\r\\n \\\"matchVariableValue\\\": \\\"[{\\\\\\\"url\\\\\\\":\\\\\\\"pletion\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 07:09:00 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"Completion\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 07:09:04 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"rojectslixx\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:19:51 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"67\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:19:59 GMT+0100 (Central European Standard Time)\\\\\\\"},{\\\\\\\"url\\\\\\\":\\\\\\\"913384\\\\\\\",\\\\\\\"referrer\\\\\\\":\\\\\\\"Last page\\\\\\\",\\\\\\\"time\\\\\\\":\\\\\\\"Tue Nov 29 2022 08:20:04 GMT+0100 (Central European Standard Time)\\\\\\\"}]\\\"\\r\\n }\\r\\n]\",\"details_msg\":\"Detects MySQL comment-/space-obfuscated injections and backtick termination\"}'
]
| extend Column = parse_json(Column)
| evaluate bag_unpack(Column)
| mv-expand parse_json(details_matches)
| evaluate bag_unpack(details_matches)
| mv-expand parse_json(matchVariableValue)
| evaluate bag_unpack(matchVariableValue)
Спасибо! Я не совсем понимаю разницу между попыткой mv-expand динамического значения, как я это сделал, и mv-expand строки, для которой вы запускаете parse_json. Могли бы вы объяснить?
Я не знаю, что вы пробовали. Вы можете добавить код к своему вопросу, и я прокомментирую.
(1) Значение, извлеченное из динамического поля, также является динамическим. (2) parse_json работает со строками. Учитывая динамическое значение в качестве входных данных, он возвращает это значение как есть. (1) + (2) ==>
mv-expand parse_json(tostring(details_matches))