TIPS & TRICKS

データを並べ替えろ!|Splunk search コマンドでカスタムソートオーダー

デフォルトではSplunkの検索結果は辞書順にソートされています..辞書順ってなに!?

辞書順の説明

Splunk のソフトウェアでは、辞書順のソートはほとんどの場合、ASCII のスーパーセットである UTF-8 エンコーディングに基づいて行われます。

これは実際にはどういう意味なのでしょうか。

  • 数字は文字よりも前にソートされます。
  • 数字は最初の桁に基づいてソートされます。例えば、10, 9, 70, 100 という数字は、辞書的には 10, 100, 70, 9 とソートされます。(※数字が文字列として認識されている場合、stats コマンドで count した場合などは数値として扱われているので、その限りではありません)
  • 大文字は小文字よりも先にソートされます。
  • 記号は標準ではありません。ある記号は数値の前にソートされます。その他の記号は、文字の前または後にソートされます。

SplunkのUIであるSplunk Webや、一部の検索コマンドでは昇順、降順を指定できます。

コマンドが辞書順を使用しているかどうかは、それらのコマンドのドキュメントの「Usage」セクションを見ればわかります。辞書順を使用する最も一般的なコマンドは searchsorttimechartです。

これらのコマンドのメリットについてはこちらからご確認ください。

カスタムのソート順を使いたい場合はどうすればいいのでしょうか?

固有のフィールド値の小さなセットがあれば、カスタムソート順を作成するのは簡単です。 "小さい”というのは主観的なもので、どの程度の入力をしたいかによります。”小さい”というのは、15個以下の値を意味します。一例としては、12ヶ月(年の1月から12月、このブログの例ではこれを使用しています)があります。

ユニークなフィールド値で大きなセットを持っている場合は、値が収まるカテゴリを特定できれば、カスタムのソート順序を作成することができます。 例えば、高、中、低のようなカテゴリに収まる数値のセットでソートすることができます。

一つの例として、カスタム・ソート順を作成する手順として、以下の方法があります:

  1. Evalコマンドを使用して新しいフィールドを作成します。例えば、sort_field というフィールドを作成します。
  2. case関数を使用して、それぞれのユニークな値な番号を割り当て、それらの値をsort_fieldに配置します。
  3. sortコマンドを使用して、sort_field内の数値に基づいて結果をソートします。

以下に例を示します。

検索結果を 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!


リソース・資料

日付のソート

  • 一部のエントリに先頭のゼロが含まれている日付 (04/03/19) と含まれていない日付 (4/3/19) を扱っている場合は、Splunk Answers の投稿を参照してください。
  • 日付が dd/mm/yyyy の順で表示され、ソートが思うようにいかない場合は、 こちらのSplunk Answers の投稿を参照してください。

その他の参照情報について

*このブログはこちらの英語ブログの翻訳です。

ブログ関連情報

毎月1回、Splunkブログの更新情報をメールでお届けします。ぜひMonthly Digest をこちらからご登録ください!

Laura Stewart
Posted by

Laura Stewart

Laura unravels the SPL maze, bringing clarity to the murky. She has been a software instructor, wrote books on Excel, PowerPoint, and Project, and spent some very interesting time working at the Defense Intelligence Agency in DC. Laura is a Principal Technical Writer at Splunk, with a focus on the Splunk SPL documentation.

TAGS
Show All Tags
Show Less Tags