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.

Note

En el caso de las transformaciones de varias fases (versión preliminar), las características de KQL descritas en este artículo se aplican al transform.KQL procesador y a la transformKql propiedad en flujos de datos. Otros tipos de procesador, como filter.Basic, parse.JsonPathy aggregate.Basic usan la configuración JSON declarativa en lugar de KQL. Consulte Estructura dcR: tipos de procesador para obtener más información.

Consideraciones especiales

Operador Parse

El operador de análisis de una transformación está limitado a 10 columnas por instrucción por motivos de rendimiento. Si la transformación requiere parsear más de 10 columnas, divida la transformación en múltiples instrucciones, tal y como se describe en Dividir comandos de parseo 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

La parse_cef_dictionary función analiza la propiedad Extension de un mensaje CEF en un objeto de clave/valor dinámico. 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.

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

Tabla que muestra la salida del diccionario CEF analizado con columnas de extensión TimeGenerated, cefMessage y analizadas.

geo_location

La geo_location función devuelve una ubicación geográfica aproximada para una dirección IP (se admiten IPv4 e IPv6), incluidos los atributos siguientes:

  • País
  • Región
  • Estado
  • Ciudad
  • Latitud
  • Longitud
| extend GeoLocation = geo_location("1.0.0.5")

Tabla que muestra geo_location salida con columnas de país, región, estado, ciudad, latitud y longitud.

Importante

Esta función llama a un servicio de geolocalización IP externo, que podría agregar latencia de ingesta de datos. Úsela con moderación: no más de unas pocas 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 KQL en una transformación son:

  • 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

Operadores escalares admitidos

Funciones escalares

Comillas de identificador

Use comillas de identificador según sea necesario.