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から設定
- Settings > Data inputs > Files & directories
- New Local File & Directory を選択
- パスを入力(例:
/var/log/syslog) - ソースタイプを選択または作成
- インデックスを選択
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の有効化
- Settings > Data inputs > HTTP Event Collector
- Global Settings で HEC を有効化
- 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から作成
- Settings > Indexes
- New Index を選択
- 名前を入力(例:
web_logs) - 保存期間やサイズを設定
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 | データ入力の設定ファイル |
重要ポイント
- Monitor Inputがファイルログの基本的な取り込み方法
- HECはアプリケーションからの直接送信に最適
- ソースタイプはデータの解析ルールを定義する
- 本番環境ではUniversal Forwarderを使う
練習問題
問題1: 基本
3つのサンプルログファイルをSplunkに取り込み、それぞれ異なるソースタイプを設定してみましょう。
問題2: 応用
HECを有効化し、curlコマンドでJSONデータを送信してみましょう。送信したデータがSplunkで検索できることを確認してください。
チャレンジ問題
カスタムソースタイプ(props.conf)を作成し、独自のログ形式(タイムスタンプ形式やフィールド抽出)を定義してみましょう。
参考リンク
次回予告: Day 3では「サーチの基本」について学びます。SPL(Search Processing Language)の基礎をマスターしましょう。