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
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")
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
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(use columnifexists em vez de column_ifexists)
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
- Funções Bitwise
- Funções de conversão
- Funções DateTime e TimeSpan
- Funções dinâmicas e de matriz
- Funções matemáticas
- Funções condicionais
- Funções de cadeia de caracteres
base64_encodestring
(use base64_encodestring em vez de base64_encode_tostring)base64_decodestring
(use base64_decodestring em vez de base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- Funções de tipo
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.