Поделиться через


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

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

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

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

Примечания

Команда синтаксического анализа

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

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

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

{
    "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

Если строка, содержащая сообщение CEF, parse_cef_dictionary анализирует свойство Extension сообщения в динамический объект 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

Пример выходных данных функции parse_cef_dictionary.

geo_location

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

  • Страна/регион
  • Область/регион
  • Штат
  • Город
  • Широта
  • Долгота
| 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)
    

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

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

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

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

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

Следующие шаги