Características de KQL admitidas en las transformaciones de Azure Monitor
Las transformaciones de Azure Monitor permiten ejecutar una consulta KQL en los datos entrantes de Azure Monitor para filtrar o modificar los datos entrantes antes de almacenarlos en un área de trabajo de Log Analytics. En este artículo, se detallan las consideraciones sobre KQL y las características admitidas en las consultas de transformación, además de los operadores especiales que solo están disponibles en las transformaciones.
Puesto que las transformaciones se aplican a cada registro individualmente, no pueden usar ningún operador de KQL que actúe en varios registros. Solo se admiten los operadores que adoptan una sola fila como entrada y que no devuelven más de una fila. Por ejemplo, no se admite summarize, ya que resume varios registros.
Solo se admiten en las transformaciones los operadores enumerados en este artículo. No se admiten en las transformaciones otros operadores que se puedan usar en otras consultas de registro.
Consideraciones especiales
Comando parse
El comando parse de una transformación está limitado a 10 columnas por instrucción por motivos de rendimiento. Si la transformación requiere analizar más de 10 columnas, divida esto en varias instrucciones, tal y como se describe en Dividir comandos parse grandes.
Control de datos dinámicos
Tenga en cuenta la siguiente entrada con datos dinámicos:
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
Para acceder a las propiedades de AdditionalContext, defínala como una columna con tipo dinámico en el flujo de entrada:
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
El contenido de la columna AdditionalContext ahora se puede analizar y usar en la transformación de KQL:
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
Literales dinámicos
Use la función parse_json
para controlar literales dinámicos.
Por ejemplo, las siguientes consultas proporcionan la misma funcionalidad:
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":{}}')
Funciones especiales
Las siguientes funciones solo están disponibles en las transformaciones. No se pueden usar en otras consultas de registro.
parse_cef_dictionary
Dada una cadena que contiene un mensaje CEF, parse_cef_dictionary
analiza la propiedad Extension del mensaje en un objeto clave-valor dinámico. El punto y coma es un carácter reservado que se debe reemplazar antes de pasar el mensaje sin formato al método, como se muestra en el ejemplo siguiente.
| 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
Dada una cadena que contiene la dirección IP (se admiten IPv4 e IPv6), geo_location
la función devuelve una ubicación geográfica aproximada, incluidos los atributos siguientes:
- Country
- Region
- Estado
- Ciudad
- Latitude
- Longitude
| extend GeoLocation = geo_location("1.0.0.5")
Importante
Debido a la naturaleza del servicio de geolocalización IP utilizado por esta función, puede introducir latencia de ingesta de datos si se usa excesivamente. Tenga cuidado al usar esta función más de varias veces por transformación.
Instrucciones admitidas
Instrucción Let
La parte situada a la derecha de let
puede ser una expresión escalar, una expresión tabular o una función definida por el usuario. Solo se admiten funciones definidas por el usuario con argumentos escalares.
Instrucciones de expresiones tabulares
Los únicos orígenes de datos admitidos para la instrucción de KQL en una transformación son los siguientes:
source, que representa los datos de origen. Por ejemplo:
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Message
Operador
print
, que siempre genera una sola fila. Por ejemplo:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Operadores tabulares compatibles
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(use columnifexists en lugar de column_ifexists)
Operadores escalares admitidos
- Se admiten todos los operadores numéricos.
- Se admiten todos los operadores aritméticos Datetime y Timespan.
- Se admiten los siguientes operadores de cadena.
- `=
!=
=~
!~
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
- Se admiten los siguientes operadores de bit a bit.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
Funciones escalares
- Funciones bit a bit
- Funciones de conversión
- Funciones DateTime y TimeSpan
- Funciones dinámicas y de matriz
- Funciones matemáticas
- Funciones condicionales
- Funciones de cadena
base64_encodestring
(use base64_encodestring en lugar de base64_encode_tostring)base64_decodestring
(use base64_decodestring en lugar de base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- Funciones de tipo
Comillas de identificador
Use comillas de identificador según sea necesario.
Pasos siguientes
- Cree una regla de recopilación de datos y una asociación a ella desde una máquina virtual mediante el agente de Azure Monitor.