🎓 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()の仕組み」
- 「別の例で説明して」
など、何でも聞いてください!🎓