はじめに
SNMPデータをSplunkに取り込みたい場合、Splunk Connect for SNMP (SC4SNMP) という選択肢があります。
従来はKubernetesが前提で導入ハードルが若干高かったのですが、最近はDocker Compose版が提供されており、より手軽に利用できるようになりました。
この記事では、Docker Compose版のSC4SNMPを使ってSNMPデータを取得するための手順を解説します。
今回の手順がのっている公式ドキュメントはこちら。
詳細なコンフィグ例やパラメータの解説も載っています。
今回のテスト構成
- 監視側 (SC4SNMP): Docker Composeで動作
- 被監視側 (Target): 別IPのUbuntuサーバー(例: 192.168.1.50)
Step 1: Splunk側の準備
1-1. インデックス作成
Splunk側でSC4SNMP用のインデックスを2つ作成します。
※名前は任意で結構です。後ほど設定ファイルでインデックス名を指定できます。
| インデックス名 | インデックスタイプ | 用途 |
|---|---|---|
| netops | イベント | SNMP Trapやイベントログ用 |
| netmetrics | メトリクス | インターフェース使用状況などの数値データ用 |
1-2. HEC(HTTP Event Collector)作成
SC4SNMPからはHECを使用してデータを送信します。Splunk Web上で以下の手順で作成しておきましょう。
- 設定 > データ入力 > HTTP Event Collector
- 新しいトークンを作成
- トークン値をメモしておく
Step 2: SC4SNMPのセットアップ
docker_composeファイルの取得
GitHubのリリースページから、最新の安定版(Betaでないもの)の docker_compose.zip をダウンロードして展開します。
unzip docker_compose.zip
cd docker_compose
scheduler-config.yaml の設定(何を監視するか)
プロファイルを登録し、監視対象のMIBツリーを varBinds として定義します。
ここではプロファイル名を test_profile としてますが、この名前も任意です。
communities:
2c:
public:
profiles:
test_profile:
varBinds:
- ['IP-MIB']
- ['IF-MIB']
- ['TCP-MIB']
- ['UDP-MIB']
inventory.csv の設定(誰を監視するか)
監視対象のIPアドレスを指定します。
注意: 1行目のヘッダー行は必ず残してください。これがないと読み込まれません。
address,port,version,community,secret,securityEngine,walk_interval,profiles,smart_profiles,delete
192.168.1.50,161,2c,public,,,60,test_profile,,
192.168.1.51,161,2c,public,,,60,test_profile,,
パラメータ説明:
-
address: 監視対象のIPアドレス -
port: SNMPポート(通常は161) -
version: SNMPバージョン(2c または 3) -
community: コミュニティ名 -
walk_interval: ポーリング間隔(秒) -
profiles: 使用するプロファイル名
traps-config.yaml の設定(Trap受信)
SNMP Trap受信設定(コミュニティ名)を行います。
communities:
2c:
public:
.env ファイルの設定
.env ファイルに設定ファイルパスやSplunkへの接続情報などを記述します。
重要: ファイルパスは絶対パスで指定してください。
# --- ファイルパス設定(絶対パスで指定) ---
SCHEDULER_CONFIG_FILE_ABSOLUTE_PATH=/home/<user>/docker_compose/scheduler-config.yaml
TRAPS_CONFIG_FILE_ABSOLUTE_PATH=/home/<user>/docker_compose/traps-config.yaml
INVENTORY_FILE_ABSOLUTE_PATH=/home/<user>/docker_compose/inventory.csv
COREFILE_ABS_PATH=/home/<user>/docker_compose/Corefile
# --- ネットワーク設定 ---
# IPv6を使わない場合は以下をコメントアウト(新しいバージョンではコメントアウト不要かもしれません)
#COREDNS_ADDRESS_IPv6=fd02:0:0:0:7fff:ffff:ffff:ffff
# --- Splunk接続設定 ---
SPLUNK_HEC_HOST=your-splunk-server.example.com
SPLUNK_HEC_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SPLUNK_HEC_INSECURESSL=true # テスト環境などで正式なSSL証明書がない場合
# --- インデックス設定(Step 1で作成したもの) ---
SPLUNK_HEC_INDEX_EVENTS=netops
SPLUNK_HEC_INDEX_METRICS=netmetrics
Step 3: コンテナ起動
準備ができたらコンテナを起動します。設定を確実に反映させるため、既に起動している場合は一度停止してから起動し直すことをおすすめします。
docker compose down
docker compose up -d
起動確認とログ確認
ポーラー(収集ワーカー)のログを確認してみましょう。
docker logs -f $(docker compose ps -q worker-poller | head -n 1)
エラーが出ていなければ成功です。
Step 4: Splunkでデータを確認する
データが取り込まれているか、Splunkのサーチ画面で確認しましょう。
| mpreview index="netmetrics"
SNMPのメトリクスデータが表示されればOKです。
メトリクスデータなので | mstats などを使いましょう。
Step 5: SNMP Trapの受信テスト
ポーリングだけでなく、Trapも受信してみましょう。
先ほどの設定で public コミュニティのTrapを受け取る設定にしていました。
Trap送信テスト(Ubuntuから)
監視対象のUbuntuサーバーから、SC4SNMPサーバーに向けてテストTrapを送信します。
# SC4SNMPが動いているサーバーのIPを指定(例: 192.168.1.100)
snmptrap -v 2c -c public 192.168.1.100 "" .1.3.6.1.6.3.1.1.5.1
OIDの説明: .1.3.6.1.6.3.1.1.5.1: coldStart(システム再起動)という標準的なTrapのOID
Splunkで確認
Trapはイベントデータとして netops インデックスに格納されます。
index="netops" sourcetype="sc4snmp:traps"
coldStart のイベントが表示されれば、Trap受信は成功です。
Step 6: SC4SNMP自体のログをSplunkへ送る
SC4SNMP自体のエラーもSplunk上で監視したい場合があります。
Docker Compose版には、コンテナログを転送するための便利なスクリプト(manage_logs.py)が同梱されています。
.env にログ用インデックスを追記
SPLUNK_LOG_INDEX=main #Indexはどこでもいいです
ログ設定スクリプトの実行
必要なPythonライブラリをインストールし、ログ転送を有効化します。
docker_composeファイルがあるディレクトリで実行します。
# 必要なライブラリのインストール
pip3 install ruamel.yaml
# ログ転送の有効化
python3 manage_logs.py --path_to_compose $(pwd) --enable_logs
設定の反映
このスクリプトは docker-compose.yaml 自体を書き換えてログドライバ設定を追加するため、コンテナの再作成が必要です。
docker compose down
docker compose up -d
これで docker logs コマンドを使わなくても、Splunk上で以下のようなクエリでコンテナログが確認できるようになります。
index=<ログ送信先> source="http:sc4snmp"
まとめ
SC4SNMPをDocker Composeで比較的簡単にセットアップできました。
今後は以下のように拡張していけます。
-
scheduler-config.yamlに必要に応じてMIBを追加 -
inventory.csvに監視対象機器を追加
(設定反映はdocker compose up -dでできます)
Docker環境があればかなりさっくり動かせると思います。
ダッシュボード作成はLLMにまかせましょう。

