Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразования в 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":{}}')
Следующие функции доступны только в преобразованиях. Их нельзя использовать в других запросах журнала.
Учитывая строку, содержащую сообщение 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
Учитывая, что поддерживается строка, содержащая IP-адрес (IPv4 и IPv6), geo_location
функция возвращает приблизительное географическое расположение, включая следующие атрибуты:
- Страна
- Регион
- Государство
- Город
- Широта
- Долгота
| extend GeoLocation = geo_location("1.0.0.5")
Важно!
Из-за характера службы геолокации IP, используемой этой функцией, она может привести к задержке приема данных при чрезмерном использовании. Соблюдайте осторожность при использовании этой функции более нескольких раз на преобразование.
Правой стороной 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_encodestring вместо base64_encode_tostring) -
base64_decodestring
(используйте base64_decodestring вместо base64_decode_tostring) countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
-
Типовые функции
При необходимости используйте кавычки для идентификаторов.
- Создайте правило сбора данных и привязку к нему из виртуальной машины с помощью агента Azure Monitor.