Функции KQL, поддерживаемые в преобразованиях Azure Monitor

Преобразования в Azure Monitor позволяют выполнять запрос KQL к входящим данным Azure Monitor для фильтрации или изменения входящих данных, прежде чем он хранится в рабочей области Log Analytics. В этой статье подробно рассматриваются вопросы KQL и поддерживаемые функции в запросах преобразования, а также специальные операторы, доступные только в преобразованиях.

Так как преобразования применяются к каждой записи по отдельности, они не могут использовать операторы KQL, действующие на нескольких записях. Поддерживаются только те операторы, которые принимают одну строку в качестве входных данных и возвращают не более одной строки. Например, функция summarize не поддерживается, поскольку она суммирует несколько записей.

В преобразованиях поддерживаются только операторы, перечисленные в этой статье.

Примечание.

Для многоэтапных преобразований (предварительная версия) функции KQL, описанные в этой статье, применяются к transform.KQL обработчику и свойству transformKql в потоках данных. Другие типы процессоров, такие как filter.Basic, parse.JsonPathи aggregate.Basic используйте декларативную конфигурацию JSON, а не KQL. Дополнительные сведения см. в структуре DCR — типы процессоров .

Особые соображения

Оператор синтаксического анализа

Оператор синтаксического анализа в преобразовании ограничен 10 столбцами по причинам производительности. Если для преобразования требуется обработка более 10 столбцов, разделите его на несколько операторов, как описано в разделе "Разбиение больших команд синтаксического анализа".

Это важно

parse kind=regex При преобразовании регулярное выражение должно соответствовать всей входной строке для заполненных столбцов синтаксического анализа. Это поведение отличается от Log Analytics и запросов Microsoft Sentinel, где частичное совпадение по-прежнему заполняет проанализированные поля. В результате инструкция, которая работает в запросе Log Analytics или Sentinel, parse kind=regex может не заполнять поля при преобразовании.

Чтобы выполнить parse kind=regex инструкцию в преобразовании, убедитесь, что учетные записи шаблона для полной входной строки. Добавьте следящее совпадение после последнего захваченного столбца, чтобы выражение расширялось до конца строки. Например, добавление @'\sby' * к шаблону расширяет совпадение после последнего поля и применяет полное соответствие:

source
| parse kind=regex SyslogMessage with @'^%FTD-4-106023:\s+Deny\s+' Protocol: string @'\s+src\s+' SrcInterface: string @':' SrcIP: string @'\/' SrcPort: long @'\s+dst\s+' DstInterface: string @':' DstIP: string @'\/' DstPort: long @'\sby' *

Кроме того, преобразуйте инструкцию в чистый синтаксический анализ с parse оператором, который также обеспечивает полное соответствие в преобразованиях.

Обработка динамических данных

Рассмотрим следующие входные данные с использованием динамических данных:

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

Чтобы получить доступ к свойствам в AdditionalContext, определите его как столбец динамического типа в входном потоке:

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

Теперь содержимое столбца AdditionalContext можно проанализировать и использовать в преобразовании KQL:

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

Динамические литералы

Используйте функцию parse_json для обработки динамических литералы.

Например, следующие запросы имеют одинаковую функциональность.

print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')

Специальные функции

Следующие функции доступны только в преобразованиях. Их нельзя использовать в других запросах журнала.

parse_cef_dictionary

Функция parse_cef_dictionary анализирует свойство Extension сообщения CEF в динамический объект key/value. Точка с запятой — это зарезервированный символ, который необходимо заменить перед передачей необработанного сообщения в метод, как показано в примере.

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

Таблица, показывающая выходные данные словаря CEF с помощью TimeGenerated, cefMessage и синтаксического анализа столбцов расширения.

geo_location

Функция geo_location возвращает приблизительное географическое расположение для IP-адреса (поддерживаются IPv4 и IPv6), включая следующие атрибуты:

  • Страна
  • Регион
  • Государство
  • Город
  • Широта
  • Долгота
| extend GeoLocation = geo_location("1.0.0.5")

Таблица, показывающая geo_location выходные данные с столбцами страны, региона, штата, города, широты и долготы.

Это важно

Эта функция вызывает внешнюю службу геолокации IP-адресов, которая может добавить задержку приема данных. Используйте его с разреженным образом— не более нескольких раз за преобразование.

Поддерживаемые утверждения

Инструкция let

Правой стороной let может быть скалярное выражение, табличное выражение или определяемая пользователем функция. Поддерживаются только определяемые пользователем функции с скалярными аргументами.

Операторы табличных выражений

Единственными поддерживаемыми источниками данных для инструкции KQL в преобразовании являются:

  • source, представляющий исходные данные. Рассмотрим пример.

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print оператор, который всегда создает одну строку. Рассмотрим пример.

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

Поддерживаемые табличные операторы

Поддерживаемые скалярные операторы

Скалярные функции

Заключение идентификаторов в кавычки

При необходимости используйте кавычки для идентификаторов.