Truques e dicas do Splunk para Kusto

Este artigo destina-se a ajudar os utilizadores que estão familiarizados com o Splunk a saber que Linguagem de Pesquisa Kusto escrever consultas de registo com o Kusto. As comparações diretas são feitas entre as duas para realçar as principais diferenças e semelhanças, para que possa basear-se nos seus conhecimentos existentes.

Estrutura e conceitos

A tabela seguinte compara conceitos e estruturas de dados entre os registos do Splunk e do Kusto:

Conceito Splunk Kusto Comentário
unidade de implementação cluster cluster O Kusto permite consultas arbitrárias entre clusters. Splunk não.
caches de dados registos políticas de colocação em cache e retenção Controla o período e o nível de colocação em cache dos dados. Esta definição afeta diretamente o desempenho das consultas e o custo da implementação.
partição lógica de dados índice base de dados Permite a separação lógica dos dados. Ambas as implementações permitem uniões e associação a estas partições.
metadados de eventos estruturados N/D table O Splunk não expõe o conceito de metadados de eventos à linguagem de pesquisa. Os registos do Kusto têm o conceito de uma tabela, que tem colunas. Cada instância de evento é mapeada para uma linha.
gravar evento row Apenas alteração de terminologia.
atributo record campo coluna No Kusto, esta definição é predefinida como parte da estrutura da tabela. Em Splunk, cada evento tem o seu próprio conjunto de campos.
tipos tipo de dados tipo de dados Os tipos de dados kusto são mais explícitos porque estão definidos nas colunas. Ambos têm a capacidade de trabalhar dinamicamente com tipos de dados e um conjunto aproximadamente equivalente de tipos de dados, incluindo suporte JSON.
consulta e pesquisa pesquisar query Os conceitos são essencialmente os mesmos entre o Kusto e o Splunk.
hora de ingestão de eventos hora do sistema ingestion_time() No Splunk, cada evento obtém um carimbo de data/hora do sistema da hora em que o evento foi indexado. No Kusto, pode definir uma política denominada ingestion_time que expõe uma coluna do sistema que pode ser referenciada através da função ingestion_time( ).

Funções

A tabela seguinte especifica funções no Kusto que são equivalentes às funções splunk.

Splunk Kusto Comentário
strcat strcat() (1)
split split() (1)
if iff() (1)
tonumber todouble()
tolong()
toint()
(1)
upper
lower
toupper()
tolower()
(1)
replace replace_string()ou replace_strings()replace_regex() (1)
Embora replace as funções tomem três parâmetros em ambos os produtos, os parâmetros são diferentes.
substr substring() (1)
Tenha também em atenção que o Splunk utiliza índices baseados em um. O Kusto anota índices baseados em zero.
tolower tolower() (1)
toupper toupper() (1)
match matches regex (2)
regex matches regex Em Splunk, regex é um operador. No Kusto, é um operador relacional.
searchmatch == No Splunk, searchmatch permite procurar a cadeia exata.
random rand()
rand(n)
A função de Splunk devolve um número entre zero e 231-1. O Kusto devolve um número entre 0,0 e 1,0 ou se for fornecido um parâmetro, entre 0 e n-1.
now now() (1)
relative_time totimespan() (1)
No Kusto, o equivalente relative_time(datetimeVal, offsetVal) de Splunk é datetimeVal + totimespan(offsetVal).
Por exemplo, search | eval n=relative_time(now(), "-1d@d") torna-se ... | extend myTime = now() - totimespan("1d").

(1) No Splunk, a função é invocada com o eval operador . No Kusto, é utilizado como parte de extend ou project.
(2) No Splunk, a função é invocada com o eval operador . No Kusto, pode ser utilizado com o where operador .

Operadores

As secções seguintes dão exemplos de como utilizar diferentes operadores no Splunk e no Kusto.

Nota

Nos exemplos seguintes, o campo rule Splunk mapeia para uma tabela no Kusto e o carimbo de data/hora predefinido do Splunk mapeia para a coluna Logs Analytics ingestion_time() .

No Splunk, pode omitir a search palavra-chave e especificar uma cadeia não listada. No Kusto, tem de iniciar cada consulta com find, uma cadeia não listada é um nome de coluna e o valor de pesquisa tem de ser uma cadeia de carateres com aspas.

Produto Operador Exemplo
Splunk search search Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" earliest=-24h
Kusto find find Session.Id=="c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time()> ago(24h)

Filtro

As consultas de registo do Kusto começam a partir de um conjunto de resultados tabular no qual filter é aplicado. No Splunk, a filtragem é a operação predefinida no índice atual. Também pode utilizar o where operador no Splunk, mas não o recomendamos.

Produto Operador Exemplo
Splunk search Event.Rule="330009.2" Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" _indextime>-24h
Kusto where Office_Hub_OHubBGTaskError
| where Session_Id == "c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time() > ago(24h)

Obter n eventos ou linhas para inspeção

As consultas de registo do Kusto também suportam take como alias para limit. Em Splunk, se os resultados forem ordenados, head devolve os primeiros n resultados. No Kusto, limit não é encomendado, mas devolve as primeiras n linhas encontradas.

Produto Operador Exemplo
Splunk head Event.Rule=330009.2
| head 100
Kusto limit Office_Hub_OHubBGTaskError
| limit 100

Obter os primeiros n eventos ou linhas ordenados por um campo ou coluna

Para obter os resultados mais baixos, em Splunk, utilize tail. No Kusto, pode especificar a direção da ordenação com asc.

Produto Operador Exemplo
Splunk head Event.Rule="330009.2"
| sort Event.Sequence
| head 20
Kusto top Office_Hub_OHubBGTaskError
| top 20 by Event_Sequence

Expandir o conjunto de resultados com novos campos ou colunas

O Splunk tem uma função eval , mas não é comparável ao eval operador no Kusto. Tanto o eval operador em Splunk como o extend operador no Kusto suportam apenas funções escalares e operadores aritméticos.

Produto Operador Exemplo
Splunk eval Event.Rule=330009.2
| eval state= if(Data.Exception = "0", "success", "error")
Kusto extend Office_Hub_OHubBGTaskError
| extend state = iff(Data_Exception == 0,"success" ,"error")

Mudar o Nome

O Kusto utiliza o operador para mudar o project-rename nome de um campo. project-rename No operador, uma consulta pode tirar partido de todos os índices pré-criados para um campo. O Splunk tem um rename operador que faz o mesmo.

Produto Operador Exemplo
Splunk rename Event.Rule=330009.2
| rename Date.Exception as execption
Kusto project-rename Office_Hub_OHubBGTaskError
| project-rename exception = Date_Exception

Formatar resultados e projeção

O Splunk utiliza o table comando para selecionar as colunas a incluir nos resultados. O Kusto tem um project operador que faz o mesmo e muito mais.

Produto Operador Exemplo
Splunk table Event.Rule=330009.2
| table rule, state
Kusto project Office_Hub_OHubBGTaskError
| project exception, state

O Splunk utiliza o field - comando para selecionar as colunas a excluir dos resultados. O Kusto tem um project-away operador que faz o mesmo.

Produto Operador Exemplo
Splunk fields - Event.Rule=330009.2
| fields - quota, hightest_seller
Kusto project-away Office_Hub_OHubBGTaskError
| project-away exception, state

Agregação

Veja a lista de funções de agregação resumidas que estão disponíveis.

Operador Splunk Exemplo de Splunk Operador Kusto Exemplo do Kusto
stats search (Rule=120502.*)
| stats count by OSEnv, Audience
summarize Office_Hub_OHubBGTaskError
| summarize count() by App_Platform, Release_Audience
evenstats ...
| stats count_i by time, category
| eventstats sum(count_i) AS count_total by _time_
join T2
| join kind=inner (T1) on _time
| project _time, category, count_i, count_total

Participar

join em Splunk tem limitações substanciais. A subconsulta tem um limite de 10 000 resultados (definido no ficheiro de configuração de implementação) e está disponível um número limitado de tipos de associação.

Produto Operador Exemplo
Splunk join Event.Rule=120103* | stats by Client.Id, Data.Alias
| join Client.Id max=0 [search earliest=-24h Event.Rule="150310.0" Data.Hresult=-2147221040]
Kusto join cluster("OAriaPPT").database("Office PowerPoint").Office_PowerPoint_PPT_Exceptions
| where Data_Hresult== -2147221040
| join kind = inner (Office_System_SystemHealthMetadata
| summarize by Client_Id, Data_Alias)on Client_Id

Ordenar

Em Splunk, para ordenar por ordem ascendente, tem de utilizar o reverse operador . O Kusto também suporta a definição de onde colocar nulos, seja no início ou no final.

Produto Operador Exemplo
Splunk sort Event.Rule=120103
| sort Data.Hresult
| reverse
Kusto order by Office_Hub_OHubBGTaskError
| order by Data_Hresult, desc

Expansão de valores múltiplos

O operador de expansão de vários valores é semelhante tanto no Splunk como no Kusto.

Produto Operador Exemplo
Splunk mvexpand mvexpand solutions
Kusto mv-expand mv-expand solutions

Facetas de resultados, campos interessantes

No Log Analytics na portal do Azure, apenas a primeira coluna é exposta. Todas as colunas estão disponíveis através da API.

Produto Operador Exemplo
Splunk fields Event.Rule=330009.2
| fields App.Version, App.Platform
Kusto facets Office_Excel_BI_PivotTableCreate
| facet by App_Branch, App_Version

Eliminação de duplicados

No Kusto, pode utilizar summarize arg_min() para inverter a ordem em que o registo é escolhido.

Produto Operador Exemplo
Splunk dedup Event.Rule=330009.2
| dedup device_id sortby -batterylife
Kusto summarize arg_max() Office_Excel_BI_PivotTableCreate
| summarize arg_max(batterylife, *) by device_id