10日で覚えるSplunkDay 6: データの可視化

Day 6: データの可視化

今日学ぶこと

  • 可視化の種類(チャートタイプ)
  • ダッシュボードの作成
  • パネルの追加と設定
  • ドリルダウン
  • Simple XMLの基本

可視化の種類

Splunkは検索結果をさまざまなチャートで可視化できます。

flowchart TB
    subgraph Charts["チャートタイプ"]
        Line["折れ線グラフ<br>時系列の推移"]
        Bar["棒グラフ<br>カテゴリ比較"]
        Pie["円グラフ<br>割合"]
        Area["エリアチャート<br>累積推移"]
        Column["カラムチャート<br>縦棒グラフ"]
        Single["シングルバリュー<br>KPI表示"]
    end
    style Line fill:#3b82f6,color:#fff
    style Bar fill:#22c55e,color:#fff
    style Pie fill:#f59e0b,color:#fff
    style Area fill:#8b5cf6,color:#fff
    style Column fill:#ef4444,color:#fff
    style Single fill:#3b82f6,color:#fff
チャートタイプ 用途 適したSPLコマンド
折れ線グラフ 時系列推移 timechart
棒グラフ カテゴリ比較 stats ... by
円グラフ 構成比 stats count by, top
エリアチャート 累積推移 timechart
テーブル 詳細一覧 table
シングルバリュー KPI stats count
ゲージ 閾値表示 stats + 単一値
マップ 地理情報 iplocation + geostats

チャートの選び方

# 折れ線グラフ → 時間推移
index=main | timechart span=1h count

# 棒グラフ → カテゴリ比較
index=main | stats count by host | sort -count

# 円グラフ → 割合
index=main | top limit=5 sourcetype

# シングルバリュー → KPI
index=main | stats count AS total_events

ダッシュボードの作成

Web UIから作成

  1. Dashboards > Create New Dashboard
  2. ダッシュボード名を入力
  3. Dashboard Studio または Classic Dashboards を選択
  4. パネルを追加

サーチからダッシュボードへ

  1. サーチを実行
  2. Save As > Dashboard Panel
  3. 新規ダッシュボードまたは既存ダッシュボードを選択
  4. パネルタイトルを入力

Simple XML

Classic DashboardsはSimple XMLで記述されます。

基本構造

<dashboard>
  <label>Web Server Monitor</label>
  <description>Webサーバーの監視ダッシュボード</description>

  <row>
    <panel>
      <title>Total Requests</title>
      <single>
        <search>
          <query>index=main sourcetype=access_combined | stats count</query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
      </single>
    </panel>

    <panel>
      <title>Error Rate</title>
      <single>
        <search>
          <query>
            index=main sourcetype=access_combined
            | stats count(eval(status>=400)) AS errors, count AS total
            | eval error_rate = round(errors/total*100, 2) . "%"
            | fields error_rate
          </query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
      </single>
    </panel>
  </row>

  <row>
    <panel>
      <title>Requests Over Time</title>
      <chart>
        <search>
          <query>
            index=main sourcetype=access_combined
            | timechart span=1h count by status
          </query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
        <option name="charting.chart">line</option>
      </chart>
    </panel>
  </row>
</dashboard>

パネルタイプ

タグ 説明
<single> シングルバリュー
<chart> チャート(折れ線、棒、円等)
<table> テーブル
<map> マップ
<event> イベントリスト
<html> カスタムHTML

チャートオプション

<chart>
  <search>
    <query>...</query>
  </search>
  <!-- チャートタイプ -->
  <option name="charting.chart">line</option>
  <!-- 凡例の位置 -->
  <option name="charting.legend.placement">bottom</option>
  <!-- Y軸のラベル -->
  <option name="charting.axisTitleY.text">Requests</option>
  <!-- スタック表示 -->
  <option name="charting.chart.stackMode">stacked</option>
</chart>
オプション 説明
charting.chart line, bar, column, pie, area チャートタイプ
charting.chart.stackMode default, stacked, stacked100 スタックモード
charting.legend.placement right, bottom, top, none 凡例位置

入力(Inputs)

ダッシュボードにフィルタ用の入力コントロールを追加できます。

<dashboard>
  <label>Filtered Dashboard</label>

  <fieldset submitButton="true">
    <!-- テキスト入力 -->
    <input type="text" token="keyword">
      <label>Keyword</label>
      <default>*</default>
    </input>

    <!-- ドロップダウン -->
    <input type="dropdown" token="selected_host">
      <label>Host</label>
      <choice value="*">All</choice>
      <search>
        <query>index=main | stats count by host | fields host</query>
      </search>
      <fieldForLabel>host</fieldForLabel>
      <fieldForValue>host</fieldForValue>
      <default>*</default>
    </input>

    <!-- 時間範囲ピッカー -->
    <input type="time" token="time_range">
      <label>Time Range</label>
      <default>
        <earliest>-24h@h</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>

  <row>
    <panel>
      <chart>
        <search>
          <query>
            index=main host=$selected_host$ $keyword$
            | timechart span=1h count
          </query>
          <earliest>$time_range.earliest$</earliest>
          <latest>$time_range.latest$</latest>
        </search>
      </chart>
    </panel>
  </row>
</dashboard>

トークン

トークン 説明
$token_name$ 入力の値を参照
$time_range.earliest$ 時間入力の開始
$time_range.latest$ 時間入力の終了

ドリルダウン

パネルをクリックした時のアクションを定義します。

<chart>
  <search>
    <query>index=main | stats count by host</query>
  </search>
  <drilldown>
    <!-- 新しいサーチを開く -->
    <link target="_blank">
      /app/search/search?q=index%3Dmain%20host%3D$click.value$
    </link>
  </drilldown>
</chart>

<!-- 別のダッシュボードへ遷移 -->
<chart>
  <drilldown>
    <link>/app/search/host_detail?host=$click.value$</link>
  </drilldown>
</chart>
ドリルダウン変数 説明
$click.value$ クリックした値
$click.name$ クリックしたフィールド名
$row.field_name$ クリックした行のフィールド値

ダッシュボード設計のベストプラクティス

flowchart TB
    subgraph Layout["ダッシュボードレイアウト"]
        KPI["最上段: KPIパネル<br>シングルバリュー"]
        Trend["中段: トレンドグラフ<br>折れ線・エリア"]
        Detail["下段: 詳細テーブル<br>テーブル・イベント"]
    end
    KPI --> Trend --> Detail
    style KPI fill:#3b82f6,color:#fff
    style Trend fill:#22c55e,color:#fff
    style Detail fill:#f59e0b,color:#fff
ガイドライン 説明
KPIを上に 重要な数値は最上段に
4パネル/行以下 読みやすさを維持
時間フィルタを共有 グローバルタイムピッカーを使用
ドリルダウンを設定 クリックで詳細へ遷移
色を統一 一貫した色使い

実践: Webサーバー監視ダッシュボード

<dashboard>
  <label>Web Server Monitor</label>

  <fieldset submitButton="false">
    <input type="time" token="time">
      <default>
        <earliest>-24h@h</earliest>
        <latest>now</latest>
      </default>
    </input>
  </fieldset>

  <!-- KPI行 -->
  <row>
    <panel><title>Total Requests</title>
      <single>
        <search>
          <query>index=main sourcetype=access_combined | stats count</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
      </single>
    </panel>
    <panel><title>Unique Visitors</title>
      <single>
        <search>
          <query>index=main sourcetype=access_combined | stats dc(clientip)</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
      </single>
    </panel>
    <panel><title>Error Count</title>
      <single>
        <search>
          <query>index=main sourcetype=access_combined status>=400 | stats count</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
      </single>
    </panel>
  </row>

  <!-- トレンド行 -->
  <row>
    <panel><title>Requests Over Time</title>
      <chart>
        <search>
          <query>index=main sourcetype=access_combined | timechart span=1h count by status</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
        <option name="charting.chart">area</option>
        <option name="charting.chart.stackMode">stacked</option>
      </chart>
    </panel>
  </row>

  <!-- 詳細行 -->
  <row>
    <panel><title>Top URIs</title>
      <table>
        <search>
          <query>index=main sourcetype=access_combined | top limit=10 uri</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
      </table>
    </panel>
    <panel><title>Top Client IPs</title>
      <table>
        <search>
          <query>index=main sourcetype=access_combined | top limit=10 clientip</query>
          <earliest>$time.earliest$</earliest>
          <latest>$time.latest$</latest>
        </search>
      </table>
    </panel>
  </row>
</dashboard>

まとめ

概念 説明
チャートタイプ 折れ線、棒、円、エリア、テーブル、シングルバリュー
ダッシュボード パネルを配置した画面
Simple XML ダッシュボードの記述言語
トークン 入力とパネルを連携させる変数
ドリルダウン クリック時のアクション

重要ポイント

  1. KPI→トレンド→詳細の順にパネルを配置
  2. 時間フィルタはグローバルに共有する
  3. ドリルダウンで詳細への導線を作る
  4. Simple XMLを理解するとカスタマイズの幅が広がる

練習問題

問題1: 基本

3つのKPIパネル(総イベント数、ユニークホスト数、エラー数)を持つダッシュボードを作成してください。

問題2: 応用

ドロップダウンでホストを選択でき、選択したホストのイベント推移と上位URIを表示するダッシュボードを作成してください。

チャレンジ問題

ドリルダウンを設定し、チャートのバーをクリックすると、そのホストの詳細ログが新しいタブで開くダッシュボードを作成してください。


参考リンク


次回予告: Day 7では「サーチの応用」について学びます。サブサーチ、ルックアップ、トランザクションなどの高度なSPLテクニックをマスターしましょう。