Splunk から Kusto のチート シート
この記事の目的は、Splunk を使い慣れているユーザーが、Kusto でログ クエリを記述するための Kusto クエリ言語を学習するのを支援することです。 既存の知識を活用できるように、2 つを直接比較して、主要な相違点と類似点を明らかにします。
構造と概念
次の表では、Splunk と Kusto ログの概念とデータ構造を比較します。
概念 | Splunk | Kusto | コメント |
---|---|---|---|
展開単位 | cluster | cluster | Kusto では、任意のクロスクラスター クエリが可能です。 Splunk では行われません。 |
データ キャッシュ | バケット | キャッシュおよび保有ポリシー | データの期間とキャッシュ レベルを制御します。 この設定は、クエリのパフォーマンスと展開のコストに直接影響します。 |
データの論理パーティション | インデックス (index) | database | データの論理的な分離を可能にします。 どちらの実装でも、これらのパーティション間の和集合と結合が可能です。 |
構造化されたイベント メタデータ | 該当なし | table | Splunk では、イベント メタデータの概念が検索言語に公開されません。 Kusto ログには、列を含むテーブルの概念があります。 各イベント インスタンスは行にマップされます。 |
レコード (record) | イベント | 行 | 用語の変更のみです。 |
record 属性 | フィールド | column | Kusto では、この設定はテーブル構造の一部として事前に定義されます。 Splunk では、イベントごとに固有のフィールドのセットがあります。 |
types | データ型 | データ型 | Kusto のデータ型は列に設定されているので、より明示的です。 どちらにもデータ型を動的に操作する機能があり、JSON のサポートを含めて、一連のデータ型はほぼ同等です。 |
クエリと検索 | 検索 | query | 概念は、Kusto でも Splunk でも基本的に同じです。 |
イベント取り込み時刻 | システム時刻 | ingestion_time() |
Splunk では、イベントのインデックスが作成された時刻のシステム タイムスタンプが各イベントに設定されます。 Kusto では、ingestion_time() 関数を通じて参照できるシステム列を公開する ingestion_time という名前のポリシーを定義できます。 |
機能
次の表では、Splunk の関数と同等の Kusto の関数を指定します。
Splunk | Kusto | コメント |
---|---|---|
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 両方の製品で 3 つのパラメーターを受け取りますが、パラメーターは異なります。 |
substr |
substring() |
(1) Splunk では 1 から始まるインデックスを使用することにも注意してください。 Kusto では、0 から始まるインデックスが記録されます。 |
tolower |
tolower() |
(1) |
toupper |
toupper() |
(1) |
match |
matches regex |
(2) |
regex |
matches regex |
Splunk では、regex は演算子です。 Kusto では、関係演算子です。 |
searchmatch |
== | Splunk の searchmatch では、厳密な文字列を検索できます。 |
random |
rand() rand(n) |
Splunk の関数は、0 から 231-1 の間の数値を返します。 Kusto の場合は、0.0 ~ 1.0 の数値、またはパラメーターが提供された場合は 0 ~ n-1 の数値を返します。 |
now |
now() |
(1) |
relative_time |
totimespan() |
(1) Kusto で Splunk の relative_time(datetimeVal, offsetVal) と同等なのは、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 でさまざまな演算子を使用する方法の例を示します。
Note
次の例では、Splunk のフィールド rule
が Kusto のテーブルに、Splunk の既定のタイムスタンプが Log Analytics の ingestion_time()
列にマッピングされます。
検索
Splunk では、search
キーワードを省略し、引用符なしの文字列を指定することができます。 Kusto では、各クエリを find
で始める必要があります。また、引用符なしの文字列は列名であり、検索値は引用符で囲まれた文字列である必要があります。
製品 | 演算子 | 例 |
---|---|---|
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) |
フィルター
Kusto ログ クエリは、filter
が適用された表形式の結果セットから開始します。 Splunk では、フィルター処理は現在のインデックスに対する既定の操作です。 Splunk では、where
演算子を使用することもできます。ただし、この操作はお勧めしません。
製品 | 演算子 | 例 |
---|---|---|
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) |
検査のために n 個のイベントまたは行を取得する
Kusto のログ クエリでは、limit
に対する別名として take
もサポートされます。 Splunk では、結果が順序付けされている場合、head
は最初の n 個の結果を返します。 Kusto では、limit
は順序付けされませんが、見つかった最初の n 行を返します。
製品 | 演算子 | 例 |
---|---|---|
Splunk | head |
Event.Rule=330009.2 | head 100 |
Kusto | limit |
Office_Hub_OHubBGTaskError | limit 100 |
フィールドまたは列で順序付けされた最初の n 個のイベントまたは行を取得する
下位の結果の場合、Splunk では tail
を使用します。 Kusto では、asc
を使用して順序付けの方向を指定できます。
製品 | 演算子 | 例 |
---|---|---|
Splunk | head |
Event.Rule="330009.2" | sort Event.Sequence | head 20 |
Kusto | top |
Office_Hub_OHubBGTaskError | top 20 by Event_Sequence |
新しいフィールドまたは列で結果セットを拡張する
Splunk には、eval
関数がありますが、Kusto の eval
演算子と同等ではありません。 Splunk の eval
演算子と Kusto の extend
演算子はどちらも、スカラー関数と算術演算子のみをサポートします。
製品 | 演算子 | 例 |
---|---|---|
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") |
[名前の変更]
Kusto では、project-rename
演算子を使用してフィールドの名前を変更します。 project-rename
演算子では、フィールドに対して事前に作成されたインデックスをクエリで利用できます。 Splunk では、同じことを行うために rename
演算子が用意されています。
製品 | 演算子 | 例 |
---|---|---|
Splunk | rename |
Event.Rule=330009.2 | rename Date.Exception as execption |
Kusto | project-rename |
Office_Hub_OHubBGTaskError | project-rename exception = Date_Exception |
結果の書式設定とプロジェクション
Splunk では、table
コマンドを使って、結果に含める列を選びます。 Kusto には、同じこととそれ以上のことを行う project
演算子があります。
製品 | 演算子 | 例 |
---|---|---|
Splunk | table |
Event.Rule=330009.2 | table rule, state |
Kusto | project |
Office_Hub_OHubBGTaskError | project exception, state |
Splunk では、field -
コマンドを使って、結果から除外する列を選びます。 Kusto では、同じことを行うために project-away
演算子が用意されています。
製品 | 演算子 | 例 |
---|---|---|
Splunk | fields - |
Event.Rule=330009.2 | fields - quota, hightest_seller |
Kusto | project-away |
Office_Hub_OHubBGTaskError | project-away exception, state |
集計
使用できる集計関数をまとめた一覧を参照してください。
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 の join
には重要な制限があります。 サブクエリには 10,000 件の結果の制限があり (展開構成ファイルで設定)、利用できる結合の種類の数に制限があります。
製品 | 演算子 | 例 |
---|---|---|
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 |
並べ替え
Splunk では、昇順に並べ替えるには、reverse
演算子を使用する必要があります。 Kusto では、null を格納する場所の定義もサポートされています (先頭または末尾)。
製品 | 演算子 | 例 |
---|---|---|
Splunk | sort |
Event.Rule=120103 | sort Data.Hresult | reverse |
Kusto | order by |
Office_Hub_OHubBGTaskError | order by Data_Hresult, desc |
複数値の展開
複数値の展開演算子は、Splunk と Kusto の両方で同じです。
製品 | 演算子 | 例 |
---|---|---|
Splunk | mvexpand |
mvexpand solutions |
Kusto | mv-expand |
mv-expand solutions |
結果ファセット、関心フィールド
Azure portal での Log Analytics では、最初の列のみが展開されます。 すべての列は、API を介して利用します。
製品 | 演算子 | 例 |
---|---|---|
Splunk | fields |
Event.Rule=330009.2 | fields App.Version, App.Platform |
Kusto | facets |
Office_Excel_BI_PivotTableCreate | facet by App_Branch, App_Version |
重複除去
Kusto では、選択するレコードの順序を逆にするために、summarize arg_min()
を使用できます。
製品 | 演算子 | 例 |
---|---|---|
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 |
関連コンテンツ
- Kusto クエリ言語に関するチュートリアルに目を通します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示