Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразования в 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
geo_location
Функция geo_location возвращает приблизительное географическое расположение для IP-адреса (поддерживаются IPv4 и IPv6), включая следующие атрибуты:
- Страна
- Регион
- Государство
- Город
- Широта
- Долгота
| extend GeoLocation = geo_location("1.0.0.5")
Это важно
Эта функция вызывает внешнюю службу геолокации IP-адресов, которая может добавить задержку приема данных. Используйте его с разреженным образом— не более нескольких раз за преобразование.
Поддерживаемые утверждения
Инструкция let
Правой стороной let может быть скалярное выражение, табличное выражение или определяемая пользователем функция. Поддерживаются только определяемые пользователем функции с скалярными аргументами.
Операторы табличных выражений
Единственными поддерживаемыми источниками данных для инструкции KQL в преобразовании являются:
source, представляющий исходные данные. Рассмотрим пример.
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Messageprintоператор, который всегда создает одну строку. Рассмотрим пример.print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Поддерживаемые табличные операторы
extendprojectprintwhereparseproject-awayproject-renamedatatable-
columnifexists(используйтеcolumnifexistsвместоcolumn_ifexists)
Поддерживаемые скалярные операторы
Поддерживаются все числовые операторы.
Поддерживаются все арифметические операторы DateTime и TimeSpan.
Поддерживаются перечисленные ниже строковые операторы.
==!==~!~contains!containscontains_cs!contains_cshas!hashas_cs!has_csstartswith!startswithstartswith_cs!startswith_csendswith!endswithendswith_cs!endswith_csmatches regexin!in
Поддерживаются перечисленные ниже битовые операторы.
binary_and()binary_or()binary_xor()binary_not()binary_shift_left()binary_shift_right()
Скалярные функции
Битовые функции
Функции преобразования
Функции DateTime и TimeSpan
Динамические функции и массивы
Математические функции
Условные функции
Строковые функции
-
base64_encodestring(используйтеbase64_encodestringвместоbase64_encode_tostring) -
base64_decodestring(используйтеbase64_decodestringвместоbase64_decode_tostring) countofextractextract_allindexofisemptyisnotemptyparse_json-
replace(используйтеreplaceвместоreplace_string) splitstrcatstrcat_delimstrlensubstringtolowertoupperhash_sha256
-
Типовые функции
Заключение идентификаторов в кавычки
При необходимости используйте кавычки для идентификаторов.
Связанный контент
- Создайте правило сбора данных и привязку к нему из виртуальной машины с помощью агента Azure Monitor.