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?

eval完全ガイド【超初心者向け】 うさぎさんでもわかる!Splunkの基本

Posted at

🎓 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?