Compartilhar via


Recursos KQL suportados nas transformações do Azure Monitor

As transformações no Azure Monitor permitem que você execute uma consulta KQL em relação aos dados recebidos do Azure Monitor para filtrar ou modificar os dados de entrada antes que eles sejam armazenados em um espaço de trabalho do Log Analytics. Este artigo detalha as considerações do KQL e os recursos suportados em consultas de transformação, além de operadores especiais que só estão disponíveis em transformações.

Como as transformações são aplicadas a cada registro individualmente, eles não podem usar nenhum operador KQL que atue em vários registros. Somente operadores que usam uma única linha como entrada e não retornam mais de uma linha são suportados. Por exemplo, resumir não é suportado, pois resume vários registros.

Somente os operadores listados neste artigo são suportados em transformações. Quaisquer outros operadores que possam ser usados em outras consultas de log não são suportados em transformações.

Considerações especiais

Comando Analisar

O comando parse em uma transformação é limitado a 10 colunas por instrução por motivos de desempenho. Se sua transformação exigir a análise de mais de 10 colunas, divida-a em várias instruções, conforme descrito em Dividir comandos de análise grande.

Tratamento de dados dinâmicos

Considere a seguinte entrada com dados dinâmicos:

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

Para acessar as propriedades em AdditionalContext, defina-a como coluna de tipo dinâmico no fluxo de entrada:

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

O conteúdo da coluna AdditionalContext agora pode ser analisado e usado na transformação KQL:

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

Literais dinâmicos

Use a parse_json função para manipular literais dinâmicos.

Por exemplo, as seguintes consultas fornecem a mesma funcionalidade:

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":{}}')

Funções especiais

As funções a seguir só estão disponíveis em transformações. Eles não podem ser usados em outras consultas de log.

parse_cef_dictionary

Dada uma cadeia de caracteres que contém uma mensagem CEF, parse_cef_dictionary analisa a propriedade Extension da mensagem em um objeto de chave/valor dinâmico. Ponto e vírgula é um caractere reservado que deve ser substituído antes de passar a mensagem bruta para o método, como mostrado no exemplo.

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

Saída de amostra de parse_cef_dictionary função.

geo_location

Dada uma cadeia de caracteres contendo endereço IP (IPv4 e IPv6 são suportados), geo_location a função retorna a localização geográfica aproximada, incluindo os seguintes atributos:

  • País
  • País/Região
  • Estado
  • City
  • Latitude
  • Longitude
| extend GeoLocation = geo_location("1.0.0.5")

Captura de tela da saída de amostra de geo_location função.

Importante

Devido à natureza do serviço de geolocalização IP utilizado por esta função, ele pode introduzir latência de ingestão de dados se usado excessivamente. Tenha cuidado ao usar esta função mais de várias vezes por transformação.

Declarações apoiadas

Instrução let

O lado direito do let pode ser uma expressão escalar, uma expressão tabular ou uma função definida pelo usuário. Somente funções definidas pelo usuário com argumentos escalares são suportadas.

Instruções de expressão tabular

As únicas fontes de dados suportadas para a instrução KQL em uma transformação são as seguintes:

  • source, que representa os dados de origem. Por exemplo:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print operador, que sempre produz uma única linha. Por exemplo:

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

Operadores tabulares suportados

Operadores escalares suportados

  • Todos os operadores numéricos são suportados.
  • Todos os operadores aritméticos Datetime e Timespan são suportados.
  • Os seguintes operadores String são suportados.
    • `=
    • !=
    • =~
    • !~
    • 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
  • Os seguintes operadores Bitwise são suportados.
    • binary_and()
    • binary_or()
    • binary_xor()
    • binary_not()
    • binary_shift_left()
    • binary_shift_right()

Funções escalares

Citação do identificador

Use a cotação do identificador conforme necessário.

Próximos passos

  • Crie uma regra de coleta de dados e uma associação a ela a partir de uma máquina virtual usando o agente do Azure Monitor.