Partilhar via


Guia rápido do Splunk para Kusto

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Este artigo destina-se a ajudar utilizadores familiarizados com o Splunk a aprender a Linguagem de Consultas Kusto para escrever consultas de registo com Kusto. São feitas comparações diretas entre os dois para destacar as principais diferenças e semelhanças, para que possas construir sobre o teu conhecimento existente.

Estrutura e conceitos

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

Concept Splunk Kusto Comment
Unidade de Destacamento cluster cluster O Kusto permite consultas arbitrárias entre clusters. O Splunk não o faz.
Caches de dados buckets Políticas de cache e retenção Controla o período e o nível de cache dos dados. Esta definição afeta diretamente o desempenho das consultas e o custo da implementação.
Partição lógica dos dados indexar base de dados Permite a separação lógica dos dados. Ambas as implementações permitem uniões e junções através destas partições.
Metadados de eventos estruturados N/A tabela O Splunk não expõe o conceito de metadados de eventos à linguagem de pesquisa. Os registos Kusto têm o conceito de tabela, que tem colunas. Cada instância de evento é mapeada para uma linha.
registo evento linha Apenas a mudança de terminologia.
Atributo de registo campo coluna No Kusto, este cenário é pré-definido como parte da estrutura da tabela. No 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 pesquisa consulta Os conceitos são essencialmente os mesmos entre Kusto e Splunk.
Tempo de Ingestão do Evento Tempo do Sistema ingestion_time() No Splunk, cada evento recebe um carimbo temporal do sistema do momento em que o evento foi indexado. No Kusto, pode definir uma política chamada 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 em Kusto que são equivalentes a funções Splunk.

Splunk Kusto Comment
strcat strcat() (1)
split split() (1)
if iff() (1)
tonumber todouble()
tolong()
toint()
(1)
upper
lower
toupper()
tolower()
(1)
replace replace_string(), replace_strings() ou replace_regex() (1)
Embora replace as funções tenham três parâmetros em ambos os produtos, os parâmetros são diferentes.
substr substring() (1)
Note-se também que o Splunk utiliza índices baseados num só. Kusto refere índices baseados em zero.
tolower tolower() (1)
toupper toupper() (1)
match matches regex (2)
regex matches regex Em Splunk, regex é um operador. Em 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 e2 31-1. 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)
Em Kusto, o equivalente de relative_time(datetimeVal, offsetVal) Splunk é datetimeVal + totimespan(offsetVal).
Por exemplo, search | eval n=relative_time(now(), "-1d@d") torna-se .... | extend myTime = now() - totimespan("1d")

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

Operadores

As secções seguintes apresentam exemplos de como usar diferentes operadores em Splunk e Kusto.

Observação

Nos exemplos seguintes, o campo Splunk rule mapeia para uma tabela no Kusto, e o carimbo temporal padrão do Splunk mapeia para a coluna Logs Analytics ingestion_time().

No Splunk, pode omitir a search palavra-chave e especificar uma cadeia sem aspas. No Kusto, deve começar cada consulta com find, uma cadeia sem aspas é um nome de coluna, e o valor de pesquisa deve ser uma cadeia entre aspas.

Produto Operator Example
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)

Filter

As consultas de registros Kusto começam com um conjunto de resultados tabulares ao qual filter é aplicado. No Splunk, filtrar é a operação padrão no índice atual. Também pode usar o where operador em Splunk, mas não o recomendamos.

Produto Operator Example
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)

Obtenha n eventos ou linhas para inspeção

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

Produto Operator Example
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 os resultados mais baixos, no Splunk, usa tail. No Kusto, pode especificar a direção de ordenação usando asc.

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

Estenda o conjunto de resultados com novos campos ou colunas

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

Produto Operator Example
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 usa o project-rename operador para renomear um campo. No project-rename operador, uma consulta pode tirar partido de quaisquer índices pré-construídos para um campo. O Splunk tem um rename operador que faz o mesmo.

Produto Operator Example
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 de dados

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

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

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

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

Aggregation

Consulte a lista de funções de agregação resumida disponíveis.

Operador Splunk Exemplo Splunk Operador Kusto Exemplo de 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

Aderir

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 um número limitado de tipos de junção está disponível.

Produto Operator Example
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

A ordem de classificação padrão é crescente. Para especificar a ordem decrescente, adicione um sinal menos (-) antes do nome do campo. O Kusto também suporta definir onde colocar os nulls, seja no início ou no final.

Produto Operator Example
Splunk sort Event.Rule=120103
| sort -Data.Hresult
Kusto order by Office_Hub_OHubBGTaskError
| order by Data_Hresult, desc

Multivalor expandir

O operador de expansão multivalor é semelhante tanto no Splunk como no Kusto.

Produto Operator Example
Splunk mvexpand mvexpand solutions
Kusto mv-expand mv-expand solutions

Facetas do resultado, campos interessantes

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

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

Deduplicação

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

Produto Operator Example
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

Tabela temporal

Kusto e Splunk usam ambos o timechart operador para visualizar dados ao longo do tempo. No Splunk, agrega dados ao longo de intervalos de tempo especificados e pode ser usado com várias funções estatísticas. No Kusto, o equivalente é alcançado usando as funções summarize e bin, seguidas do operador timechart de renderização.

Produto Operator Example
Splunk timechart index=StormEvents
| where StartTime >= "2007-01-01" AND StartTime <= "2007-12-31" AND DamageCrops > 0
| bin span=7d StartTime
| stats count as EventCount by StartTime
| timechart span=7d count as EventCount
Kusto timechart StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31)) and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)
| render timechart