メインコンテンツへスキップ

🌈 Splunk データフロー カラフル完全図解の備忘録

    # 🌈 Splunk データフロー カラフル完全図解
    
    
    
    ---
    
    ## 🎨 1. データフローの全体像(カラフル版)
    
    ```
    ┌─────────────────────────────────────────────────────────────┐
    │           🎯 Splunk データの旅 - カラフルマップ                │
    └─────────────────────────────────────────────────────────────┘
    
    
    🟦 ステップ1: データ保管
    ╔═══════════════════╗
    ║   📦 インデックス   ║  ← 青色 = データの源
    ║   (web_logs)      ║     冷蔵庫のイメージ
    ╚═══════════════════╝
             │
             │ SPL検索で取り出す
             ▼
             
    🟩 ステップ2: 値の保管・受け渡し
    ╔═══════════════════╗
    ║   💼 トークン      ║  ← 緑色 = 値を運ぶ箱
    ║   $status$ = 200  ║     配達ボックス
    ╚═══════════════════╝
             │
             │ 値を埋め込んで使用
             ▼
             
    🟨 ステップ3: 表示
    ╔═══════════════════╗
    ║   📊 チャート      ║  ← 黄色 = ユーザーに見せる
    ║   グラフ・テーブル  ║     お皿に盛り付け
    ╚═══════════════════╝
    
    
    【色の意味】
    🟦 青 = データソース(インデックス)
    🟩 緑 = データ転送(トークン)
    🟨 黄 = データ表示(チャート)
    🟥 赤 = ユーザー操作(入力・クリック)
    🟪 紫 = 条件分岐(制御)
    ```
    
    ---
    
    ## 🎨 2. 5大パターンのカラフル図解
    
    ### **パターン① 直接ルート(シンプル)**
    
    ```
    ┌─────────────────────────────────────────────┐
    │  🔵 パターンA: 直接ルート                    │
    │  トークンを使わない最もシンプルな方法         │
    └─────────────────────────────────────────────┘
    
        🟦 データソース
        ┌──────────┐
        │インデックス│
        │ web_logs  │
        └─────┬────┘
              │
              │ 🔍 SPL検索
              │ index=web_logs | stats count
              │
              ▼
        🟨 表示
        ┌──────────┐
        │ チャート  │
        │ 📊 グラフ │
        └──────────┘
    
    【特徴】
    ✅ 最もシンプル
    ✅ 静的なダッシュボード向き
    ❌ ユーザー操作で変えられない
    ```
    
    ---
    
    ### **パターン② トークン経由(インタラクティブ)**
    
    ```
    ┌─────────────────────────────────────────────┐
    │  🟢 パターンB: トークン経由                   │
    │  ユーザー入力で動的に変わるダッシュボード      │
    └─────────────────────────────────────────────┘
    
        🟥 ユーザー操作
        ┌──────────────┐
        │ドロップダウン  │  「404」を選択
        │ [200▼]       │    ↓
        └──────┬───────┘
               │
               │ 値を保存
               ▼
        🟩 値の保管
        ┌──────────────┐
        │  トークン     │
        │ $status$=404 │  ← 選んだ値を箱に入れる
        └──────┬───────┘
               │
               │ 検索条件に使用
               ▼
        🟦 データソース
        ┌──────────────┐
        │インデックス   │
        │ web_logs     │  status=404 で絞り込み
        └──────┬───────┘
               │
               │ 検索結果
               ▼
        🟨 表示
        ┌──────────────┐
        │  チャート     │
        │ 📊 404のグラフ│
        └──────────────┘
    
    【特徴】
    ✅ インタラクティブ
    ✅ ユーザーが自由に操作
    ✅ 同じトークンを複数パネルで使える
    ```
    
    ---
    
    ### **パターン③ 検索結果をトークンに保存**
    
    ```
    ┌─────────────────────────────────────────────┐
    │  🟣 パターンC: 結果をトークンに保存           │
    │  1つの検索結果を複数チャートで使い回す        │
    └─────────────────────────────────────────────┘
    
        🟦 データソース
        ┌──────────────┐
        │インデックス   │
        │ web_logs     │
        └──────┬───────┘
               │
               │ 🔍 検索実行
               │ | stats count
               ▼
        📊 検索結果
        ┌──────────────┐
        │ count = 1234 │
        └──────┬───────┘
               │
               │ 結果を保存(<done>)
               ▼
        🟩 値の保管
        ┌─────────────────┐
        │ $total$ = 1234  │  ← 検索結果を箱に保存
        └────┬────────────┘
             │
             ├─────────┬─────────┬─────────┐
             │         │         │         │
             ▼         ▼         ▼         ▼
        🟨 表示1   🟨 表示2   🟨 表示3   🟨 表示4
        ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
        │HTMLカード│ │タイトル│ │KPI   │ │グラフ │
        │ 1234  │ │ 1234件│ │ 1234 │ │  📊  │
        └──────┘ └──────┘ └──────┘ └──────┘
    
    【特徴】
    ✅ 1回の検索で複数箇所に表示
    ✅ 効率的(インデックスへのアクセスは1回)
    ✅ 値の一貫性が保証される
    ```
    
    ---
    
    ### **パターン④ ベースサーチ(超効率)**
    
    ```
    ┌─────────────────────────────────────────────┐
    │  🔷 パターンD: ベースサーチ                   │
    │  1回の検索結果を複数パネルで加工して使う      │
    └─────────────────────────────────────────────┘
    
        🟦 データソース
        ┌──────────────┐
        │インデックス   │
        │ web_logs     │
        └──────┬───────┘
               │
               │ 🔍 1回だけ検索実行
               │ | stats count by status, host
               ▼
        🟪 ベースサーチ結果(メモリに保持)
        ┌─────────────────────────────┐
        │ status | host      | count  │
        │ 200    | server01  | 100    │
        │ 200    | server02  | 150    │
        │ 404    | server01  | 20     │
        │ 500    | server02  | 5      │
        └────┬────────────────────────┘
             │ 結果を共有
             │
             ├────────┬────────┬────────┬────────┐
             │        │        │        │        │
             ▼        ▼        ▼        ▼        ▼
        🟨 パネル1 🟨 パネル2 🟨 パネル3 🟨 パネル4 🟨 パネル5
        ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
        │円グラフ││棒グラフ││テーブル││地図   ││折れ線 │
        │status││host  ││全体  ││地域別 ││時系列 │
        │別    ││別    ││      ││      ││      │
        └──────┘└──────┘└──────┘└──────┘└──────┘
         by status by host  全表示   by loc  timechart
    
    【特徴】
    ✅ 最も効率的(検索1回で5パネル)
    ✅ 高速(インデックスアクセス1回だけ)
    ✅ データの一貫性
    ✅ 複雑なダッシュボードに最適
    ```
    
    ---
    
    ### **パターン⑤ ドリルダウン(連携)**
    
    ```
    ┌─────────────────────────────────────────────┐
    │  🔴 パターンE: ドリルダウン                   │
    │  クリックでパネル間を連携させる              │
    └─────────────────────────────────────────────┘
    
    【ステップ1: 一覧表示】
        🟦 データソース
        ┌──────────────┐
        │インデックス   │
        │ web_logs     │
        └──────┬───────┘
               │
               │ 🔍 サマリー検索
               │ | stats count by host
               ▼
        🟨 パネル1(クリック元)
        ┌──────────────────┐
        │ ホスト  | 件数   │
        ├──────────────────┤
        │server01 | 1000 ◄─┼─ 🖱️ ここをクリック!
        │server02 | 800    │
        │server03 | 600    │
        └──────────────────┘
               │
               │ クリックイベント発火
               ▼
               
    【ステップ2: トークンに保存】
        🟩 値の保管
        ┌────────────────────┐
        │ $host$ = server01  │  ← クリックした値を保存
        │ $show$ = true      │  ← 表示フラグON
        └────────┬───────────┘
                 │
                 │ トークンが設定される
                 ▼
                 
    【ステップ3: 詳細表示】
        🟪 条件判定
        ┌─────────────────┐
        │ depends="$show$" │  ← トークンが存在する?
        │ → YES!          │
        └────────┬────────┘
                 │
                 │ 条件が真なので表示
                 ▼
        🟦 データソース(再検索)
        ┌──────────────────┐
        │インデックス       │
        │ web_logs         │  host=server01 で絞り込み
        └──────┬───────────┘
               │
               │ 🔍 詳細検索
               │ host="server01" | table ...
               ▼
        🟨 パネル2(クリック先)
        ┌───────────────────────────┐
        │ 📋 server01 の詳細ログ      │
        ├───────────────────────────┤
        │ 時刻     | URI  | status  │
        │ 10:00:00 | /api | 200     │
        │ 10:00:01 | /app | 200     │
        │ 10:00:02 | /img | 404     │
        └───────────────────────────┘
    
    【特徴】
    ✅ パネル間の連携
    ✅ サマリー → 詳細のドリルダウン
    ✅ ユーザーが能動的に探索
    ✅ 大量データを段階的に表示
    ```
    
    ---
    
    ## 🎨 3. トークンの種類(カラフル分類)
    
    ```
    ┌─────────────────────────────────────────────┐
    │           🎯 トークンの種類と色分け           │
    └─────────────────────────────────────────────┘
    
    
    🟥 【入力トークン】= ユーザーが値を入れる
    ┌──────────────────────────────────────┐
    │  <input type="dropdown" token="status">│
    │    <choice value="200">成功</choice>   │
    │  </input>                              │
    └──────────────────────────────────────┘
             ↓
       $status$ = "200"  ← 赤い箱に保管
    
    
    🟢 【時間トークン】= 時間範囲を保持
    ┌──────────────────────────────────────┐
    │  <input type="time" token="time">     │
    │    <default>                          │
    │      <earliest>-24h</earliest>        │
    │    </default>                         │
    │  </input>                             │
    └──────────────────────────────────────┘
             ↓
       $time.earliest$ = "-24h"  ← 緑の箱(開始)
       $time.latest$ = "now"     ← 緑の箱(終了)
    
    
    🟡 【結果トークン】= 検索結果を保存
    ┌──────────────────────────────────────┐
    │  <search>                             │
    │    <query>| stats count</query>       │
    │    <done>                             │
    │      <set token="total">              │
    │        $result.count$                 │
    │      </set>                           │
    │    </done>                            │
    │  </search>                            │
    └──────────────────────────────────────┘
             ↓
       $total$ = "1234"  ← 黄色の箱に保管
    
    
    🟣 【クリックトークン】= クリックで取得
    ┌──────────────────────────────────────┐
    │  <drilldown>                          │
    │    <set token="host">                 │
    │      $row.host$                       │
    │    </set>                             │
    │  </drilldown>                         │
    └──────────────────────────────────────┘
             ↓
       $host$ = "server01"  ← 紫の箱に保管
    
    
    🔵 【制御トークン】= 表示/非表示の制御
    ┌──────────────────────────────────────┐
    │  <set token="show">true</set>         │
    └──────────────────────────────────────┘
             ↓
       $show$ = "true"  ← 青の箱(フラグ)
             ↓
       <panel depends="$show$">  ← これで表示制御
    ```
    
    ---
    
    ## 🎨 4. データの流れ(レストラン例 - 超カラフル版)
    
    ```
    ┌─────────────────────────────────────────────────────────┐
    │        🍜 うさうさラーメン店のデータフロー                │
    └─────────────────────────────────────────────────────────┘
    
    
    🟦 【倉庫】= インデックス
    ┌─────────────────────┐
    │  🏪 食材倉庫          │
    │  ┌──────┐ ┌──────┐  │
    │  │ 野菜 │ │ 肉  │  │  index=web_logs
    │  │ 棚  │ │ 棚  │  │  index=app_logs
    │  └──────┘ └──────┘  │  index=security
    │  ┌──────┐ ┌──────┐  │
    │  │ 魚  │ │ 調味料│  │
    │  │ 棚  │ │ 棚  │  │
    │  └──────┘ └──────┘  │
    └──────────┬──────────┘
               │
               │ 🔍 食材を取り出す(検索)
               ▼
               
    🟥 【注文】= ユーザー入力
    ┌─────────────────────┐
    │ 👨‍🍳 お客さんの注文      │
    │                        │
    │ 「醤油ラーメン          │
    │  大盛りで!」           │
    │                        │
    │ メニュー: [醤油▼]      │  ← dropdown
    │ サイズ: [大盛▼]       │  ← dropdown
    └──────────┬──────────┘
               │
               │ 注文内容を記録
               ▼
               
    🟩 【伝票】= トークン
    ┌─────────────────────┐
    │ 📝 調理指示書         │
    │                       │
    │ $menu$ = "醤油"       │
    │ $size$ = "大盛"       │
    │ $topping$ = "チャーシュー"│
    └──────────┬──────────┘
               │
               │ 指示書を見ながら調理
               ▼
               
    🟪 【調理】= SPL処理
    ┌─────────────────────┐
    │ 🍳 調理場             │
    │                       │
    │ 1. スープを作る        │  | stats
    │ 2. 麺を茹でる          │  | timechart
    │ 3. トッピングを乗せる   │  | eval
    └──────────┬──────────┘
               │
               │ 完成!
               ▼
               
    🟨 【提供】= チャート表示
    ┌─────────────────────┐
    │ 🍜 完成したラーメン    │
    │                       │
    │    [醤油ラーメン]      │  ← グラフ
    │     大盛り            │  ← テーブル
    │   チャーシュー付き     │  ← KPI
    └─────────────────────┘
    
    
    【データの対応関係】
    
    🟦 倉庫(インデックス)
      ↓
      食材 = ログデータ
      棚  = インデックス名(web_logs, app_logs)
      
    🟥 注文(ユーザー入力)
      ↓
      メニュー選択 = dropdown, radio
      カスタマイズ = テキスト入力
      
    🟩 伝票(トークン)
      ↓
      注文内容 = $token_name$
      控え    = 複数パネルで共有
      
    🟪 調理(SPL処理)
      ↓
      レシピ = SPLクエリ
      調理手順 = | stats, | eval, | timechart
      
    🟨 提供(チャート)
      ↓
      盛り付け = グラフ、テーブル
      お皿    = パネル
    ```
    
    ---
    
    ## 🎨 5. 実装コード(カラーコメント付き)
    
    ```xml
    <form>
      <label>🌈 カラフルダッシュボード</label>
      
      <!-- ========================================== -->
      <!-- 🟥 ユーザー入力エリア                       -->
      <!-- ========================================== -->
      
      <fieldset submitButton="false">
        
        <!-- 🟥 入力1: ステータス選択 -->
        <input type="dropdown"            <!-- 🟥 ドロップダウン -->
               token="my_status">         <!-- 🟩 トークン名を定義 -->
          
          <label>🎯 ステータスコード</label>
          
          <choice value="200">✅ 成功(200)</choice>
          <choice value="404">⚠️ Not Found(404)</choice>
          <choice value="500">❌ Server Error(500)</choice>
          
          <default>200</default>          <!-- 🟡 デフォルト値 -->
          
        </input>
        
        <!-- 🟥 入力2: 時間範囲選択 -->
        <input type="time"                <!-- 🟥 時間ピッカー -->
               token="my_time">           <!-- 🟩 時間トークン -->
          
          <label>📅 期間選択</label>
          
          <default>
            <earliest>-24h</earliest>     <!-- 🟢 開始時刻 -->
            <latest>now</latest>          <!-- 🟢 終了時刻 -->
          </default>
          
        </input>
        
      </fieldset>
      
      <!-- ========================================== -->
      <!-- 🟦 データ検索エリア                         -->
      <!-- ========================================== -->
      
      <search id="base_search">           <!-- 🔵 ベースサーチ定義 -->
        <query>
        
          index=web_logs                  <!-- 🟦 インデックス指定 -->
                                          <!-- ここがデータソース -->
          
          earliest=$my_time.earliest$     <!-- 🟢 時間トークン使用 -->
          latest=$my_time.latest$         <!-- 🟢 時間トークン使用 -->
          
          status=$my_status$              <!-- 🟩 入力トークン使用 -->
                                          <!-- ユーザーが選んだ値 -->
          
          | stats                         <!-- 🟪 データ集計 */
              count as 件数,
              avg(response_time) as 平均レスポンス
              by host
          
        </query>
        
        <!-- 🟡 検索結果をトークンに保存 -->
        <done>                            <!-- 検索完了時 -->
          <set token="total_count">       <!-- 🟡 結果トークン -->
            $result.件数$                 <!-- 検索結果を取得 -->
          </set>
        </done>
        
      </search>
      
      <!-- ========================================== -->
      <!-- 🟨 表示エリア                              -->
      <!-- ========================================== -->
      
      <row>
        
        <!-- 🟨 パネル1: KPI表示 -->
        <panel>
          <title>📊 総件数</title>
          <html>
            <style>
              .kpi-card {
                background: linear-gradient(135deg, #667eea  0%, #764ba2  100%);
                border-radius: 15px;
                padding: 30px;
                color: white;
                text-align: center;
                font-size: 48px;
                font-weight: bold;
                box-shadow: 0 8px 16px rgba(0,0,0,0.2);
              }
            </style>
            <div class="kpi-card">
              $total_count$               <!-- 🟡 結果トークン表示 -->
            </div>
          </html>
        </panel>
        
        <!-- 🟨 パネル2: 円グラフ -->
        <panel>
          <title>📈 ホスト別分布</title>
          <chart>
            <search base="base_search">   <!-- 🔵 ベースサーチ参照 -->
              <query>
                | stats sum(件数) by host <!-- 🟪 再集計 */
              </query>
            </search>
            <option name="charting.chart">pie</option>
            <option name="charting.chart.showPercent">true</option>
          </chart>
        </panel>
        
        <!-- 🟨 パネル3: テーブル -->
        <panel>
          <title>📋 詳細データ</title>
          <table>
            <search base="base_search">   <!-- 🔵 ベースサーチ参照 -->
              <query>
                | sort -件数              <!-- 🟪 ソート */
              </query>
            </search>
            
            <!-- 🟣 クリックでトークン設定 -->
            <drilldown>                   <!-- クリックイベント -->
              <set token="clicked_host">  <!-- 🟣 クリックトークン -->
                $row.host$                <!-- クリックした行の値 -->
              </set>
              <set token="show_detail">true</set>  <!-- 🔵 表示フラグ -->
            </drilldown>
            
          </table>
        </panel>
        
      </row>
      
      <!-- ========================================== -->
      <!-- 🟪 条件付き表示エリア                       -->
      <!-- ========================================== -->
      
      <row>
        <panel depends="$show_detail$">   <!-- 🔵 条件付き表示 -->
                                          <!-- トークンが存在する時だけ表示 -->
          
          <title>🔍 詳細: $clicked_host$</title>  <!-- 🟣 クリックトークン -->
          
          <chart>
            <search>
              <query>
                index=web_logs            <!-- 🟦 インデックス -->
                host="$clicked_host$"     <!-- 🟣 クリックした値で絞り込み -->
                | timechart count         <!-- 🟪 時系列集計 */
              </query>
            </search>
            <option name="charting.chart">area</option>
          </chart>
          
          <!-- 閉じるボタン -->
          <html>
            <button style="
              background: linear-gradient(135deg, #f093fb  0%, #f5576c  100%);
              color: white;
              padding: 12px 24px;
              border: none;
              border-radius: 8px;
              cursor: pointer;
              font-size: 16px;
              box-shadow: 0 4px 8px rgba(0,0,0,0.2);
            " id="close_btn">
              ✕ 閉じる
            </button>
            
            <script>
              require(["jquery", "splunkjs/mvc"], function($, mvc) {
                var tokens = mvc.Components.getInstance("submitted");
                $("#close_btn").click(function() {
                  tokens.unset("show_detail");      <!-- 🔵 フラグ削除 -->
                  tokens.unset("clicked_host");     <!-- 🟣 値削除 -->
                });
              });
            </script>
          </html>
          
        </panel>
      </row>
      
    </form>
    
    
    【色の凡例】
    🟥 赤 = ユーザー入力(dropdown, text, time)
    🟩 緑 = 入力トークン($my_status$, $my_time$)
    🟦 青 = データソース(インデックス)
    🟪 紫 = データ処理(SPLクエリ)
    🟡 黄 = 結果トークン($total_count$)
    🟨 橙 = 表示(チャート、テーブル)
    🟣 赤紫 = クリックトークン($clicked_host$)
    🔵 水色 = 制御(depends, ベースサーチ)
    ```
    
    ---
    
    ## 🎨 6. トークンの受け渡しフロー(超詳細カラー版)
    
    ```
    ┌────────────────────────────────────────────────────────────┐
    │          🎯 トークンの受け渡し完全フロー図                   │
    └────────────────────────────────────────────────────────────┘
    
    
    【シーン1: ユーザーが選択】
    
       🟥 ステップ1: ユーザー操作
       ┌─────────────────┐
       │  Dropdown Menu  │
       │  ┌───────────┐  │
       │  │ 200  ▼   │  │  ← ユーザーが「404」をクリック
       │  ├───────────┤  │
       │  │ 200      │  │
       │  │ 404   ◄──┼──────🖱️ ここ!
       │  │ 500      │  │
       │  └───────────┘  │
       └─────────────────┘
                │
                │ onChange イベント発火
                ▼
                
       🟩 ステップ2: トークンに保存
       ┌──────────────────┐
       │ Token Storage    │
       │ ┌──────────────┐ │
       │ │ $my_status$  │ │
       │ │   = "404"    │ │  ← 値が箱に入る
       │ └──────────────┘ │
       └────────┬─────────┘
                │
                │ 検索を再実行
                ▼
    
    
    【シーン2: 検索実行】
    
       🟦 ステップ3: インデックス検索
       ┌──────────────────────┐
       │  Index: web_logs     │
       │  ┌────────────────┐  │
       │  │ 📄 Log Entry 1 │  │
       │  │ status=200     │  │  ← これはスキップ
       │  ├────────────────┤  │
       │  │ 📄 Log Entry 2 │  │
       │  │ status=404  ◄──┼─────✅ マッチ!
       │  ├────────────────┤  │
       │  │ 📄 Log Entry 3 │  │
       │  │ status=500     │  │  ← これもスキップ
       │  └────────────────┘  │
       └────────┬─────────────┘
                │
                │ 404のログだけ抽出
                ▼
                
       🟪 ステップ4: データ処理
       ┌──────────────────────┐
       │  SPL Processing      │
       │  ┌────────────────┐  │
       │  │ | stats count  │  │  ← 集計処理
       │  │ | timechart    │  │  ← 時系列化
       │  │ | eval ...     │  │  ← 計算処理
       │  └────────────────┘  │
       └────────┬─────────────┘
                │
                │ 結果データセット生成
                ▼
    
    
    【シーン3: 結果表示】
    
       🟨 ステップ5: チャート描画
       ┌──────────────────────────┐
       │  Chart Panel             │
       │  ┌────────────────────┐  │
       │  │     📊            │  │
       │  │    ▂▄▆█          │  │  ← グラフ描画
       │  │   404エラー推移    │  │
       │  └────────────────────┘  │
       └──────────────────────────┘
    
    
    【全体フロー図】
    
    🟥 ユーザー → 🟩 トークン → 🟦 インデックス → 🟪 処理 → 🟨 表示
      選択         保存          検索            集計       描画
       ↓            ↓             ↓              ↓          ↓
     [404▼]    $status$=404   status=404    | stats    📊グラフ
    ```
    
    ---
    
    ## 🎨 7. チャートタイプ別カラー図解
    
    ```
    ┌────────────────────────────────────────────────────────────┐
    │            📊 チャートタイプ カラーカタログ                  │
    └────────────────────────────────────────────────────────────┘
    
    
    🔵 【1】シングル値 (KPI)
    ┌──────────────┐
    │              │
    │    1,234     │  ← 大きな数字1つ
    │              │
    │ 総リクエスト数 │
    └──────────────┘
    用途: KPI、重要指標
    色: 青系(安定感)
    
    
    🟢 【2】折れ線グラフ (Line Chart)
          ╱╲
         ╱  ╲  ╱╲
        ╱    ╲╱  ╲___
    時系列の推移を表示
    用途: トレンド分析
    色: 緑系(成長イメージ)
    
    
    🟡 【3】棒グラフ (Column Chart)
        █
        █     █
        █  █  █
        █  █  █  █
       ───────────
    比較・ランキング表示
    用途: 項目別比較
    色: 黄系(活発)
    
    
    🟠 【4】円グラフ (Pie Chart)
        ╱──╲
       │▓▓│▒│
       │▓▓│░│
        ╲──╱
    割合・構成比を表示
    用途: 全体に対する割合
    色: 橙系(温かみ)
    
    
    🔴 【5】面グラフ (Area Chart)
          ╱▓▓╲
         ╱▓▓▓▓╲╱╲
        ╱▓▓▓▓▓▓▓▓╲___
    時系列の量を強調
    用途: 累積表示
    色: 赤系(重要性)
    
    
    🟣 【6】テーブル (Table)
    ┌──────┬──────┬──────┐
    │ホスト │件数  │平均  │
    ├──────┼──────┼──────┤
    │srv01 │ 100  │ 0.5  │
    │srv02 │  80  │ 0.3  │
    └──────┴──────┴──────┘
    詳細データを一覧表示
    用途: 詳細確認
    色: 紫系(高級感)
    
    
    🟤 【7】ゲージ (Gauge)
         ╱──╲
        │  ↗ │
         ╲__╱
          75%
    パフォーマンス指標
    用途: 進捗・達成率
    色: 茶系(地に足)
    
    
    ⚫ 【8】散布図 (Scatter)
        ●
      ●   ● ●
       ● ●  ●
      ●  ●
    相関関係を表示
    用途: 関係性分析
    色: 黒系(シック)
    ```
    
    ---
    
    ## 🎨 8. 実装パターン色分けチートシート
    
    ```
    ┌────────────────────────────────────────────────────────────┐
    │          🎨 実装パターン カラーチートシート                  │
    └────────────────────────────────────────────────────────────┘
    
    
    【🟥 ユーザー入力を受け取る】
    <input type="dropdown" token="名前">
      <choice value="値">表示名</choice>
      <default>初期値</default>
    </input>
    
    
    【🟩 トークンに値を保存する】
    <set token="名前">$値$</set>
    <set token="名前">$result.フィールド$</set>
    <set token="名前">$row.フィールド$</set>
    
    
    【🟦 インデックスから検索する】
    <query>
      index=インデックス名
      earliest=$time.earliest$
      latest=$time.latest$
      フィールド=$token$
      | stats count
    </query>
    
    
    【🟪 データを処理する】
    | stats count by フィールド    ← 集計
    | timechart span=1h count      ← 時系列
    | eval 新項目=計算式            ← 計算
    | where 条件                   ← 絞り込み
    | sort -フィールド             ← ソート
    
    
    【🟡 検索結果をトークンに保存】
    <done>
      <set token="名前">$result.フィールド$</set>
    </done>
    
    
    【🟨 チャートで表示する】
    <chart>
      <search>...</search>
      <option name="charting.chart">種類</option>
    </chart>
    
    
    【🟣 クリックでトークン設定】
    <drilldown>
      <set token="名前">$row.フィールド$</set>
    </drilldown>
    
    
    【🔵 条件付き表示】
    <panel depends="$token$">
      ...
    </panel>
    
    
    【⚪ トークンを削除】
    <unset token="名前"></unset>
    tokens.unset("名前");
    ```
    
    ---
    
    カラフルな図解で完全にまとめました!
    
    **色の意味をもう一度:**
    - 🟥 赤 = ユーザー操作(入力)
    - 🟩 緑 = トークン(値の保管)
    - 🟦 青 = データソース(インデックス)
    - 🟪 紫 = データ処理(SPL)
    - 🟡 黄 = 結果の保存
    - 🟨 橙 = 表示(チャート)
    - 🟣 赤紫 = クリック操作
    - 🔵 水色 = 制御(条件分岐)
    
    この色分けを覚えておけば、コードを見た時に「今どの部分を書いているか」が一目で分かりますね!
    
    どの部分をもっと詳しく知りたいですか?

    あなたへのおすすめ