【Splunk】ダッシュボードの色を正規表現で色分けする

こんにちは。
SplunkのダッシュボードはGUIで様々なカスタマイズが可能ですが、xmlを直接編集しないとカスタマイズできない項目もあります。この記事では、正規表現やパターンマッチを使ってダッシュボードを色分けする方法を紹介します。

記事で扱うデータは公式のチュートリアル用ファイルのPrices.csvを使用しています。 docs.splunk.com

データの確認

Prices.csvの内容を確認します。

製品名や製品ID、価格などが含まれるテーブルデータです。

GUIで色分け

このデータを、まずはGUIで色分けしてみます。色分けにはスケール、範囲、値の3つのオプションがあり、値は更に自動と規則の定義という2つに分かれます。

それぞれの機能の概要を書きます。

  • スケール
    • 値の大小でグラデーションを作る
    • 数値型のフィールドのみ色分けできる

  • 範囲
    • セルの値の範囲と対応する色を決める
    • 数値型のフィールドのみ色分けできる

    • 自動
      • 異なる値のセルが異なる色になるよう自動で色が決まる
      • ユニークな値が10個あれば10色に塗り分けられてカラフル

  • 規則の定義
    • セルの値と対応する色を決める
    • 値がマッチする条件は完全一致のみ
    • 以下の画像では、セルの値が19.99の場合と24.99の場合に色を塗るよう定義しています

GUIでもだいたいのことはできますが、xmlを直接編集すれば、部分一致などより細かいカスタマイズが可能です。

xmlで色分け

正規表現とパターンマッチを使って、部分一致で色分けを行います。

ダッシュボードの編集画面からソースを開きます。

<dashboard>
  <label>SandBox</label>
  <row>
    <panel>
      <title>色分け</title>
      <table>
        <search>
          <query>index="price" 
| table Code productId product_name price sale_price
| sort Code</query>
          <earliest>0</earliest>
          <latest></latest>
        </search>
        <option name="count">100</option>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
      </table>
    </panel>
  </row>
</dashboard>

<option name="refresh.display">progressbar</option>の下に、以下のコードを追加します。

正規表現の場合

<format type="color" field="productId">
  <colorPalette type="expression">if(match(value,"WC.*"),"#006D9C","")</colorPalette>
</format>

パターンマッチの場合

<format type="color" field="productId">
  <colorPalette type="expression">if(like(value,"WC%"),"#006D9C","")</colorPalette>
</format>

例えば正規表現を使う場合、全体のコードはこうなります。

<dashboard>
  <label>SandBox</label>
  <row>
    <panel>
      <title>色分け</title>
      <table>
        <search>
          <query>index="price" 
| table Code productId product_name price sale_price
| sort Code</query>
          <earliest>0</earliest>
          <latest></latest>
        </search>
        <option name="count">100</option>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
        <format type="color" field="productId">
          <colorPalette type="expression">if(match(value,"WC.*"),"#006D9C","")</colorPalette>
        </format>
      </table>
    </panel>
  </row>
</dashboard>

コードを編集した後のダッシュボードです。

このように、部分一致で複数のセルに色を塗れました。

さいごに

Splunkのダッシュボードは細かいカスタマイズが可能ですが、やりすぎると、他の人が中身を理解できなくなったり、メンテナンスが難しくなったりするので、ほどほどに留めた方が良いと思います。*1

ここまで読んでいただき、ありがとうございました。

*1:Excelでも同じ現象がよく起きますね