先日お客様に、最新データと履歴データを1つのレポートで表示する方法を尋ねられました。 下の図のように、今日のデータを示すグラフと昨日のデータを示すグラフを1つにまとめたレポートです。 こうすれば、2つの時間範囲のデータの関係を簡単に確認できます。
今日と昨日のように、2つの時間範囲を調べるサーチの基本構造は次のとおりです。
<昨日のデータのサーチ> | eval ReportKey=”Yesterday” | modify the “_time” field | append [<今日のデータのサブサーチ> | eval ReportKey=”Today”] | timechart
このサーチで使用している「eval」、「timechart」、「append」コマンドの使い方と、サブサーチの構文について詳しく知るには、次のリンクからSplunkのオンラインドキュメントに移動し、各コマンドと関連する関数の説明を参照してください。
evalコマンド timechartコマンド appendコマンド
eval関数 timechart関数 サブサーチ
1つのレポートに2つの時間範囲を表示する鍵は、Splunkの「_time」フィールドです。 先に進む前に、時間に関するSplunkドキュメントをご確認ください。
メインページ:サーチの時間修飾子
基本をご存じの場合はこちらの例をご参照ください:相対時間修飾子の例
ではサーチを作っていきましょう。 例として、システムのCPU使用率について昨日の5分平均と今日の5分平均を直接比較します。 ここでは、「*nix」Appで収集したCPUデータを使用します。このAppはSplunkbaseからダウンロードできます。
まずは、1つの時間範囲のデータを表示するサーチを作成します。 タイムピッカーを使って時間範囲を選択することも、サーチバーに相対時間修飾子を直接入力することもできます。 以下のサーチをSplunkにコピー&ペーストした場合、このブログ記事で使っている2重引用符文字が原因で機能しない可能性があるのでご注意ください。
次のサーチでは、今日のすべてのCPU pctIdleイベントが表示されます。 pctIdleを使用しているのは、私のシステムではCPU使用率が低すぎてグラフでうまく表示できないためです。また、このCPUデータはカラム形式であるため、「multikv」コマンドを追加してカラム名をフィールド名に変換しています。 「latest」を指定しない場合は「latest=now」がデフォルトとなるため、実際はこの指定は不要ですが、「now」以外で終わる時間範囲を指定する場合は「latest」フィールドの指定が必要です。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv
次に、昨日のすべてのCPU pctIdleイベントを表示します。サーチは次のようになります。
index=”os” sourcetype=”cpu” earliest=-1d@d latest=-0d@d | multikv
Splunkで複数のサーチを1つにまとめる方法の1つとして、「append」コマンドとサブサーチがあります。 その構文は次のようになります。
search1 | append [search2]
実際のサーチは次のようになります。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv | append [search index=”os” sourcetype=”cpu” earliest=-1d@d latest=-0d@d | multikv ]
左角かっこ「[」の直後に「search」コマンドがあることに注意してください。 パイプ「|」またはサブサーチの角かっこ「[」の後に追加のサーチを指定する場合は、常に「search」コマンドを指定します。このコマンドを指定しないとエラーになります。
表示されたイベントのリストを見ると、昨日の午前12時から現在までの2日分のデータが取得されていることがわかります。
次に、レポートに表示する際に2つの時間範囲を分ける方法が必要です。 そこで、「eval」コマンドを使用して、「ReportKey」という新しいフィールドを作成します。 これにより、レポート内で各時間範囲を分けるタイトルを指定します。 フィールド名は自由に決めて構いません。 「ReportKey」はSplunkの特殊フィールド名ではありません。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv | eval ReportKey=”today” | append [search index=”os” sourcetype=”cpu” earliest=-1d@d latest=-0d@d | multikv | eval ReportKey=”yesterday”]
データを折れ線グラフで表示するには、「timechart」コマンドを使用します。 CPU pctIdleの5分平均のグラフを表示するサーチは次のようになります。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv | eval ReportKey=”today” | append [search index=”os” sourcetype=”cpu” earliest=-1d@d latest=-0d@d | multikv | eval ReportKey=”yesterday”] | timechart span=5m avg(pctIdle) by ReportKey
これで、昨日のデータと今日のデータが別々の折れ線グラフで表示されます。
2つのグラフを重ね合わせて表示するには、Splunkの特殊フィールドである「_time」を編集する必要があります。 「_time」はイベントのタイムスタンプフィールドで、SplunkタイムラインやSplunkレポートでのイベントデータの表示方法を操作できます。 昨日のイベントの「_time」フィールドに24時間を追加すれば、レポートで昨日のイベントが本日の同時刻上に表示されます。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv | eval ReportKey=”today” | append [search index=”os” sourcetype=”cpu” earliest=-1d@d latest=-0d@d | multikv | eval ReportKey=”yesterday” | eval _time=_time+86400] | timechart span=5m avg(pctIdle) by ReportKey
86400は、1日を秒数で表した数字です。 自分で計算する代わりに「eval」コマンドで数式を使うこともできます。 その場合は、「eval _time=_time+60*60*24」(60秒×60分×24時間)と指定します。
これでレポートが完成しました。
今日のデータと先週の同じ曜日のデータを比較したい場合は、2つ目のサーチの時間範囲、「ReportKey」、「_time」を次のように変更するだけです。
index=”os” sourcetype=”cpu” earliest=-0d@d latest=now | multikv | eval ReportKey=”today” | append [search index=”os” sourcetype=”cpu” earliest=-7d@d latest=-6d@d | multikv | eval ReportKey=”same day last week” | eval _time=_time+60*60*24*7] | timechart span=5m avg(pctIdle) by ReportKey
注:Splunk 4.3.1より前の一部のバージョンでは、サブサーチの「_time」フィールドを変更すると、サブサーチで返されるはずのイベントの一部が返されないことがあります。その場合は、サブサーチで「_time」の値を入れる新しいフィールドを作成してから、サブサーチの後で「eval」を使って「_time」フィールドを指定するように変更してください。ここで使用している「if」と「isnotnull」関数については、 eval関数のドキュメントを参照してください。上記の最終版サーチからの変更箇所をハイライトで示します。
index=”os” sourcetype=”cpu” earliest=-15d@d latest=-14d@d | multikv | eval ReportKey=”today” | append [search index=”os” sourcetype=”cpu” earliest=-16d@d latest=-15d@d | multikv | eval ReportKey=”yesterday” | eval new_time=_time+86400] | eval _time=if(isnotnull(new_time), new_time, _time) | timechart span=1h avg(pctIdle) by ReportKey
ぜひご活用ください。
更新:David Carasso氏のすばらしい著書、『Exploring Splunk (Splunkを使ってみよう)』には、このようなサーチを、サブサーチを使わずに実行する優れた例が紹介されています。この方法を使用すれば、Splunkでのサブサーチで返されるイベント数の制限を回避できます。
この本をお持ちの場合は、第6章「監視 (モニター) とアラート」の、「Charting Week Over Week Results」(85ページ)のセクションでサンプルをご覧いただけます。
Splunkのメリットをどうぞお試しください。
----------------------------------------------------
お読みいただきありがとうございました
Jon Webster
このブログはこちらの英語ブログ(February 19, 2012公開)の翻訳、住吉 章治によるレビューです。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。