10日で覚えるSplunkDay 2: データの取り込み

Day 2: データの取り込み

今日学ぶこと

  • データ入力の種類
  • ファイルとディレクトリの監視
  • ネットワーク入力(TCP/UDP)
  • ソースタイプの設定
  • inputs.conf の基本

データ入力の種類

Splunkはさまざまな方法でデータを取り込めます。

flowchart TB
    subgraph Inputs["データ入力方法"]
        File["ファイル/ディレクトリ<br>monitor"]
        Network["ネットワーク<br>TCP / UDP"]
        Script["スクリプト<br>scripted input"]
        HEC["HTTP Event Collector<br>HEC"]
        API["REST API<br>modular input"]
    end
    style File fill:#3b82f6,color:#fff
    style Network fill:#22c55e,color:#fff
    style Script fill:#f59e0b,color:#fff
    style HEC fill:#8b5cf6,color:#fff
    style API fill:#ef4444,color:#fff
入力方法 説明 用途
ファイル監視 ファイルやディレクトリを監視 ログファイル
ネットワーク TCP/UDPポートでデータ受信 syslog
HEC HTTP経由でデータ送信 アプリケーションログ
スクリプト スクリプトの出力を取り込み カスタムデータ収集
Modular Input アドオン経由のデータ収集 クラウドサービス連携

ファイル監視(Monitor Input)

Web UIから設定

  1. Settings > Data inputs > Files & directories
  2. New Local File & Directory を選択
  3. パスを入力(例: /var/log/syslog
  4. ソースタイプを選択または作成
  5. インデックスを選択

inputs.conf での設定

# $SPLUNK_HOME/etc/system/local/inputs.conf

# ファイル監視
[monitor:///var/log/syslog]
disabled = false
index = main
sourcetype = syslog

# ディレクトリ監視(配下の全ファイル)
[monitor:///var/log/apache2/]
disabled = false
index = web
sourcetype = access_combined

# 特定パターンのファイルのみ
[monitor:///opt/app/logs/*.log]
disabled = false
index = application
sourcetype = app_log

モニター設定のオプション

パラメータ 説明
disabled 無効化 false
index 格納先インデックス main
sourcetype ソースタイプ syslog
host ホスト名の上書き web-01
ignoreOlderThan 古いファイルを無視 7d
whitelist 含めるファイルパターン \.log$
blacklist 除外するファイルパターン \.gz$

ネットワーク入力

syslogの受信(UDP)

# inputs.conf
[udp://514]
disabled = false
sourcetype = syslog
index = syslog

TCP入力

[tcp://9997]
disabled = false
sourcetype = forwarder_data

ポイント: TCP 9997はフォワーダーからのデータ受信に使われる標準ポートです。


HTTP Event Collector(HEC)

アプリケーションから直接HTTPでデータを送信する方法です。

HECの有効化

  1. Settings > Data inputs > HTTP Event Collector
  2. Global Settings で HEC を有効化
  3. New Token でトークンを作成

データの送信

curl -k https://localhost:8088/services/collector/event \
  -H "Authorization: Splunk YOUR_HEC_TOKEN" \
  -d '{"event": "Hello from HEC!", "sourcetype": "manual", "index": "main"}'

JSON形式のデータ送信

curl -k https://localhost:8088/services/collector/event \
  -H "Authorization: Splunk YOUR_HEC_TOKEN" \
  -d '{
    "event": {
      "action": "login",
      "user": "alice",
      "status": "success",
      "ip": "192.168.1.10"
    },
    "sourcetype": "app_json",
    "index": "main"
  }'
flowchart LR
    App["アプリケーション"]
    HEC["HEC<br>:8088"]
    Indexer["インデクサー"]
    App -->|"HTTP POST<br>+ Token"| HEC --> Indexer
    style App fill:#3b82f6,color:#fff
    style HEC fill:#22c55e,color:#fff
    style Indexer fill:#f59e0b,color:#fff

ソースタイプ

ソースタイプはSplunkがデータの形式を理解するための定義です。

組み込みソースタイプ

ソースタイプ 説明
syslog Syslog形式
access_combined Apache Combined Log
csv CSV形式
json JSON形式
_json 自動検出されたJSON
log4j Java Log4j形式

カスタムソースタイプ

# props.conf
[my_app_log]
TIME_FORMAT = %Y-%m-%d %H:%M:%S
TIME_PREFIX = ^
MAX_TIMESTAMP_LOOKAHEAD = 19
LINE_BREAKER = ([\r\n]+)
SHOULD_LINEMERGE = false
パラメータ 説明
TIME_FORMAT タイムスタンプの形式
TIME_PREFIX タイムスタンプの前の文字列
MAX_TIMESTAMP_LOOKAHEAD タイムスタンプ検索の最大文字数
LINE_BREAKER イベントの区切り
SHOULD_LINEMERGE 複数行を1イベントにまとめるか

インデックスの作成

Web UIから作成

  1. Settings > Indexes
  2. New Index を選択
  3. 名前を入力(例: web_logs
  4. 保存期間やサイズを設定

indexes.conf での設定

# indexes.conf
[web_logs]
homePath = $SPLUNK_DB/web_logs/db
coldPath = $SPLUNK_DB/web_logs/colddb
thawedPath = $SPLUNK_DB/web_logs/thaweddb
maxDataSize = auto_high_volume
maxTotalDataSizeMB = 50000
frozenTimePeriodInSecs = 7776000  # 90日

データのライフサイクル

flowchart LR
    Hot["Hot<br>新しいデータ<br>書き込み可能"]
    Warm["Warm<br>最近のデータ<br>読み取り専用"]
    Cold["Cold<br>古いデータ<br>低速ストレージ"]
    Frozen["Frozen<br>削除 or アーカイブ"]
    Hot --> Warm --> Cold --> Frozen
    style Hot fill:#ef4444,color:#fff
    style Warm fill:#f59e0b,color:#fff
    style Cold fill:#3b82f6,color:#fff
    style Frozen fill:#8b5cf6,color:#fff
バケット 説明 特徴
Hot 新しいデータ 書き込み可能、高速
Warm 最近のデータ 読み取り専用、高速
Cold 古いデータ 読み取り専用、低速ストレージ
Frozen 期限切れ 削除またはアーカイブ

Universal Forwarder

本番環境では**Universal Forwarder (UF)**を使ってデータを転送します。

# Universal Forwarder のインストール(Linux)
wget -O splunkforwarder.tgz "https://download.splunk.com/products/universalforwarder/releases/latest/linux/splunkforwarder-latest-Linux-x86_64.tgz"
tar xvzf splunkforwarder.tgz -C /opt

# 初回設定
/opt/splunkforwarder/bin/splunk start --accept-license
/opt/splunkforwarder/bin/splunk add forward-server indexer01:9997
/opt/splunkforwarder/bin/splunk add monitor /var/log/syslog
flowchart LR
    Server1["Web Server<br>UF"]
    Server2["App Server<br>UF"]
    Server3["DB Server<br>UF"]
    Indexer["Splunk<br>Indexer<br>:9997"]
    Server1 --> Indexer
    Server2 --> Indexer
    Server3 --> Indexer
    style Server1 fill:#3b82f6,color:#fff
    style Server2 fill:#3b82f6,color:#fff
    style Server3 fill:#3b82f6,color:#fff
    style Indexer fill:#22c55e,color:#fff

実践: 複数ソースからのデータ取り込み

以下の3つのログファイルを作成し、Splunkに取り込みましょう。

access.log(Webアクセスログ)

192.168.1.10 - alice [30/Jan/2026:10:00:01 +0900] "GET /index.html HTTP/1.1" 200 2048
192.168.1.20 - bob [30/Jan/2026:10:00:05 +0900] "POST /api/login HTTP/1.1" 401 128
192.168.1.10 - alice [30/Jan/2026:10:00:10 +0900] "GET /dashboard HTTP/1.1" 200 4096

app.log(アプリケーションログ)

2026-01-30 10:00:01 INFO  [main] Application started successfully
2026-01-30 10:00:05 WARN  [db-pool] Connection pool running low: 2/10
2026-01-30 10:00:10 ERROR [api] NullPointerException at UserService.java:42

auth.log(認証ログ)

Jan 30 10:00:01 server01 sshd[1234]: Accepted publickey for alice from 192.168.1.10 port 22
Jan 30 10:00:05 server01 sshd[1235]: Failed password for bob from 192.168.1.20 port 22
Jan 30 10:00:10 server01 sshd[1236]: Failed password for root from 10.0.0.1 port 22

まとめ

概念 説明
Monitor Input ファイル/ディレクトリの監視
Network Input TCP/UDPでのデータ受信
HEC HTTP経由のデータ送信
ソースタイプ データ形式の定義
インデックス データの保存先
Universal Forwarder 軽量なデータ転送エージェント
inputs.conf データ入力の設定ファイル

重要ポイント

  1. Monitor Inputがファイルログの基本的な取り込み方法
  2. HECはアプリケーションからの直接送信に最適
  3. ソースタイプはデータの解析ルールを定義する
  4. 本番環境ではUniversal Forwarderを使う

練習問題

問題1: 基本

3つのサンプルログファイルをSplunkに取り込み、それぞれ異なるソースタイプを設定してみましょう。

問題2: 応用

HECを有効化し、curlコマンドでJSONデータを送信してみましょう。送信したデータがSplunkで検索できることを確認してください。

チャレンジ問題

カスタムソースタイプ(props.conf)を作成し、独自のログ形式(タイムスタンプ形式やフィールド抽出)を定義してみましょう。


参考リンク


次回予告: Day 3では「サーチの基本」について学びます。SPL(Search Processing Language)の基礎をマスターしましょう。