デフォルトではSplunkの検索結果は辞書順にソートされています..辞書順ってなに!?
Splunk のソフトウェアでは、辞書順のソートはほとんどの場合、ASCII のスーパーセットである UTF-8 エンコーディングに基づいて行われます。
これは実際にはどういう意味なのでしょうか。
SplunkのUIであるSplunk Webや、一部の検索コマンドでは昇順、降順を指定できます。
コマンドが辞書順を使用しているかどうかは、それらのコマンドのドキュメントの「Usage」セクションを見ればわかります。辞書順を使用する最も一般的なコマンドは search、sort、timechartです。
これらのコマンドのメリットについてはこちらからご確認ください。
固有のフィールド値の小さなセットがあれば、カスタムソート順を作成するのは簡単です。 "小さい”というのは主観的なもので、どの程度の入力をしたいかによります。”小さい”というのは、15個以下の値を意味します。一例としては、12ヶ月(年の1月から12月、このブログの例ではこれを使用しています)があります。
ユニークなフィールド値で大きなセットを持っている場合は、値が収まるカテゴリを特定できれば、カスタムのソート順序を作成することができます。 例えば、高、中、低のようなカテゴリに収まる数値のセットでソートすることができます。
一つの例として、カスタム・ソート順を作成する手順として、以下の方法があります:
以下に例を示します。
検索結果を status フィールドの値でソートしたいとします。 status フィールドの値は、Critical、High、Medium、および Low です。
これらの値を辞書順でソートした場合、値はアルファベット順にソートされます。昇順にソートすると、Critical、High、Low、および Midiumになります。これは通常皆さんが望む順序ではありません。Low が最後にくることが望まれます。
各ステータス・レベルに数値を割り当てることで、カスタム・ソート順を作成します。ソートされたリストで最初に表示するレベルに 1 を割り当てます。次に、次に表示したいレベルに 2 を割り当てます。
以下は、検索に追加するevalコマンドです。
... | eval sort_field=case(status="critical",1,
status="high",2, status="medium",3, status="low",4)
| sort sort_field
ところで、ソートフィールドの名前は何でも構いません。この例では、sort_fieldとしています。
別の例を紹介します。date_monthフィールドを、7月から始まって翌年の6月で終わる会計年度順でソートしたいとします。sort_fieldを作成し、月を特定し、各月にランキング値を割り当てます。
これはもう少し入力が必要です。例えば、以下のようになります。
... | eval sort_field=case(date_month="july",1,
date_month="august",2, date_month="september",3,
date_month="october",4, date_month="november",5,
date_month="december",6, date_month="january",7,
date_month="february",8, date_month="march",9,
date_month="april",10, date_month="may",11, date_month="june",12)
| sort sort_field
もし、sort_field を表示させたくない場合、fields コマンドを、サーチの最後に利用することで、対処できます。 fields コマンドと、非表示にしたいフィールド名の前に - (マイナス)をつけることで、結果からフィールドを除外できます。
... | fields - sort_field
フィールドの値に、大文字小文字が混在する場合がある場合、eval コマンドとupperもしくは lower 関数を利用して、大文字か小文字に変換して対応する必要があります。
次の例では、date_monthフィールドで lower 関数を使用し、結果をmonthという新しいフィールドに配置しています。次に eval コマンドと case 関数を使用して、カスタム・ソート順を作成しています。
... | eval month=lower(date_month)
| eval sort_field=case(month="july",1, month="august",2, month="september",3,
month="october",4, month="november",5, month="december",6, month="january",7,
month="february",8, month="march",9, month="april",10, month="may",11, month="june",12)
| sort sort_field
... | fields - sort_field
NOTE: 日付を並べ替える場合、UNIX 時間(1970/1/1 0:0:0 からの秒数)であることに注意してください。_time フィールドに格納されている値は、UNIX時間であるためソートは問題なく可能です。独自の日付フィールドを利用している場合は、strptime コマンドを利用して、UNIX時間に変換してから、ソートするようにします。
並べ替えたいフィールドに一意の値が多数ある場合は、case関数を使用して、値の範囲に基づいてカテゴリを作成することができます。 最初の例では、検索結果を Critical、High、Medium、Low の値でソートしています。この例では、status と呼ばれるフィールドの値を使用しています。しかし、値を分類するフィールドがない場合はどうでしょうか。 Splunk は、これらを作ることができます。
例えば、data_field というフィールドに 0 から 100 までの値を含むデータがあるとします。この表に示されている値の範囲と関連するステータスレベルを作成したいとします。
Values | Status Level |
---|---|
0-34 | Low |
35-69 | Medium |
70-89 | High |
90-100 | Critical |
値の範囲ごとにカテゴリを作成するには、これを検索に追加します。
... | eval status=case(data_field>=90, "Critical", data_field>=70 AND data_field<=89, "High",
data_field>=35 AND data_field<=69, "Medium",data_field>=34 AND data_field<=0, "Low")
次に、作成した status フィールドに基づいたカスタムの並べ替えができるように、今までの例同様 case 関数を利用して定義し、sort コマンドで並べ替えを行います。
... | eval sort_field=case(status="Critical",1, status="High",2, status="Medium",3, status="Low",4)
| sort sort_field
最後まで読んで頂いてありがとうございます。
SPL it like you mean it! Happy Splunking!
日付のソート
その他の参照情報について
*このブログはこちらの英語ブログの翻訳です。
毎月1回、Splunkブログの更新情報をメールでお届けします。ぜひMonthly Digest をこちらからご登録ください!
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。