0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Splunkダッシュボードスタジオ【図形の動的制御】備忘録いろいろ

Posted at

🎨 ダッシュボードスタジオ【図形の動的制御】完全ガイド

インデックスデータで色・太さ・形状を自動変更!


📌 制御できる要素一覧

ダッシュボードスタジオで制御可能な要素

1. 線の色 (Line Color)
2. 線の太さ (Line Width)
3. 線のスタイル (Line Style: Solid/Dashed/Dotted)
4. マーカー形状 (Marker: Circle/Square/Diamond/Triangle)
5. マーカー色 (Marker Color)
6. マーカーサイズ (Marker Size)
7. エリア塗りつぶし (Area Fill)
8. 透明度 (Opacity)

🎯 パターン1: 線の太さを動的に変更

完成イメージ

データが低い時: 細い線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (細い線)       │
│      │    ╱╲                           │
│  500│  ╱  ╲                           │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

データが高い時: 太い線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (太い線)       │
│      │        ╱━━╲                     │
│  500│      ╱━━━━╲                     │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

SPLコード(1行ずつ解説)

| inputlookup server_data.csv

説明:

  • CSVファイルを読み込むコマンド
  • server_data.csv はアップロード済みのファイル

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")

説明:

  • strptime() で文字列を時刻に変換
  • _time はSplunkの時刻フィールド

| timechart span=30m avg(cpu) as データ値

説明:

  • 30分間隔でCPUの平均値を計算
  • 結果を「データ値」という名前にする

| eval 基準線=1000

説明:

  • Y軸の1000の位置に固定の基準線を作成
  • この値は常に1000(絶対値)

| eval 細線基準=if(データ値<800, 1000, null())

説明:

  • if(条件, 真の時, 偽の時)
  • 条件: データ値 < 800
  • 真の時: 1000 を返す(Y軸1000に線を表示)
  • 偽の時: null() を返す(非表示)
  • 結果: データが800未満の時だけ表示される

| eval 太線基準=if(データ値>=800, 1000, null())

説明:

  • 条件: データ値 >= 800
  • 真の時: 1000 を返す
  • 偽の時: null() を返す
  • 結果: データが800以上の時だけ表示される

UI設定(太さを変える)

Configuration > Series

細線基準の設定:
┌────────────────────────────────────────┐
│  Series: 細線基準                       │
├────────────────────────────────────────┤
│  🎨 Color: #FF0000 (赤)                │
│  📏 Line Width: 2  ← 細い               │
│  ━━ Line Style: Solid                  │
│  [ Apply ]                             │
└────────────────────────────────────────┘

太線基準の設定:
┌────────────────────────────────────────┐
│  Series: 太線基準                       │
├────────────────────────────────────────┤
│  🎨 Color: #FF0000 (赤)                │
│  📏 Line Width: 6  ← 太い               │
│  ━━ Line Style: Solid                  │
│  [ Apply ]                             │
└────────────────────────────────────────┘

結果:

  • データ<800: 細い赤線(Width: 2)
  • データ>=800: 太い赤線(Width: 6)
  • 同じ色だが太さが変わる

🎯 パターン2: 線のスタイルを動的に変更

完成イメージ

通常時: 実線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (実線)         │
│      │    ╱╲                           │
│  500│  ╱  ╲                           │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

警告時: 点線
┌────────────────────────────────────────┐
│ 1000│━ ━ ━ ━ ━ ━ ━ ━ ━ (点線)          │
│      │        ╱╲                       │
│  500│      ╱  ╲                       │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

危険時: ドット
┌────────────────────────────────────────┐
│ 1000│・・・・・・・・・・ (ドット)        │
│      │          ╱╲                     │
│  500│        ╱  ╲                     │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

SPLコード

| inputlookup server_data.csv
  • CSVデータを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • タイムスタンプを時刻に変換

| timechart span=30m avg(cpu) as データ値
  • 30分ごとの平均値を計算

| eval 実線基準=if(データ値<700, 1000, null())

説明:

  • 条件: データ値 < 700
  • 表示: Y=1000に線を表示
  • UI設定で: Solid(実線)に設定

| eval 点線基準=if(データ値>=700 AND データ値<1000, 1000, null())

説明:

  • 条件: 700 ≤ データ値 < 1000
  • 表示: Y=1000に線を表示
  • UI設定で: Dashed(点線)に設定

| eval ドット基準=if(データ値>=1000, 1000, null())

説明:

  • 条件: データ値 >= 1000
  • 表示: Y=1000に線を表示
  • UI設定で: Dotted(ドット)に設定

UI設定(スタイルを変える)

Configuration > Series

実線基準:
┌────────────────────────────────────────┐
│  Color: #0066CC (青)                   │
│  Line Width: 4                         │
│  Line Style: (●) Solid  ← 実線         │
│  [ Apply ]                             │
└────────────────────────────────────────┘

点線基準:
┌────────────────────────────────────────┐
│  Color: #FFA500 (オレンジ)             │
│  Line Width: 4                         │
│  Line Style: (●) Dashed  ← 点線        │
│  [ Apply ]                             │
└────────────────────────────────────────┘

ドット基準:
┌────────────────────────────────────────┐
│  Color: #FF0000 (赤)                   │
│  Line Width: 4                         │
│  Line Style: (●) Dotted  ← ドット      │
│  [ Apply ]                             │
└────────────────────────────────────────┘

🎯 パターン3: マーカー(点)の形状を動的に変更

完成イメージ

データが低い: 丸いマーカー
┌────────────────────────────────────────┐
│ 1000│━━━━●━━━━●━━━━●━━━━                │
│      │    ●    ●                       │
│  500│  ●                              │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

データが高い: ダイヤモンドマーカー
┌────────────────────────────────────────┐
│ 1000│━━━━◆━━━━◆━━━━◆━━━━                │
│      │        ◆    ◆                   │
│  500│      ◆                          │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

SPLコード

| inputlookup server_data.csv
  • CSVファイルを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • タイムスタンプを変換

| timechart span=30m avg(cpu) as データ値
  • 30分ごとに集計

| eval 丸マーカー=if(データ値<800, データ値, null())

説明:

  • 条件: データ値 < 800
  • 真の時: データ値そのものを返す(データに追従)
  • 偽の時: null()(非表示)
  • 重要: 基準線(固定値)ではなく、データラインに使う

| eval ダイヤマーカー=if(データ値>=800, データ値, null())

説明:

  • 条件: データ値 >= 800
  • 真の時: データ値そのものを返す
  • 偽の時: null()
  • データが800以上の時だけダイヤモンド形で表示

UI設定(マーカー形状を変える)

Configuration > Series

丸マーカーの設定:
┌────────────────────────────────────────┐
│  Series: 丸マーカー                     │
├────────────────────────────────────────┤
│  Color: #00FF00 (緑)                   │
│  Line Style: Solid                     │
│  Show Marker: ON  ← 重要               │
│  Marker: (●) Circle  ← 丸              │
│  Marker Size: 8                        │
│  [ Apply ]                             │
└────────────────────────────────────────┘

ダイヤマーカーの設定:
┌────────────────────────────────────────┐
│  Series: ダイヤマーカー                 │
├────────────────────────────────────────┤
│  Color: #FF0000 (赤)                   │
│  Line Style: Solid                     │
│  Show Marker: ON  ← 重要               │
│  Marker: (●) Diamond  ← ダイヤ         │
│  Marker Size: 10                       │
│  [ Apply ]                             │
└────────────────────────────────────────┘

利用可能なマーカー形状:

● Circle    (丸)
■ Square    (四角)
◆ Diamond   (ひし形)
▲ Triangle  (三角)
✕ Cross     (バツ)
+ Plus      (プラス)

🎯 パターン4: エリア塗りつぶし色を動的に変更

完成イメージ

通常時: 緑のエリア
┌────────────────────────────────────────┐
│ 1000│                                  │
│      │    ╱🟢🟢╲                         │
│  500│  ╱🟢🟢🟢🟢╲                       │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

警告時: 赤のエリア
┌────────────────────────────────────────┐
│ 1000│        ╱🔴🔴╲                     │
│      │      ╱🔴🔴🔴🔴╲                   │
│  500│    ╱🔴🔴🔴🔴🔴🔴╲                 │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

SPLコード

| inputlookup server_data.csv
  • CSVファイルを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • タイムスタンプを変換

| timechart span=30m avg(cpu) as データ値
  • 30分ごとの平均値を計算

| eval 緑エリア=if(データ値<800, データ値, null())

説明:

  • 条件: データ値 < 800
  • 真の時: データ値そのものを返す
  • 結果: データが800未満の時、データラインが緑エリアで塗りつぶされる

| eval 赤エリア=if(データ値>=800, データ値, null())

説明:

  • 条件: データ値 >= 800
  • 真の時: データ値そのものを返す
  • 結果: データが800以上の時、データラインが赤エリアで塗りつぶされる

UI設定(エリア塗りつぶし)

Configuration > Visualization

ビジュアライゼーションタイプを変更:
┌────────────────────────────────────────┐
│  Visualization Type:                   │
│  ( ) Line Chart                        │
│  (●) Area Chart  ← これを選択           │
└────────────────────────────────────────┘

Configuration > Series

緑エリアの設定:
┌────────────────────────────────────────┐
│  Series: 緑エリア                       │
├────────────────────────────────────────┤
│  Color: #00FF00 (緑)                   │
│  Opacity: 50%  ← 透明度                │
│  Area Fill: ON                         │
│  [ Apply ]                             │
└────────────────────────────────────────┘

赤エリアの設定:
┌────────────────────────────────────────┐
│  Series: 赤エリア                       │
├────────────────────────────────────────┤
│  Color: #FF0000 (赤)                   │
│  Opacity: 50%                          │
│  Area Fill: ON                         │
│  [ Apply ]                             │
└────────────────────────────────────────┘

🎯 パターン5: 複合制御(色+太さ+スタイル)

完成イメージ

レベル1(データ<500): 細い緑の実線
┌────────────────────────────────────────┐
│ 1000│━━━━━━━━━━━━━━━━━━ (細緑実線)     │
│      │  ╱╲                             │
│  500│╱  ╲                             │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

レベル2(500≤データ<800): 中太黄の点線
┌────────────────────────────────────────┐
│ 1000│━ ━ ━ ━ ━ ━ ━ ━ ━ (中黄点線)      │
│      │      ╱╲                         │
│  500│    ╱  ╲                         │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

レベル3(データ≥800): 太い赤のドット
┌────────────────────────────────────────┐
│ 1000│・・・・・・・・・・ (太赤ドット)    │
│      │          ╱╲                     │
│  500│        ╱  ╲                     │
│      └─────────────────────────→       │
└────────────────────────────────────────┘

SPLコード(完全版)

| inputlookup server_data.csv
  • CSVファイルを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • タイムスタンプを時刻に変換

| timechart span=30m avg(cpu) as データ値
  • 30分間隔でCPUの平均値を計算

| eval レベル1基準=if(データ値<500, 1000, null())

説明:

  • 条件: データ値 < 500
  • 表示: Y軸の1000に基準線
  • UI設定: 細い(Width:2) + 緑 + 実線(Solid)

| eval レベル2基準=if(データ値>=500 AND データ値<800, 1000, null())

説明:

  • 条件: 500 ≤ データ値 < 800
  • 表示: Y軸の1000に基準線
  • UI設定: 中太(Width:4) + 黄 + 点線(Dashed)

| eval レベル3基準=if(データ値>=800, 1000, null())

説明:

  • 条件: データ値 >= 800
  • 表示: Y軸の1000に基準線
  • UI設定: 太い(Width:6) + 赤 + ドット(Dotted)

UI設定表(複合制御)

フィールド名 Line Width Line Style 条件
レベル1基準 #00FF00 緑 2 Solid <500
レベル2基準 #FFFF00 黄 4 Dashed 500-799
レベル3基準 #FF0000 赤 6 Dotted ≥800

🎯 パターン6: 縦線マーカーの動的制御

完成イメージ

通常時: 青い小さい丸
┌────────────────────────────────────────┐
│      ┃       ┃       ┃                │
│ 1000│●      ●       ●                 │
│      │  ╱╲      ╱╲                    │
│  500│╱  ╲    ╱  ╲                    │
│      └─────────────────────────→       │
│       9時   12時   15時               │
└────────────────────────────────────────┘

警告時: 赤い大きいダイヤ
┌────────────────────────────────────────┐
│      ┃       ┃       ┃                │
│ 1000│        ◆                        │
│      │      ╱ ╲                       │
│  500│    ╱     ╲                     │
│      └─────────────────────────→       │
│       9時   12時   15時               │
└────────────────────────────────────────┘

SPLコード

| inputlookup server_data.csv
  • CSVファイルを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • タイムスタンプを変換

| timechart span=1h avg(cpu) as データ値
  • 1時間ごとに集計(縦線マーカー用)

| eval 時刻文字列=strftime(_time, "%H:%M")

説明:

  • strftime() で時刻を文字列に変換
  • "%H:%M" は "09:00" のような形式
  • 特定の時刻を判定するために使用

| eval 青マーカー09時=if(時刻文字列="09:00" AND データ値<800, データ値, null())

説明:

  • 条件1: 時刻文字列 = "09:00"(9時ちょうど)
  • AND
  • 条件2: データ値 < 800(通常レベル)
  • 真の時: データ値を返す(マーカーがデータの高さに表示)
  • UI設定: 青い小さい丸マーカー

| eval 赤マーカー09時=if(時刻文字列="09:00" AND データ値>=800, データ値, null())

説明:

  • 条件1: 時刻 = "09:00"
  • AND
  • 条件2: データ値 >= 800(警告レベル)
  • 真の時: データ値を返す
  • UI設定: 赤い大きいダイヤマーカー

| eval 青マーカー12時=if(時刻文字列="12:00" AND データ値<800, データ値, null())
| eval 赤マーカー12時=if(時刻文字列="12:00" AND データ値>=800, データ値, null())

説明:

  • 12時の位置に同様のマーカーを配置
  • データの値に応じて青/赤が切り替わる

| eval 青マーカー15時=if(時刻文字列="15:00" AND データ値<800, データ値, null())
| eval 赤マーカー15時=if(時刻文字列="15:00" AND データ値>=800, データ値, null())

説明:

  • 15時の位置にマーカーを配置

UI設定(マーカー制御)

Configuration > Series

青マーカー09時:
┌────────────────────────────────────────┐
│  Color: #0066CC (青)                   │
│  Show Line: OFF  ← 線を消す            │
│  Show Marker: ON  ← マーカーのみ表示   │
│  Marker: Circle (●)                    │
│  Marker Size: 6  ← 小さめ              │
│  [ Apply ]                             │
└────────────────────────────────────────┘

赤マーカー09時:
┌────────────────────────────────────────┐
│  Color: #FF0000 (赤)                   │
│  Show Line: OFF                        │
│  Show Marker: ON                       │
│  Marker: Diamond (◆)                   │
│  Marker Size: 12  ← 大きめ             │
│  [ Apply ]                             │
└────────────────────────────────────────┘

重要設定:

  • Show Line: OFF → 線を消してマーカーだけ表示
  • Show Marker: ON → マーカーを表示

🎯 実践: 総合制御(10要素)

全要素を組み合わせた例

| inputlookup server_data.csv
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
| timechart span=30m avg(cpu) as データ値

# === 線の色制御 ===
| eval 緑線=if(データ値<400, データ値, null())
| eval 青線=if(データ値>=400 AND データ値<700, データ値, null())
| eval 赤線=if(データ値>=700, データ値, null())

# === 線の太さ制御 ===
| eval 細基準=if(データ値<500, 1000, null())
| eval 太基準=if(データ値>=500, 1000, null())

# === 線のスタイル制御 ===
| eval 実線基準=if(データ値<600, 800, null())
| eval 点線基準=if(データ値>=600 AND データ値<900, 800, null())
| eval ドット基準=if(データ値>=900, 800, null())

# === マーカー形状制御 ===
| eval 時刻=strftime(_time, "%H:%M")
| eval 丸マーカー=if(時刻="09:00" AND データ値<700, データ値, null())
| eval ダイヤマーカー=if(時刻="09:00" AND データ値>=700, データ値, null())

# === エリア塗りつぶし制御 ===
| eval 緑エリア=if(データ値<500, データ値, null())
| eval 赤エリア=if(データ値>=500, データ値, null())

各行の説明:

# === 線の色制御 ===
  • コメント行(実行されない)
  • コードの区切りとして使用
| eval 緑線=if(データ値<400, データ値, null())
  • データが400未満: 緑の線でデータを表示
  • データが400以上: 非表示
| eval 青線=if(データ値>=400 AND データ値<700, データ値, null())
  • データが400-699: 青の線でデータを表示
| eval 赤線=if(データ値>=700, データ値, null())
  • データが700以上: 赤の線でデータを表示
# === 線の太さ制御 ===
| eval 細基準=if(データ値<500, 1000, null())
  • データが500未満: Y=1000に細い基準線
  • UI設定: Line Width = 2
| eval 太基準=if(データ値>=500, 1000, null())
  • データが500以上: Y=1000に太い基準線
  • UI設定: Line Width = 6
# === 線のスタイル制御 ===
| eval 実線基準=if(データ値<600, 800, null())
  • データが600未満: Y=800に実線の基準線
  • UI設定: Line Style = Solid
| eval 点線基準=if(データ値>=600 AND データ値<900, 800, null())
  • データが600-899: Y=800に点線の基準線
  • UI設定: Line Style = Dashed
| eval ドット基準=if(データ値>=900, 800, null())
  • データが900以上: Y=800にドットの基準線
  • UI設定: Line Style = Dotted
# === マーカー形状制御 ===
| eval 時刻=strftime(_time, "%H:%M")
  • 時刻を "09:00" 形式の文字列に変換
  • 特定時刻の判定に使用
| eval 丸マーカー=if(時刻="09:00" AND データ値<700, データ値, null())
  • 9時 かつ データ<700: 丸マーカーを表示
  • UI設定: Marker = Circle
| eval ダイヤマーカー=if(時刻="09:00" AND データ値>=700, データ値, null())
  • 9時 かつ データ>=700: ダイヤマーカーを表示
  • UI設定: Marker = Diamond
# === エリア塗りつぶし制御 ===
| eval 緑エリア=if(データ値<500, データ値, null())
  • データが500未満: 緑のエリアで塗りつぶし
  • Visualization Type = Area Chart で使用
| eval 赤エリア=if(データ値>=500, データ値, null())
  • データが500以上: 赤のエリアで塗りつぶし

📋 制御要素の設定一覧表

制御要素 SPL UI設定場所 設定値例
線の色 eval 緑線=if(条件, データ値, null()) Series > Color #00FF00
線の太さ eval 細線=if(条件, 1000, null()) Series > Line Width 2 / 6
線のスタイル eval 実線=if(条件, 1000, null()) Series > Line Style Solid/Dashed/Dotted
マーカー形状 eval 丸=if(条件, データ値, null()) Series > Marker Circle/Diamond/Square
マーカーサイズ 同上 Series > Marker Size 6 / 12
マーカー色 同上 Series > Color #FF0000
エリア塗り eval 緑エリア=if(条件, データ値, null()) Visualization Type Area Chart
透明度 同上 Series > Opacity 30% / 70%
線表示/非表示 同上 Series > Show Line ON / OFF
マーカー表示/非表示 同上 Series > Show Marker ON / OFF

💡 重要ポイント

✅ データラインと基準線の違い

# データライン(データに追従)
| eval 緑線=if(データ値<800, データ値, null())
                           ↑
                      データ値そのもの

# 基準線(固定値)
| eval 緑基準=if(データ値<800, 1000, null())
                            ↑
                        固定値1000

使い分け:

  • データライン: 色やマーカーを変えたい時
  • 基準線: 閾値ラインを引きたい時

✅ マーカーのみ表示する方法

UI設定:
┌────────────────────────────────────────┐
│  Show Line: OFF  ← 線を消す            │
│  Show Marker: ON  ← マーカーだけ表示   │
└────────────────────────────────────────┘

SPL:
| eval マーカー=if(時刻="09:00", データ値, null())
                               ↑
                          データ値を使う

✅ 複数条件の組み合わせ

# AND(かつ)
| eval 線=if(条件1 AND 条件2, 値, null())
              ↑     ↑
           両方とも真の時

# OR(または)
| eval 線=if(条件1 OR 条件2, 値, null())
              ↑    ↑
          どちらか真の時

# 複雑な条件
| eval 線=if((条件1 AND 条件2) OR 条件3, 値, null())

🔧 トラブルシューティング

Q1: マーカーが表示されない

原因:

Show Marker: OFF になっている

解決:

Configuration > Series > マーカー名
┌────────────────────────────────────────┐
│  Show Marker: ON  ← これをONにする     │
│  Marker: Circle                        │
│  Marker Size: 8                        │
└────────────────────────────────────────┘

Q2: 線の太さが変わらない

原因:

同じフィールド名を使っている

解決:

❌ 間違い:
| eval 基準線=if(データ値<500, 1000, null())
| eval 基準線=if(データ値>=500, 1000, null())
       ↑
    同じ名前(上書きされる)

✅ 正しい:
| eval 細基準=if(データ値<500, 1000, null())
| eval 太基準=if(データ値>=500, 1000, null())
       ↑      ↑
    別々の名前

Q3: エリアが塗りつぶされない

原因:

Visualization Typeが Line Chart のまま

解決:

Configuration
┌────────────────────────────────────────┐
│  Visualization Type:                   │
│  (●) Area Chart  ← これを選択           │
└────────────────────────────────────────┘

📊 完全版サンプルコード

| inputlookup server_data.csv
  ↑ CSVファイルを読み込む

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  ↑ タイムスタンプを時刻に変換

| timechart span=30m avg(cpu) as データ値
  ↑ 30分ごとの平均値を計算

# 色制御: 3段階
| eval 緑線=if(データ値<500, データ値, null())
  ↑ データ<500: 緑の線

| eval 黄線=if(データ値>=500 AND データ値<800, データ値, null())
  ↑ データ500-799: 黄色の線

| eval 赤線=if(データ値>=800, データ値, null())
  ↑ データ>=800: 赤の線

# 太さ制御: 基準線
| eval 細基準=if(データ値<700, 1000, null())
  ↑ データ<700: 細い基準線(Width: 2)

| eval 太基準=if(データ値>=700, 1000, null())
  ↑ データ>=700: 太い基準線(Width: 6)

# スタイル制御: 基準線
| eval 実線基準=if(データ値<600, 800, null())
  ↑ データ<600: 実線基準線(Solid)

| eval 点線基準=if(データ値>=600, 800, null())
  ↑ データ>=600: 点線基準線(Dashed)

# マーカー制御: 時刻ポイント
| eval 時刻=strftime(_time, "%H:%M")
  ↑ 時刻を文字列化

| eval 青丸=if(時刻="09:00" AND データ値<700, データ値, null())
  ↑ 9時でデータ<700: 青い丸マーカー

| eval 赤ダイヤ=if(時刻="09:00" AND データ値>=700, データ値, null())
  ↑ 9時でデータ>=700: 赤いダイヤマーカー

🔬 インデックス使う vs 使わない【スモールテスト完全版】

3つの方法を比較!最速テスト手順


📌 3つの方法の比較

┌─────────────────────────────────────────────────┐
│  方法1: インデックスを使わない(makeresults)    │
│  ・最速(0分)                                   │
│  ・データ投入不要                                │
│  ・一時的なテストに最適                          │
│  ・ダッシュボードを閉じるとデータ消える          │
└─────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────┐
│  方法2: インデックスを使わない(CSV Lookup)     │
│  ・速い(5分)                                   │
│  ・CSVアップロードのみ                           │
│  ・データ再利用可能                              │
│  ・ダッシュボード間で共有可能                    │
└─────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────┐
│  方法3: インデックスを使う(本番運用)           │
│  ・遅い(10-15分)                               │
│  ・インデックス作成+データ投入                  │
│  ・本番環境向け                                  │
│  ・大量データに対応                              │
└─────────────────────────────────────────────────┘

🚀 方法1: インデックス使わない【最速0分】makeresults

特徴

✅ メリット:
・コピペだけで即実行
・インデックス不要
・CSV不要
・1分で動作確認完了

❌ デメリット:
・ダッシュボードを閉じるとデータ消える
・毎回データ生成が必要
・大量データには不向き

スモールテスト: 2色基準線(最小構成)

SPLコード(コピペ用)

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table _time データ値 緑基準線 赤基準線

各行の説明:

| makeresults count=20
  • makeresults → ダミーデータを作るコマンド
  • count=20 → 20行のデータを作成
  • 結果: 20行の空データが生成される

| streamstats count as カウンター
  • streamstats → 各行に連番を振るコマンド
  • count as カウンター → 1, 2, 3... という連番
  • 結果: 各行に1~20の番号が付く

| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
  • relative_time(now(), ...) → 現在時刻から相対的な時刻を計算
  • now() → 現在時刻
  • "-" + カウンター*30 + "m" → カウンター×30分前
  • 例:
    • カウンター=1 → 30分前
    • カウンター=2 → 60分前(1時間前)
    • カウンター=20 → 600分前(10時間前)
  • 結果: 30分刻みの時刻が生成される

| eval データ値=500 + (random()%600)
  • random() → ランダムな数値を生成
  • random()%600 → 0~599のランダム値
  • 500 + → 500を足す
  • 結果: 500~1099の範囲のランダム値

| eval 緑基準線=if(データ値<700, 1000, null())
  • if(条件, 真, 偽) → 条件分岐
  • 条件: データ値 < 700
  • 真の時: 1000(Y軸の1000に線を表示)
  • 偽の時: null()(非表示)

| eval 赤基準線=if(データ値>=700, 1000, null())
  • 条件: データ値 >= 700
  • 真の時: 1000を返す
  • 偽の時: null()を返す

| table _time データ値 緑基準線 赤基準線
  • table → 指定したフィールドだけをテーブル表示
  • グラフ化の準備
  • 結果: 必要なフィールドだけが残る

実行手順(30秒)

STEP 1: Search & Reporting を開く
┌─────────────────────────────────────┐
│  🔍 Search & Reporting  ← クリック  │
└─────────────────────────────────────┘

STEP 2: クエリをコピペ
┌─────────────────────────────────────┐
│  New Search                         │
│  ┌───────────────────────────────┐ │
│  │ 上記のSPLコードを貼り付け     │ │
│  └───────────────────────────────┘ │
│  [ 🔍 Search ]  ← クリック         │
└─────────────────────────────────────┘

STEP 3: Visualization タブをクリック
┌─────────────────────────────────────┐
│  [ Statistics ]  [ Visualization ]  │
│                        ↑            │
│                      クリック         │
└─────────────────────────────────────┘

STEP 4: Line Chart を選択
┌─────────────────────────────────────┐
│  📊 Line Chart  ← クリック           │
└─────────────────────────────────────┘

完成! グラフが表示されます。


グラフ化バージョン(timechart使用)

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

追加された行の説明:

| timechart span=30m first(データ値) as データ値
  • timechart → 時系列グラフを作成
  • span=30m → 30分間隔
  • first(データ値) → 各時間帯の最初の値を取得
  • 結果: グラフ用のデータ形式に変換される

🎯 方法2: インデックス使わない【5分】CSV Lookup

特徴

✅ メリット:
・データを再利用できる
・複数のダッシュボードで共有
・データが保存される
・アップロードだけで完了

❌ デメリット:
・CSVファイルの準備が必要
・アップロード手順が必要

スモールテスト: CSV最小構成(10行)

CSVデータ作成

ファイル名: test_mini.csv

メモ帳に以下をコピペして保存:

timestamp,value
2026-01-22 10:00:00,600
2026-01-22 10:30:00,550
2026-01-22 11:00:00,750
2026-01-22 11:30:00,820
2026-01-22 12:00:00,680
2026-01-22 12:30:00,590
2026-01-22 13:00:00,730
2026-01-22 13:30:00,890
2026-01-22 14:00:00,640
2026-01-22 14:30:00,710

保存手順:

1. メモ帳を開く
2. 上記をコピペ
3. ファイル > 名前を付けて保存
4. ファイル名: test_mini.csv
5. ファイルの種類: すべてのファイル
6. 文字コード: UTF-8
7. 保存

アップロード手順(2分)

STEP 1: Settings > Lookups
┌─────────────────────────────────────┐
│  Settings > Lookups                 │
│    > Lookup table files             │
└─────────────────────────────────────┘

STEP 2: New Lookup Table File
┌─────────────────────────────────────┐
│  [ + New Lookup Table File ]        │
│           ↑                         │
│         クリック                     │
└─────────────────────────────────────┘

STEP 3: ファイル選択
┌─────────────────────────────────────┐
│  Destination app: Search & Reporting│
│  Upload file: [ 参照 ]  ← クリック  │
│    test_mini.csv を選択             │
│  [ Save ]  ← クリック                │
└─────────────────────────────────────┘

SPLコード

| inputlookup test_mini.csv
| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

各行の説明:

| inputlookup test_mini.csv
  • inputlookup → アップロードしたCSVを読み込む
  • test_mini.csv → ファイル名
  • 結果: CSVの全データが読み込まれる

| eval _time=strptime(timestamp, "%Y-%m-%d %H:%M:%S")
  • strptime → 文字列を時刻に変換する関数
  • timestamp → CSVのタイムスタンプ列
  • "%Y-%m-%d %H:%M:%S" → 日付のフォーマット
  • 結果: "2026-01-22 10:00:00" が Splunkの時刻型に変換

| timechart span=30m avg(value) as データ値
  • 30分ごとにvalueの平均値を計算
  • 結果を「データ値」という名前にする

| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
  • 条件によって表示/非表示を切り替え

🏗️ 方法3: インデックス使う【15分】本番運用

特徴

✅ メリット:
・大量データに対応
・高速検索
・本番運用向け
・永続的にデータ保存

❌ デメリット:
・インデックス作成が必要
・データ投入に時間がかかる
・設定が複雑

スモールテスト: 最小インデックス(20イベント)

STEP 1: テストインデックス作成(2分)

Settings > Indexes
┌─────────────────────────────────────┐
│  [ + New Index ]  ← クリック         │
└─────────────────────────────────────┘

インデックス作成画面
┌─────────────────────────────────────┐
│  Index Name:                        │
│  [test_small_______________]        │
│                                     │
│  Max Size of Entire Index:          │
│  [100] MB  (小さく設定)              │
│                                     │
│  [ Save ]  ← クリック                │
└─────────────────────────────────────┘

STEP 2: データ投入(5分)

方法A: makeresultsから投入(簡単)
| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
| eval value=500 + (random()%600)
| eval _raw=_time + " value=" + value
| collect index=test_small sourcetype=test:log

各行の説明:

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
  • 20行のデータを作成
  • 時刻を30分刻みで設定

| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
  • Splunkのメタデータを設定
  • host → サーバー名
  • source → データソース
  • sourcetype → ログの種類

| eval value=500 + (random()%600)
  • 500~1099のランダム値を生成

| eval _raw=_time + " value=" + value
  • _raw → Splunkのイベントテキスト
  • 実際のログメッセージを作成
  • 例: "1737528000 value=750"

| collect index=test_small sourcetype=test:log
  • collect → インデックスにデータを投入するコマンド
  • index=test_small → 投入先のインデックス名
  • sourcetype=test:log → ソースタイプを指定
  • 結果: 20イベントがインデックスに書き込まれる

実行:

Search & Reporting で上記コードを実行
完了まで数秒~数十秒待つ

完了メッセージ:
✅ 20 events written to index=test_small

STEP 3: データ確認(1分)

index=test_small
| table _time host value

結果:

_time                host         value
2026-01-22 10:00:00  test-server  650
2026-01-22 10:30:00  test-server  720
2026-01-22 11:00:00  test-server  580
...

データが表示されればOK!


STEP 4: グラフ作成(2分)

index=test_small sourcetype=test:log
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

各行の説明:

index=test_small sourcetype=test:log
  • index=test_small → test_smallインデックスから検索
  • sourcetype=test:log → test:log タイプのイベントのみ
  • 結果: 投入した20イベントが取得される

| timechart span=30m avg(value) as データ値
  • 30分ごとにvalueの平均値を計算

| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
  • 条件によって基準線の色を変える

📊 3つの方法の比較表

項目 makeresults CSV Lookup Index投入
所要時間 30秒 5分 15分
準備 なし CSVファイル インデックス作成
データ永続性 ❌ なし ✅ あり ✅ あり
再利用 ❌ 不可 ✅ 可能 ✅ 可能
大量データ ❌ 不向き ⚠️ 制限あり ✅ 対応
速度 ⚡ 最速 🚀 速い 🐢 遅い
本番運用 ❌ 不可 ⚠️ 限定的 ✅ 推奨
難易度 ⭐ 簡単 ⭐⭐ 普通 ⭐⭐⭐ 難しい

🎯 状況別おすすめ

今すぐテストしたい → makeresults

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

理由:

  • コピペだけで即実行
  • 0分で動作確認完了
  • 何度でも試せる

データを保存したい → CSV Lookup

1. CSVファイル作成(10行程度)
2. アップロード
3. inputlookup で読み込み

理由:

  • データが永続的に保存される
  • 複数のダッシュボードで使い回せる
  • 簡単に修正できる

本番運用する → Index投入

1. インデックス作成
2. データ投入(collectコマンド)
3. index=xxx で検索

理由:

  • 大量データに対応
  • 高速検索
  • Splunkの標準的な使い方

🔬 超スモールテスト(最小構成)

1行で完結する最小テスト

| makeresults | eval _time=now(), データ値=800, 緑線=if(データ値<700,1000,null()), 赤線=if(データ値>=700,1000,null()) | table _time データ値 緑線 赤線

説明:

  • 1イベントだけ作成
  • データ値=800を設定
  • 条件判定(800>=700なので赤線が表示される)
  • テーブル表示

結果:

_time                データ値  緑線  赤線
2026-01-22 15:30:00  800      null  1000
                              ↑    ↑
                            非表示 表示

3行で完結する最小テスト

| makeresults count=3
| eval データ値=500+(random()%600)
| eval 緑線=if(データ値<700,1000,null()), 赤線=if(データ値>=700,1000,null())

説明:

  • 3イベント作成
  • ランダム値を生成
  • 条件判定

💡 デバッグ用コマンド

データの中身を確認

# makeresultsのデータ確認
| makeresults count=5
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500 + (random()%600)
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table _time データ値 緑基準線 赤基準線
  ↑ これでテーブル表示して確認

確認ポイント:

_time: 時刻が正しく設定されているか
データ値: 500~1100の範囲か
緑基準線: データ値<700の時だけ1000
赤基準線: データ値>=700の時だけ1000

条件の動作確認

| makeresults count=10
| eval データ値=random()%1000
| eval 判定結果=if(データ値<700, "緑が表示", "赤が表示")
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())
| table データ値 判定結果 緑基準線 赤基準線

結果例:

データ値  判定結果      緑基準線  赤基準線
650      緑が表示      1000     null
820      赤が表示      null     1000
580      緑が表示      1000     null
750      赤が表示      null     1000

📋 完全コピペコード集

コード1: 超最小(2色、10行)

| makeresults count=10
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=500+(random()%600)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

コード2: 標準(3色、20行)

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval データ値=400+(random()%700)
| timechart span=30m first(データ値) as データ値
| eval 緑基準線=if(データ値<600, 1000, null())
| eval 黄基準線=if(データ値>=600 AND データ値<900, 1000, null())
| eval 赤基準線=if(データ値>=900, 1000, null())

コード3: インデックス投入版

| makeresults count=20
| streamstats count as カウンター
| eval _time=relative_time(now(), "-" + カウンター*30 + "m")
| eval host="test-server"
| eval source="test-app"
| eval sourcetype="test:log"
| eval value=500+(random()%600)
| eval _raw=_time + " value=" + value
| collect index=test_small sourcetype=test:log

投入後の検索:

index=test_small
| timechart span=30m avg(value) as データ値
| eval 緑基準線=if(データ値<700, 1000, null())
| eval 赤基準線=if(データ値>=700, 1000, null())

🎓 eval完全ガイド【超初心者向け】

うさぎさんでもわかる!Splunkの基本


🐰 evalって何?【うさうさラーメン店で例える】

イメージ図

うさうさラーメン店のオーダー表

元のデータ(注文伝票)
┌──────────────────────────┐
│ 時刻    ラーメン  餃子    │
│ 12:00   1杯      0個     │
│ 12:30   2杯      1個     │
│ 13:00   1杯      1個     │
└──────────────────────────┘

evalで計算(合計金額を追加)
┌─────────────────────────────────────┐
│ 時刻    ラーメン  餃子   合計金額   │
│ 12:00   1杯      0個    800円  ← 新しい列!
│ 12:30   2杯      1個    2000円      │
│ 13:00   1杯      1個    1200円      │
└─────────────────────────────────────┘
       ↑
  evalで「合計金額」という新しい列を作った

evalは「新しい列を追加する魔法」です!


📝 evalの基本形

文法

| eval 新しい列の名前 = 計算式

Excelで例えると:

Excelの新しい列に
=A1+B1
と入力するのと同じ!

🎯 例1: 簡単な計算【足し算】

Splunkデータ

元のデータ
┌──────────────────────┐
│ りんご   みかん       │
│ 3個      5個         │
│ 2個      4個         │
└──────────────────────┘

evalで合計を作る

| eval 合計 = りんご + みかん

結果:

┌──────────────────────────────┐
│ りんご   みかん   合計        │
│ 3個      5個     8個  ← 新登場!
│ 2個      4個     6個         │
└──────────────────────────────┘

何が起きた?

  • eval → 「新しい列を作るよ」という命令
  • 合計 → 新しい列の名前
  • = → 「これと等しい」
  • りんご + みかん → 計算式

🎯 例2: 固定の数字を入れる

基準線を作る時に使う

| eval 基準線 = 1000

結果:

┌──────────────────────┐
│ 時刻      基準線     │
│ 10:00     1000       │
│ 10:30     1000       │
│ 11:00     1000       │
│ 11:30     1000       │
└──────────────────────┘
    ↑
全部の行に1000が入る

グラフにすると:

1000│━━━━━━━━━━━━━ ← まっすぐの横線
 500│
    └────────────────→
     時刻

🎯 例3: 条件分岐【if文】

これが基準線の色を変える秘密!

| eval 判定 = if(点数 >= 60, "合格", "不合格")

意味:

もし 点数が60以上なら
    「合格」
それ以外なら
    「不合格」

データの変化:

元のデータ
┌──────────┐
│ 点数     │
│ 80       │
│ 45       │
│ 70       │
│ 55       │
└──────────┘

↓ evalで判定列を追加

┌──────────────────┐
│ 点数   判定       │
│ 80     合格  ← 80>=60なので合格
│ 45     不合格 ← 45<60なので不合格
│ 70     合格       │
│ 55     不合格     │
└──────────────────┘

🎯 例4: null()の使い方【非表示の魔法】

なぜnull()が必要?

グラフに線を引く時
・表示したい時 → 数字を入れる(例: 1000)
・表示したくない時 → null() を入れる

例: データが高い時だけ赤線を表示

| eval 赤線 = if(データ値 >= 800, 1000, null())

データの変化:

元のデータ
┌────────────┐
│ データ値   │
│ 750        │
│ 850        │
│ 600        │
│ 900        │
└────────────┘

↓ evalで赤線列を追加

┌──────────────────────┐
│ データ値   赤線       │
│ 750        null  ← 750<800なので非表示
│ 850        1000  ← 850>=800なので表示
│ 600        null  ← 600<800なので非表示
│ 900        1000  ← 900>=800なので表示
└──────────────────────┘

グラフでは:

1000│        ━━━━  ━━━━ ← 赤線
    │   ╱╲  ╱╲  ╱╲      ← データライン
 500│ ╱  ╲╱  ╲╱  ╲
    └─────────────────→
     750  850  600  900
     非表示 表示 非表示 表示

🎨 実際の基準線の作り方【完全分解】

ステップ1: データを用意

元データ
┌────────────────────┐
│ 時刻      CPU使用率│
│ 10:00     650      │
│ 10:30     780      │
│ 11:00     550      │
│ 11:30     820      │
└────────────────────┘

ステップ2: 緑の線を作る(低い時)

| eval 緑線 = if(CPU使用率 < 700, 1000, null())

何をしている?

もし CPU使用率が700未満なら
    1000(Y軸の1000の位置に線を引く)
それ以外なら
    null()(線を引かない)

結果:

┌───────────────────────────────┐
│ 時刻    CPU使用率  緑線       │
│ 10:00   650       1000  ← 650<700なので表示
│ 10:30   780       null  ← 780>=700なので非表示
│ 11:00   550       1000  ← 550<700なので表示
│ 11:30   820       null  ← 820>=700なので非表示
└───────────────────────────────┘

ステップ3: 赤の線を作る(高い時)

| eval 赤線 = if(CPU使用率 >= 700, 1000, null())

何をしている?

もし CPU使用率が700以上なら
    1000(Y軸の1000の位置に線を引く)
それ以外なら
    null()(線を引かない)

結果:

┌─────────────────────────────────────┐
│ 時刻    CPU使用率  緑線    赤線     │
│ 10:00   650       1000   null ← 緑だけ
│ 10:30   780       null   1000 ← 赤だけ
│ 11:00   550       1000   null ← 緑だけ
│ 11:30   820       null   1000 ← 赤だけ
└─────────────────────────────────────┘

ステップ4: グラフにする

1000│━━━━        ━━━━        ━━━━
    │🟢  🟢      🔴  🔴      🟢  🟢 ← 基準線の色が変わる
    │  ╱╲  ╱╲  ╱╲  ╱╲
 500│╱  ╲╱  ╲╱  ╲╱  ╲
    └───────────────────────→
     10:00 10:30 11:00 11:30
     緑   赤    緑   赤

📚 evalの部品【辞書】

計算

| eval 合計 = A + B          # 足し算
| eval 差 = A - B            # 引き算
| eval 積 = A * B            # 掛け算
| eval 商 = A / B            # 割り算

例:

| eval 合計金額 = ラーメン代 + 餃子代
| eval 値引き後 = 定価 - 割引額
| eval 面積 = 縦 * 横
| eval 平均 = 合計 / 個数

比較(条件を作る)

A < B     # AはBより小さい(未満)
A <= B    # AはB以下
A > B     # AはBより大きい(超過)
A >= B    # AはB以上
A = B     # AとBは同じ
A != B    # AとBは違う

例:

点数 >= 60       # 点数が60以上
気温 < 20        # 気温が20度未満
在庫 = 0         # 在庫がゼロ
年齢 != 20       # 年齢が20歳ではない

論理演算子(複数の条件)

条件A AND 条件B   # 両方とも当てはまる
条件A OR 条件B    # どちらか当てはまる

例:

点数 >= 60 AND 出席日数 >= 10
# 点数が60以上 かつ 出席日数が10日以上

気温 < 10 OR 気温 > 35
# 気温が10度未満 または 35度超過

if文(条件分岐)

if(条件, 条件が当てはまる時, 当てはまらない時)

例:

| eval 判定 = if(点数 >= 60, "合格", "不合格")

意味:
もし 点数が60以上なら
    「合格」を入れる
そうでなければ
    「不合格」を入れる

null()(非表示)

null()   # 何も表示しない

使い方:

| eval 線 = if(条件, 1000, null())

意味:
条件が当てはまる時 → 1000(線を表示)
条件が当てはまらない時 → null()(線を非表示)

🎓 練習問題【段階的に理解】

レベル1: 固定値を入れる

問題:

全ての行に「100」という数字を入れた「目標」という列を作ってください

答え:

| eval 目標 = 100

結果:

┌──────────┐
│ 目標     │
│ 100      │
│ 100      │
│ 100      │
└──────────┘

レベル2: 足し算

問題:

国語が80点、数学が70点。合計点を計算してください

答え:

| eval 合計点 = 国語 + 数学

結果:

┌──────────────────────────┐
│ 国語  数学  合計点        │
│ 80    70    150           │
└──────────────────────────┘

レベル3: 条件分岐(簡単)

問題:

点数が60以上なら「合格」、60未満なら「不合格」と表示してください

答え:

| eval 結果 = if(点数 >= 60, "合格", "不合格")

結果:

┌──────────────────┐
│ 点数   結果      │
│ 80     合格      │
│ 45     不合格    │
│ 70     合格      │
└──────────────────┘

レベル4: null()を使う

問題:

点数が80以上の時だけ「優秀」と表示し、それ以外は何も表示しないでください

答え:

| eval 評価 = if(点数 >= 80, "優秀", null())

結果:

┌──────────────────┐
│ 点数   評価      │
│ 85     優秀      │
│ 70     null      │
│ 90     優秀      │
│ 65     null      │
└──────────────────┘

レベル5: 基準線(実践)

問題:

データ値が700未満の時、Y軸の1000の位置に線を表示してください

答え:

| eval 緑線 = if(データ値 < 700, 1000, null())

結果:

┌──────────────────────┐
│ データ値   緑線      │
│ 650        1000      │
│ 780        null      │
│ 550        1000      │
└──────────────────────┘

🔍 実際の動きを見てみよう

実行できるコード(今すぐ試せる)

| makeresults
| eval 国語=80
| eval 数学=70
| eval 合計=国語+数学
| eval 判定=if(合計>=140, "合格", "不合格")
| table 国語 数学 合計 判定

実行手順:

1. Splunk > Search & Reporting
2. 上記のコードをコピペ
3. Search ボタンをクリック

結果:

┌─────────────────────────────────┐
│ 国語  数学  合計  判定          │
│ 80    70    150   合格          │
└─────────────────────────────────┘

動きを確認(1行ずつ)

| makeresults

結果:

空のデータ1行ができる

| eval 国語=80

結果:

┌──────┐
│ 国語 │
│ 80   │
└──────┘

| eval 数学=70

結果:

┌──────────────┐
│ 国語  数学   │
│ 80    70     │
└──────────────┘

| eval 合計=国語+数学

結果:

┌────────────────────┐
│ 国語  数学  合計   │
│ 80    70    150    │
└────────────────────┘

| eval 判定=if(合計>=140, "合格", "不合格")

結果:

┌──────────────────────────────┐
│ 国語  数学  合計  判定        │
│ 80    70    150   合格        │
└──────────────────────────────┘

150 >= 140 なので「合格」が入る!


🎯 基準線の完全理解【最終確認】

全体のコード

| makeresults count=5
| streamstats count as 番号
| eval データ値=500+(番号*100)
| eval 緑線=if(データ値<700, 1000, null())
| eval 赤線=if(データ値>=700, 1000, null())
| table データ値 緑線 赤線

1行ずつ解説

| makeresults count=5
  • 5行の空データを作る

| streamstats count as 番号
  • 1,2,3,4,5 という番号を振る

| eval データ値=500+(番号*100)
  • 番号=1 → 500+100=600
  • 番号=2 → 500+200=700
  • 番号=3 → 500+300=800
  • 番号=4 → 500+400=900
  • 番号=5 → 500+500=1000

結果:

┌──────────────┐
│ データ値     │
│ 600          │
│ 700          │
│ 800          │
│ 900          │
│ 1000         │
└──────────────┘

| eval 緑線=if(データ値<700, 1000, null())
  • 600 < 700 → 真 → 1000
  • 700 < 700 → 偽 → null
  • 800 < 700 → 偽 → null
  • 900 < 700 → 偽 → null
  • 1000 < 700 → 偽 → null

結果:

┌────────────────────┐
│ データ値  緑線     │
│ 600       1000     │
│ 700       null     │
│ 800       null     │
│ 900       null     │
│ 1000      null     │
└────────────────────┘

| eval 赤線=if(データ値>=700, 1000, null())
  • 600 >= 700 → 偽 → null
  • 700 >= 700 → 真 → 1000
  • 800 >= 700 → 真 → 1000
  • 900 >= 700 → 真 → 1000
  • 1000 >= 700 → 真 → 1000

最終結果:

┌──────────────────────────────┐
│ データ値  緑線    赤線        │
│ 600       1000   null  ← 緑だけ
│ 700       null   1000  ← 赤だけ
│ 800       null   1000  ← 赤だけ
│ 900       null   1000  ← 赤だけ
│ 1000      null   1000  ← 赤だけ
└──────────────────────────────┘

📝 まとめ【これだけ覚えればOK】

evalの3つの役割

1. 新しい列を作る
   | eval 新しい列名 = 値

2. 計算する
   | eval 合計 = A + B

3. 条件で分ける
   | eval 結果 = if(条件, 真の時, 偽の時)

基準線を作る公式

| eval 線の名前 = if(条件, 表示位置, null())

具体例:

| eval 緑線 = if(データ値<700, 1000, null())
       ↑         ↑         ↑     ↑
     名前      条件     位置   非表示

🎓 超簡単バージョン(コピペ用)

2色の基準線(最小構成)

| makeresults count=10
| streamstats count as c
| eval v=500+(c*50)
| eval g=if(v<700,1000,null())
| eval r=if(v>=700,1000,null())
| table v g r

実行: Search & Reportingに貼り付けて実行!

見方:

  • v = データ値
  • g = 緑線(データが700未満の時だけ1000)
  • r = 赤線(データが700以上の時だけ1000)

わかりましたか?😊

もっと詳しく知りたい部分があれば教えてください!

  • 「ifをもっと詳しく」
  • 「null()の仕組み」
  • 「別の例で説明して」

など、何でも聞いてください!🎓


これで、ダッシュボードスタジオでインデックスデータによって図形(色・太さ・スタイル・マーカー)を動的に制御する方法のスキルを手に入れました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?