Поддерживаемые функции 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
geo_location
Учитывая, что поддерживается строка, содержащая IP-адрес (IPv4 и IPv6), geo_location
функция возвращает приблизительное географическое расположение, включая следующие атрибуты:
- Страна/регион
- Область/регион
- Штат
- Город
- Широта
- Долгота
| extend GeoLocation = geo_location("1.0.0.5")
Внимание
Из-за характера службы геолокации 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)
Поддерживаемые табличные операторы
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(используйте columnifexists вместо column_ifexists)
Поддерживаемые скалярные операторы
- Поддерживаются все числовые операторы.
- Поддерживаются все арифметические операторы DateTime и TimeSpan.
- Поддерживаются перечисленные ниже строковые операторы.
- `=
!=
=~
!~
contains
!contains
contains_cs
!contains_cs
has
!has
has_cs
!has_cs
startswith
!startswith
startswith_cs
!startswith_cs
endswith
!endswith
endswith_cs
!endswith_cs
matches regex
in
!in
- Поддерживаются перечисленные ниже битовые операторы.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
Скалярные функции
- Побитовые функции
- Функции преобразования
- Функции DateTime и TimeSpan
- Динамические и массивные функции
- Математические функции
- Условные функции
- Строковые функции
base64_encodestring
(вместо base64_encode_tostring используйте base64_encodestring)base64_decodestring
(используйте base64_decodestring вместо base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- Функции типа
Заключение идентификаторов в кавычки
При необходимости используйте заключение идентификаторов в кавычки.
Следующие шаги
- Создайте правило сбора данных и привязку к нему из виртуальной машины с помощью агента Azure Monitor.