Splunk

よく使うSplunkのCLIまとめ

はじめに

SplunkはブラウザやAPI経由でログのサーチや可視化ができますが、運用管理で役立つ CLI もたくさん用意されています。
全部を把握するのは難しいですが、よく使うもの・役立つものを自分の備忘録も兼ねていくつか紹介します。

CLI実行方法

$SPLUNK_HOME/bin/splunk でCLI呼び出し
基本的な実行方法は↓

$SPLUNK_HOME/bin/splunk <commands>

どういうコマンドが使えるかは、下記で確認可能

$SPLUNK_HOME/bin/splunk help commands

(参考)$SPLUNK_HOMEって?

$SPLUNK_HOME はSplunkがインストールされているディレクトリ
Linuxなら /opt/splunk (Universal Forwarderなら /opt/splunkforwarder )、Windowsなら C:\\Program Files\Splunk

この環境変数はSplunkのマニュアルでも散見されますが、OSで決めているわけではなく、Splunkのプロセスで定義されています

よく使うSplunk CLI

ということで、さっそく紹介してきます

起動 /停止 / 再起動

定番中の定番ですね

# Splunk起動
$SPLUNK_HOME/bin/splunk start

初期インストール時やアップグレード後の起動は↓ようにオプション指定すると便利

# Splunk起動(ライセンスに自動で同意)
$SPLUNK_HOME/bin/splunk start --accept-license --answer-yes --no-prompt

-- 2018/05/07 追記 ココカラ --
Splunkのバージョン 7.1.0 (2018年4月24日リリース)以降を使う場合は、 --no-prompt 使ってはいけないみたいです。
どうやら初回起動で admin ユーザーのパスワードを設定するみたいなので、 --no-prompt を指定するとパスワード設定の処理をスキップしてしまい、ユーザーが作成されていない状態のままログインできなくなるみたいです。(対処法あるにはあるのですが...)

なので、 7.1.0 以降を使う場合は初回起動を以下のように書き換えましょう。

sudo -u splunk /opt/$DIRECTORY/bin/splunk start --accept-license --answer-yes --seed-passwd changeme

この --seed-passwd は7.1.0の新しいオプションのようです。
-- 2018/05/07 追記 ココマデ --

# Splunk停止
$SPLUNK_HOME/bin/splunk stop
# Splunk再起動
$SPLUNK_HOME/bin/splunk restart

Splunkの自動起動を設定

OS起動したタイミングで自動的にSplunkを起動させる設定
Windowsは自動的にオンになっているので、これはLinux向け

$SPLUNK_HOME/bin/splunk enable boot-start -user <user>

-user にはSplunkのプロセスを起動するOSユーザーを指定

※ これはOS設定 /etc/init.d/splunk を書き換えるので、sudoが必要になる場合もあります

プロセス動いてるかチェック

Splunkが起動しているかのステータスをチェック

$SPLUNK_HOME/bin/splunk status

Splunkの設定をチェック

どの設定が有効になっているかを確認
inputs.conf や indexes.conf といった設定ファイルはAppごとやSystemで複数作成できて、設定の重複もありえるのですが、どの設定が上書きされるかを確認するためのものになります。

$SPLUNK_HOME/bin/splunk btool <conf_file> list <option>

<conf_file> は例えば inputs.conf だったら inputs 、indexes.conf だったら indexes を指定
<option>--debug を指定すると有効になっている設定のファイルパスが表示されます

注意事項として、設定変更後にSplunk再起動が必要な場合、再起動前でも btool ではその設定が有効になってしまっているように見えます。

Splunkサーバー名、ホスト名を設定

# Splunkホスト名を設定
$SPLUNK_HOME/bin/splunk set default-hostname <hostname>
# Splunkサーバー名を設定
$SPLUNK_HOME/bin/splunk set servername <servername>

ポート設定

# Webポート(デフォルト 8000)
$SPLUNK_HOME/bin/splunk set web-port <port>
# 管理ポート(デフォルト 8089)
$SPLUNK_HOME/bin/splunk set splunkd-port <port>
# KV Storeポート(デフォルト 8191)
$SPLUNK_HOME/bin/splunk set kvstore-port <port>
# Appサーバーポート(デフォルト 8065)
$SPLUNK_HOME/bin/splunk set appserver-ports <port>

実はSplunkはディレクトリを分ければ一つのサーバー・端末・VMに複数のSplunkをインストールすることができます。
その際、ポートを分ければ同時に複数のSplunkインスタンスを起動することができます。
ただし、この使い方はサポートされてないので、あくまで検証用として自己責任で。

最小の空きディスク容量を設定

Splunk稼働のために必要となる最小の空き容量を設定

# Splunkサーバー名を設定
$SPLUNK_HOME/bin/splunk set minfreemb <min_free_mb>

<min_free_mb> には最小空き容量をメガバイトで指定
デフォルトは 5000 (だったかな?)

ちょっとした検証用にEC2を8GBディスクで起動するとすぐ空容量足りなくなるので、これは個人的にはよく使います。

インデックスの中のデータを削除

Splunkにインデックスされたデータを一括削除

$SPLUNK_HOME/bin/splunk clean eventdata -index <index>

<index> はインデックス名を指定
特定のインデックス内の 全ての データを削除するので、他の条件(時間範囲等)は指定できません。
Splunk停止状態でのみ実行可能なので、必ず splunk stop の後に実行しましょう。

Forwarderからのデータ受信設定

スタンドアロン環境や分散環境、クラスタ環境でIndexerがForwarderからデータを受け取る際にデータ受信用のポートを開ける必要があるので、それを設定

$SPLUNK_HOME/bin/splunk enable listen 9997

9997 がポート番号
これ以外の数字でもいいけど、Splunk的には 9997 が一般的

Deployment ServerにForwarderを登録

# Forwarderで設定
$SPLUNK_HOME/bin/splunk set deploy-poll <deploy_ip>:<deploy_port>

<deploy_ip>:<deploy_port> にはDeployment ServerのIPアドレス(もしくはホスト名やFQDN)とポートを指定
これはForwarder側で実行

Deployment Serverを読み込み

Deployment ServerのWeb UIでForwarder管理の設定をした後、その設定を読み込ませる

$SPLUNK_HOME/bin/splunk reload deploy-server

これはDeployment Serverで実行

SplunkプロセスからPython実行

$SPLUNK_HOME/bin/splunk cmd python <python_script>

例えば、Splunkの環境変数を取得するPythonスクリプトはこちら↓

env_variables.py
import os

if __name__ == '__main__':
    for key in os.environ.keys():
    print key + ' = ' + os.environ[key]

標準出力に $SPLUNK_HOME といった環境変数が表示されます。

ちなみに、SplunkでPythonを実行する際は、OSに入っているPythonではなくSplunkにパッケージとして入っているPythonを実行します。
2018年3月時点での最新版 Splunk 7.0.xでは、Python 2.7が入っています。

Appの一覧表示 / インストール / アンインストール

# App一覧表示
$SPLUNK_HOME/bin/splunk list app
# Appインストール
$SPLUNK_HOME/bin/splunk install app <app_file_path>
# Appアンインストール
$SPLUNK_HOME/bin/splunk remove app <app_name>

ユーザーの一覧表示 / 追加 / 削除

# ユーザー一覧表示
$SPLUNK_HOME/bin/splunk list user
# ユーザー追加
$SPLUNK_HOME/bin/splunk add user <app_name> -role <role> -password <password>
# ユーザー削除
$SPLUNK_HOME/bin/splunk remove user <username>

最後に

今回は比較的使用頻度の高いものだけを書きました。
利用可能なCLIはもっとたくさあんあるので、今回はほんの氷山の一角なんです。

例えば、クラスター環境構築もほとんどCLIで実現できます。
それはまた別の機会に記事書きます。

-- 2018/05/07 追記 --
CLIを使ったクラスター環境構築の記事を書きました → Splunkのクラスター環境を10分で構築してやるよ