Compartir vía


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

Ejemplo de salida de la función parse_cef_dictionary.

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")

Recorte de pantalla de la salida de ejemplo de la función geo_location.

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

Operadores escalares admitidos

Funciones escalares

Comillas de identificador

Use comillas de identificador según sea necesario.

Pasos siguientes