Azure Log Analytics (также известная как OMS) использует Kusto QL. Мы отправляем наши журналы IIS из контейнеров докеров в Log Analytics, и я намерен использовать следующий запрос для анализа записей:
ContainerLog
| extend fields = split(LogEntry, ' ')
| extend appname = tostring(fields[16])
| extend path = tostring(fields[4])
Вот две разные записи, которые я проанализировал вручную:
date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken x-forwarded-for container-app
2019-11-29 17:37:49 ddd.dd.dd.ddd GET /ping.aspx - 80 - dd.dd.ddd.d Go-http-client/1.1 - 200 0 0 12 dd.dd.ddd.d OurCustomValue
2019-11-29 17:33:36 ddd.dd.dd.ddd GET /js/js_v4/jquery-functions.js v=26.35.0.0 80 7vgnwjAzOsKcUpseaPykcQ-- dd.dd.ddd.d Mozilla/5.0+(Windows+NT+10.0 +Win64 +x64 +rv:70.0)+Gecko/20100101+Firefox/70.0 https://site.domain.com/ 200 0 0 14 dd.ddd.dd.dd:55001,+dd.dd.ddd.d OurCustomValue
Проблема в том, что поле «Пользовательский агент» может содержать пробел, который сбивает с толку синтаксический анализатор и разбивает его на другие поля. Таким образом, все индексы для полей, перечисленных после User-Agent, будут отключены. Например, последнее поле для 2-й записи будет не с индексом 16 (начиная с 0), а с индексом 19.
Есть ли лучший способ проанализировать эти журналы, скажем, путем определения количества или типов полей?