Прочитать на английском

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


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

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

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

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

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

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

Команда parse в процессе преобразования ограничена десятью столбцами на каждое выражение из соображений производительности. Если для преобразования требуется обработка более 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 сообщения в динамический объект ключ/значение. Точка с запятой — это зарезервированный символ, который необходимо заменить перед передачей необработанного сообщения в метод, как показано в примере.

| 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)
    

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

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

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

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

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

Дальнейшие действия