Поделиться через


Шпаргалка по переходу от Splunk к Kusto

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Эта статья предназначена для того, чтобы помочь пользователям, знакомым с Splunk, узнать язык запросов Kusto для записи запросов журналов с помощью Kusto. Прямые сравнения выполняются между двумя, чтобы выделить ключевые различия и сходство, чтобы вы могли опираться на существующие знания.

Структура и понятия

В следующей таблице сравниваются понятия и структуры данных между журналами Splunk и Kusto:

Понятие Splunk Кусто Комментарий
единица развертывания кластер кластер Kusto позволяет выполнять произвольные запросы между кластерами. Splunk этого не делает.
кэши данных buckets кэширование и политики хранения Управляет периодом и уровнем кэширования для данных. Этот параметр напрямую влияет на производительность запросов и стоимость развертывания.
логический раздел данных index база данных Разрешает логическое разделение данных. Обе реализации позволяют объединениям и соединению между этими разделами.
структурированные метаданные событий N/A table Splunk не предоставляет концепцию метаданных событий языку поиска. Журналы Kusto имеют концепцию таблицы, которая содержит столбцы. Каждый экземпляр события сопоставляется со строкой.
запись событие строка Только изменение терминологии
свойство записи поле column В Kusto этот параметр предопределен как часть структуры таблицы. В Splunk каждое событие имеет собственный набор полей.
Типы тип данных тип данных Типы данных Kusto являются более явными, так как они задаются в столбцах. Оба имеют возможность динамически работать с типами данных и примерно эквивалентным набором типов данных, включая поддержку JSON.
запрос и поиск поиск query Основные понятия, по сути, совпадают между Kusto и Splunk.
Время обработки событий системное время ingestion_time() В Splunk каждое событие получает системную метку времени индексирования события. В Kusto можно определить политику с именем ingestion_time, которая предоставляет системный столбец, на который можно ссылаться через функцию ingestion_time().

Functions

В следующей таблице указаны функции в Kusto, эквивалентные функциям Splunk.

Splunk Кусто Комментарий
strcat strcat() (1)
split split() (1)
if iff() (1)
tonumber todouble()
tolong()
toint()
(1)
upper
lower
toupper()
tolower()
(1)
replace replace_string(), replace_strings() или replace_regex() (1)
Хотя replace функции принимают три параметра в обоих продуктах, параметры отличаются.
substr substring() (1)
Кроме того, обратите внимание, что Splunk использует одноуровневые индексы. Kusto отмечает отсчитываемые от нуля индексы.
tolower tolower() (1)
toupper toupper() (1)
match matches regex (2)
regex matches regex В Splunk regex является оператором. В Kusto это реляционный оператор.
searchmatch == В Splunk searchmatch позволяет выполнять поиск точной строки.
random rand()
rand(n)
Функция Splunk возвращает число от нуля до 231-1. Kusto возвращает число от 0.0 до 1.0 или если параметр указан в диапазоне от 0 до n-1.
now now() (1)
relative_time totimespan() (1)
В Kusto эквивалентом для relative_time(datetimeVal, offsetVal) в Splunk является datetimeVal + totimespan(offsetVal).
Например, search | eval n=relative_time(now(), "-1d@d") становится .... | extend myTime = now() - totimespan("1d")

(1) В Splunk функция вызывается с помощью eval оператора. В Kusto он используется как часть extend или project.
(2) В Splunk функция вызывается с помощью eval оператора. В Kusto его можно использовать с оператором where .

Операторы

В следующих разделах приведены примеры использования различных операторов в Splunk и Kusto.

Замечание

В следующих примерах поле rule Splunk сопоставляется с таблицей в Kusto, а метка времени по умолчанию в Splunk сопоставляется со столбцом Logs Analytics ingestion_time().

В Splunk можно опустить ключевое search слово и указать неквотированную строку. В Kusto необходимо начинать каждый запрос с find, строка без кавычек — это имя столбца, а значение подстановки должно быть заключено в кавычки.

Продукт Operator Example
Splunk search search Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" earliest=-24h
Кусто find find Session.Id=="c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time()> ago(24h)

Filter

Запросы журнала Kusto начинаются с табличного результирующего набора данных, в котором filter применяется. В Splunk фильтрация — это операция по умолчанию для текущего индекса. Также можно использовать оператор where в Splunk, но мы этого не рекомендуем.

Продукт Operator Example
Splunk search Event.Rule="330009.2" Session.Id="c8894ffd-e684-43c9-9125-42adc25cd3fc" _indextime>-24h
Кусто where Office_Hub_OHubBGTaskError
| where Session_Id == "c8894ffd-e684-43c9-9125-42adc25cd3fc" and ingestion_time() > ago(24h)

Получите n событий или строк для проверки

Запросы журнала Kusto также поддерживают take в качестве псевдонима для limit. В Splunk, если результаты упорядочены, head возвращает первые результаты n . В Kusto limit не упорядочивается, но возвращает первые n строки, найденные.

Продукт Operator Example
Splunk head Event.Rule=330009.2
| head 100
Кусто limit Office_Hub_OHubBGTaskError
| limit 100

Получите первые n событий или строк, упорядоченных по полю или столбцу

Для получения нижних результатов в Splunk, используйте tail. В Kusto можно указать направление упорядочивания с помощью asc.

Продукт Operator Example
Splunk head Event.Rule="330009.2"
| sort Event.Sequence
| head 20
Кусто top Office_Hub_OHubBGTaskError
| top 20 by Event_Sequence

Расширение результирующего набора с новыми полями или столбцами

Splunk имеет функцию eval, но она не сопоставима с оператором eval в Kusto. Оператор eval в Splunk и оператор extend в Kusto поддерживают только скалярные функции и арифметические операторы.

Продукт Operator Example
Splunk eval Event.Rule=330009.2
| eval state= if(Data.Exception = "0", "success", "error")
Кусто extend Office_Hub_OHubBGTaskError
| extend state = iff(Data_Exception == 0,"success" ,"error")

Rename

Kusto использует project-rename оператор для переименования поля. В операторе project-rename запрос может использовать все предварительно созданные индексы для поля. Splunk имеет rename оператор, который выполняет то же самое.

Продукт Operator Example
Splunk rename Event.Rule=330009.2
| rename Date.Exception as execption
Кусто project-rename Office_Hub_OHubBGTaskError
| project-rename exception = Date_Exception

Форматирование результатов и проектирование

Splunk использует table команду для выбора столбцов, которые необходимо включить в результаты. Kusto имеет project оператор, который выполняет то же самое и многое другое.

Продукт Operator Example
Splunk table Event.Rule=330009.2
| table rule, state
Кусто project Office_Hub_OHubBGTaskError
| project exception, state

Splunk использует fields - команду для выбора столбцов, которые следует исключить из результатов. Kusto имеет оператор project-away, который делает то же самое.

Продукт Operator Example
Splunk fields - Event.Rule=330009.2
| fields - quota, hightest_seller
Кусто project-away Office_Hub_OHubBGTaskError
| project-away exception, state

Aggregation

См. список функций агрегирования для суммирования, которые доступны.

Оператор Splunk Пример Splunk Оператор Kusto Пример 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 в Splunk имеет существенные ограничения. Вложенный запрос имеет ограничение в 10 000 результатов (задано в файле конфигурации развертывания), а доступно ограниченное количество вариантов соединения.

Продукт 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]
Кусто 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

Сортировать

По умолчанию задан порядок сортировки по возрастанию. Чтобы указать порядок убывания, добавьте знак минуса (-) перед именем поля. Kusto также поддерживает определение того, где следует поместить NULL, в начале или конце.

Продукт Operator Example
Splunk sort Event.Rule=120103
| sort -Data.Hresult
Кусто order by Office_Hub_OHubBGTaskError
| order by Data_Hresult, desc

Раскрытие многозначных данных

Оператор развёртывания многозначных значений аналогичен в Splunk и Kusto.

Продукт Operator Example
Splunk mvexpand mvexpand solutions
Кусто mv-expand mv-expand solutions

Аспекты результатов, интересные поля

В Log Analytics на портале Azure предоставляется только первый столбец. Все столбцы доступны через API.

Продукт Operator Example
Splunk fields Event.Rule=330009.2
| fields App.Version, App.Platform
Кусто facets Office_Excel_BI_PivotTableCreate
| facet by App_Branch, App_Version

Дедупликация

В Kusto можно использовать summarize arg_min() для изменения порядка выбора записи.

Продукт Operator Example
Splunk dedup Event.Rule=330009.2
| dedup device_id sortby -batterylife
Кусто summarize arg_max() Office_Excel_BI_PivotTableCreate
| summarize arg_max(batterylife, *) by device_id

Диаграмма времени

Kusto и Splunk используют timechart оператор для визуализации данных с течением времени. В Splunk он объединяет данные с заданными интервалами времени и может использоваться с различными статистическими функциями. В Kusto эквивалент достигается с помощью функций summarize и bin, за которым следует оператор временной диаграммы.

Продукт 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
Кусто 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