Aide-mémoire sur Splunk avec Kusto

Cet article a pour but d’aider les utilisateurs qui connaissent Splunk à apprendre le langage de requête Kusto pour écrire des requêtes de journal avec Kusto. Des comparaisons directes sont effectuées entre les deux pour mettre en évidence les principales différences et similitudes, afin que vous puissiez vous appuyer sur vos connaissances existantes.

Structure et concepts

Le tableau suivant compare les concepts et les structures de données entre les journaux Splunk et Kusto :

Concept Splunk Kusto Commentaire
unité de déploiement cluster cluster Kusto autorise les requêtes arbitraires entre clusters. Splunk ne le fait pas.
caches de données compartiments stratégies de mise en cache et de rétention Contrôle la période et le niveau de mise en cache des données. Ce paramètre affecte directement les performances des requêtes et le coût du déploiement.
partition logique des données index database Permet une séparation logique des données. Les deux implémentations autorisent les unions et les jointures entre ces partitions.
métadonnées d’événement structuré N/A table Splunk n’expose pas le concept de métadonnées d’événement au langage de recherche. Les journaux Kusto ont le concept d’une table, qui contient des colonnes. Chaque instance d’événement est mappée à une ligne.
enregistrement événement ligne Changement de terminologie uniquement.
attribut record field colonne Dans Kusto, ce paramètre est prédéfini dans le cadre de la structure de table. Dans Splunk, chaque événement possède son propre ensemble de champs.
types type de données type de données Les types de données Kusto sont plus explicites, car ils sont définis sur les colonnes. Les deux ont la possibilité de travailler dynamiquement avec des types de données et un ensemble de types de données à peu près équivalent, y compris la prise en charge JSON.
requête et recherche recherche query Les concepts sont essentiellement les mêmes entre Kusto et Splunk.
heure d’ingestion d’événement heure système ingestion_time() Dans Splunk, chaque événement obtient un horodatage système de l’heure à laquelle l’événement a été indexé. Dans Kusto, vous pouvez définir une stratégie appelée ingestion_time qui expose une colonne système qui peut être référencée via la fonction ingestion_time().

Fonctions

Le tableau suivant spécifie les fonctions dans Kusto qui sont équivalentes aux fonctions Splunk.

Splunk Kusto Commentaire
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)
Bien que replace les fonctions prennent trois paramètres dans les deux produits, les paramètres sont différents.
substr substring() (1)
Notez également que Splunk utilise des index de base un. Kusto note les index de base zéro.
tolower tolower() (1)
toupper toupper() (1)
match matches regex (2)
regex matches regex Dans Splunk, regex est un opérateur. Dans Kusto, il s’agit d’un opérateur relationnel.
searchmatch == Dans Splunk, searchmatch permet de rechercher la chaîne exacte.
random rand()
rand(n)
La fonction splunk retourne un nombre compris entre zéro et 231-1. Kusto renvoie un nombre compris entre 0.0 et 1.0 ou, si un paramètre est fourni, entre 0 et n-1.
now now() (1)
relative_time totimespan() (1)
Dans Kusto, l’équivalent de Splunk est relative_time(datetimeVal, offsetVal)datetimeVal + totimespan(offsetVal).
Par exemple, search | eval n=relative_time(now(), "-1d@d") devient ... | extend myTime = now() - totimespan("1d").

(1) Dans Splunk, la fonction est appelée à l’aide de l’opérateur eval . Dans Kusto, il est utilisé dans extend ou project.
(2) Dans Splunk, la fonction est appelée à l’aide de l’opérateur eval . Dans Kusto, il peut être utilisé avec l’opérateur where .

Opérateurs

Les sections suivantes donnent des exemples d’utilisation de différents opérateurs dans Splunk et Kusto.

Notes

Dans les exemples suivants, le champ rule Splunk est mappé à une table dans Kusto, et l’horodatage par défaut de Splunk est mappé à la colonne Logs Analytics ingestion_time() .

Dans Splunk, vous pouvez omettre le mot clé search et spécifier une chaîne sans guillemets. Dans Kusto, vous devez démarrer chaque requête avec find, une chaîne non citée est un nom de colonne et la valeur de recherche doit être une chaîne entre guillemets.

Produit Opérateur Exemple
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)

Filtrer

Les requêtes de journal Kusto commencent à partir d’un jeu de résultats tabulaire dans lequel filter est appliqué. Dans Splunk, le filtrage est l’opération par défaut sur l’index actuel. Vous pouvez également utiliser l’opérateur where dans Splunk, mais nous ne le recommandons pas.

Produit Opérateur Exemple
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)

Obtenir n événements ou lignes à des fins d’inspection

Les requêtes de journal Kusto prennent également en charge take en tant qu’alias de limit. Dans Splunk, si les résultats sont triés, head retourne les n premiers résultats. Dans Kusto, limit n’est pas ordonné, mais retourne les n premières lignes trouvées.

Produit Opérateur Exemple
Splunk head Event.Rule=330009.2
| head 100
Kusto limit Office_Hub_OHubBGTaskError
| limit 100

Obtenir les n premiers événements ou lignes classés par champ ou colonne

Pour les résultats inférieurs, dans Splunk, vous utilisez tail. Dans Kusto, vous pouvez spécifier le sens du classement à l’aide de asc.

Produit Opérateur Exemple
Splunk head Event.Rule="330009.2"
| sort Event.Sequence
| head 20
Kusto top Office_Hub_OHubBGTaskError
| top 20 by Event_Sequence

Étendre le jeu de résultats avec de nouveaux champs ou colonnes

Splunk a une eval fonction, mais elle n’est pas comparable à l’opérateur eval dans Kusto. L’opérateur eval dans Splunk et l’opérateur extend dans Kusto prennent en charge uniquement les fonctions scalaires et les opérateurs arithmétiques.

Produit Opérateur Exemple
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")

Renommer

Kusto utilise l’opérateur project-rename pour renommer un champ. Dans l’opérateur project-rename , une requête peut tirer parti de tous les index prédéfinis pour un champ. Splunk a un rename opérateur qui fait la même chose.

Produit Opérateur Exemple
Splunk rename Event.Rule=330009.2
| rename Date.Exception as execption
Kusto project-rename Office_Hub_OHubBGTaskError
| project-rename exception = Date_Exception

Mettre en forme les résultats et la projection

Splunk utilise la table commande pour sélectionner les colonnes à inclure dans les résultats. Kusto a un project opérateur qui fait la même chose et plus.

Produit Opérateur Exemple
Splunk table Event.Rule=330009.2
| table rule, state
Kusto project Office_Hub_OHubBGTaskError
| project exception, state

Splunk utilise la field - commande pour sélectionner les colonnes à exclure des résultats. Kusto a un project-away opérateur qui fait la même chose.

Produit Opérateur Exemple
Splunk fields - Event.Rule=330009.2
| fields - quota, hightest_seller
Kusto project-away Office_Hub_OHubBGTaskError
| project-away exception, state

Agrégation

Consultez la liste des fonctions d’agrégations de synthèse disponibles.

Opérateur Splunk Exemple Splunk Opérateur Kusto Exemple 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

Join

join dans Splunk a des limitations substantielles. La sous-requête a une limite de 10 000 résultats (défini dans le fichier de configuration de déploiement) et un nombre limité d’arômes de jointure sont disponibles.

Produit Opérateur Exemple
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

Trier

Dans Splunk, pour trier dans l’ordre croissant, vous devez utiliser l’opérateur reverse . Kusto prend également en charge la définition de l’emplacement où placer les valeurs Null, soit au début, soit à la fin.

Produit Opérateur Exemple
Splunk sort Event.Rule=120103
| sort Data.Hresult
| reverse
Kusto order by Office_Hub_OHubBGTaskError
| order by Data_Hresult, desc

Développement à valeurs multiples

L’opérateur d’extension à valeurs multiples est similaire dans Splunk et Kusto.

Produit Opérateur Exemple
Splunk mvexpand mvexpand solutions
Kusto mv-expand mv-expand solutions

Facettes des résultats, champs intéressants

Dans Log Analytics, sur le Portail Azure, seule la première colonne est exposée. Toutes les colonnes sont disponibles via l’API.

Produit Opérateur Exemple
Splunk fields Event.Rule=330009.2
| fields App.Version, App.Platform
Kusto facets Office_Excel_BI_PivotTableCreate
| facet by App_Branch, App_Version

Dédupliquer

Dans Kusto, vous pouvez utiliser summarize arg_min() pour inverser l’ordre de choix de l’enregistrement.

Produit Opérateur Exemple
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