はじめてのSplunk ― 概要から応用までを体系的に学ぶ

5-1 可視化のためのコマンド(chart/timechart)

前章までで、Splunkを使用する上で最も基本となる事項を学習しました。 本章からは、Splunk Core Certified Power Userの出題範囲をベースに、Splunkを使ってサーチを行うための少し応用的な知識を学習します。 まずは、視覚化のために使用するTransforming Commandsについて、最も代表的なコマンドであるchart/timechartについて学習します。

1. Transforming Commandsと可視化の関係

前の章で学習したとおり、SPLのコマンドにはいくつかのタイプがあります。そのうち、イベントをデータテーブルフォーマットに変換(Transform)するコマンドをTransforming Commandsと呼びます。

Transforming Commandsは、ダッシュボードによる可視化を行う上で重要です。

フィールドサーチなどでフィルタリングしただけのサーチ結果は、通常、イベントを並べた状態であるイベントリストというフォーマットで表示されています。 折れ線グラフや棒グラフなどで表示するためには、データテーブルフォーマットに変換する必要があります。この変換を行うのがTransformingコマンドです。

前の章では、top/rare/statsなどのコマンドを学習しました。本章では、折れ線グラフなどの可視化で特に重要なchart/timechartをより深く扱います。

2. chartについて

chartは、イベントを視覚化用のテーブルフォーマットに変換するコマンドです。 tableも同じくテーブルへ変換しますが、tableが単にイベントデータを並べるだけなのに対し、chartは視覚化を目的とするため、集計や軸を指定するためのオプションが豊富にある点が異なります。

SPL: chartの例(1)
index=main sourcetype=access_combined_wcookie
| chart avg(bytes) BY host

上記は、x軸をhost、y軸をbytesの平均値としてテーブルデータを作成します。BYで指定したフィールドの値がx軸になります。

y軸を複数の系列に分割したい場合は、OVERとBYを組み合わせます。OVERがx軸、BYがy軸の系列です。

SPL: chartの例(2)
index=main sourcetype=access_combined_wcookie
| chart count OVER host BY status

このようにすることで、x軸をhost、y軸をstatus別の系列に分割してデータテーブルフォーマットで出力できます。

3. timechartについて

timechartもchartに似ているコマンドです。 chartとの違いは、x軸が必ず時間(_time)になる点です。 データの分析を行う際、時系列チャートを作成する機会は特に多いため、こちらのコマンドも頻繁に使用することになるでしょう。

SPL: timechartの例
index=main sourcetype=access_combined_wcookie
| timechart span=1d count BY status

上記は、x軸を時間(_time)、y軸を件数としてstatus毎のデータテーブルを作成しています。 集計間隔指定しているのがspanです。span=1hなら1時間ごと、span=1dなら1日ごとにイベントをまとめることができます。

4. chart/timechartで使う集計関数

chart/timechartのどちらでも、次のような集計関数が使えます。

関数 意味
count イベント件数
sum(field) 数値の合計
avg(field) 平均値
max(field)/min(field) 最大値/最小値
dc(field) 値の種類数(distinct count)
values(field) 出現した値の一覧

複数の関数を並べれば、1回のサーチで複数の系列を同時に集計できます。

SPL: 複数関数を同時に集計
index=main sourcetype=access_combined_wcookie
| timechart span=1d avg(bytes) count

集計したテーブルは、可視化タブで折れ線/棒/エリアグラフなどに切り替えられます。時間推移は折れ線やエリア、カテゴリ比較は棒グラフが見やすい形式です。

5. まとめ

  • Transformingコマンドはイベントを可視化用のテーブルフォーマットに変換するコマンドで、ダッシュボード作成の前提になる
  • chartはx軸に任意のフィールドを置くコマンド。OVERでx軸、BYで系列を指定して2次元のクロス集計を作れる
  • timechartはx軸が必ず時間(_time)になるコマンド。spanで集計間隔、BYで系列を分割する
  • 集計関数にはcount/sum/avg/max/min/dc/valuesなどの関数がある