今日もおじさん

脳みそのキューが小さく、新しいことを覚えると少し前のことを忘れてしまうおじさんの備忘録的ブログです。

SplunkWebのTLS化 デフォルト証明書編

Splunk WebをTLS化します。
デフォルトではSplunk WebのTLSは無効となっているものの、TLS化するのに利用できる証明書はインストール時に自動で生成されています。
今回はこのデフォルト証明書での暗号化を行います。

なお、当該証明書はインストール時点から3年で有効期限が設定されますので、個人的な利用以外ではまず使用しないほうがいいでしょう。

利用しているSplunkはVer.8.0.2.1です。
参考URL:
Turn on encryption (https) with Splunk Web - Splunk Documentation
Turn on encryption (https) using web.conf - Splunk Documentation

Splunk WebからTLS

adminロールを持つユーザでSplunk Webへログインします。
f:id:ojisanworld:20200401152522p:plain

メニューバーの[設定]から[サーバー設定]をクリックします。
f:id:ojisanworld:20200401152700p:plain

[全般設定]をクリックします。
f:id:ojisanworld:20200401152907p:plain

[Splunk WebでSSLHTTPS)を有効にしますか?]を[はい]に設定し、保存します。
f:id:ojisanworld:20200401153447p:plain
※見たらわかるとは思いますが、Webのポート番号やセッションタイムアウト時間もここから設定変更可能です。

Splunkサービスを再起動します。
有効設定後にメッセージに再起動が必要な旨が通知されます。
f:id:ojisanworld:20200401153638p:plain

今回はメッセージに従い、Splunk Web上からサービス再起動を実施してみます。
f:id:ojisanworld:20200401153818p:plain

以前は再起動が完了すると自動で画面がリフレッシュされていたと思うのですが、このバージョンではされないようです。
※以下のように別途起動を確認後にログ見てねってメッセージが表示されてます。
f:id:ojisanworld:20200401154122p:plain

ということで、サーバのローカルからSplunkサービスの起動を確認したので、画面をリフレッシュしてみます。

こんな感じでエラーが表示されましたが、これはHTTPのままアクセスしているからですね。
f:id:ojisanworld:20200401154303p:plain

HTTPSに変えて再度アクセスすると、
f:id:ojisanworld:20200401154444p:plain
自己署名証明書のため、証明書エラーが表示されます。

無視してアクセスすると、この通り無事表示されました。
f:id:ojisanworld:20200401154701p:plain

一応証明書情報も見ておくとこんな感じです。インストールしたのが2020年3月21日なのでそこから3年に設定されているのがわかります。
f:id:ojisanworld:20200401154901p:plain

コンフィグを確認

Splunk Webに関する設定はweb.confで行います。
デフォルトでは"$SPLUNK_HOME/etc/system/default/web.conf"の設定のみで、"$SPLUNK_HOME/etc/system/local/web.conf"は存在しません。

先ほどSplunk Web上から設定を変更したため、私の環境では"$SPLUNK_HOME/etc/system/local/web.conf"が作成されています。
内容を確認してみます。

$ ls -l /opt/splunk/etc/system/local/web.conf
-rw-------. 1 splunk splunk 34  41 15:33 /opt/splunk/etc/system/local/web.conf

$ cat /opt/splunk/etc/system/local/web.conf
[settings]
enableSplunkWebSSL = 1

上記の通り、設定されているのは"[settings]"スタンザと"enableSplunkWebSSL=1"というパラメータの2行だけです。

TLS化に用いる証明書や秘密鍵は"$SPLUNK_HOME/etc/system/default/web.conf"側にデフォルトで設定されていて、local側で"enableSplunkWebSSL"パラメータで有効に設定するだけでTLSを利用することが可能になっているわけです。

次回は自己署名証明書を自前で作成して適用したいと思います。
今回はここまで。

Splunkのコンポーネントまとめ

Splunkのコンポーネントを簡単にまとめてみます。
Splexicon:Component - Splunk Documentation

Indexer(インデクサ)

Splunkのコアコンポーネントの一つで、データの収集と保存(インデックスへの格納)、(Search Headからクエリを受けての)インデックスデータの検索機能を提供します。

Search Head(サーチヘッド)

Splunkのコアコンポーネントの一つで、データの検索と表示を司ります。データの検索時はIndexerに対してクエリを発行し、返されたデータに対し統計処理を施すなどして表示します。
アラート/レポート等のスケジュールで動作する機能もSearch Headが提供します。

最小構成ではIndexerとSearch Headを一つのサーバ上で動作させることができます。
※できるというより、インストール直後はデフォルトで両方が動作します。

Fowarder(フォワーダ)

データを転送するためのコンポーネントです。
軽量なSplunk Universal Forwarderと、中継サーバ等の用途で使用するHeavy Forwarderがあります。

Universal Forwarderはデータ転送に特化した専用ソフトウェアです。
Heavy ForwarderはSplunk Enterpriseをフォワーダ専用機として構成することで利用可能です。WebUIが使える、REST APIによる動的なデータ取得が可能等、Universal Forwarderにはない機能を備えていますが、その分必要なサーバリソースも増えます。

License Master(ライセンスマスタ)

Splunkのライセンス管理機能を提供するコンポーネントです。
分散デプロイ環境においてはどのサーバにこの機能を持たせるかを考慮する必要があります。
必須コンポーネントですが、利用開始以降に気にすることはあまりありません。

Monitoring Console(モニタリングコンソール)

Splunk全体(分散デプロイ環境含む)でのライセンス利用状況やインデックスデータのサイズ、リソース使用率等を監視する機能を提供します。
必須機能ではないですが、使って損はないです。
以前はDistributed Management Console(DMC)と呼ばれていました。

Deployment Server(デプロイメントサーバ)

フォワーダにApp(コンフィグ)を配信する機能を提供します。
フォワーダの導入ホストに直接ログインすることなく設定の変更が可能なため、フォワーダの数が多いほどに重宝する機能です。

Cluster Master(クラスタマスタ)

Indexerをクラスタとして構成する場合の必須コンポーネントです。
※正式名(?)はIndexer Cluster Master Nodeらしいです。
License Master以外のコンポーネントと同居させることは不可です。

またクラスタ内のIndexer(クラスタピアと呼ぶ)へのコンフィグの配信は、必ずCluster Masterから行う必要があります。
※Deployment Serverから配信するのはNGです。

Deployer(デプロイヤ)

Search Headをクラスタとして構成する場合の必須コンポーネントです。
※正式名(?)はSearch Head Cluster Deployerらしいです。
Cluster Masterとは異なり、他のコンポーネントとの同居も可能です。

ちなみに、Indexer Clusterは2台以上のIndexerがあれば構成できるのに対し、Search Head Clusterは最低3台のSearch Headが必要となります。
Search head clustering architecture - Splunk Documentation


それぞれのコンポーネントについて、また別の機会に詳細など書こうと思います。

Splunkの自動起動設定について

先日書いた以下エントリで、Splunkインストール後、うっかりsysVinitで起動するように設定してしまっていた。
ojisanworld.hateblo.jp

なぜこの事実に気づいたかというとこちらのエントリを読んだから。
簡単だけど注意しておきたいSplunkインストール前の考慮点 - Qiita

読んだ瞬間、「え、Splunkってsystemdじゃないの?」って思いました。
というのも、以前仕事で構築した際はsystemdだった気がするんです。
ただ、7.2.2だった気もするんだよなぁ。。

でも、boot-startの設定後、Splunkのユニットファイルがなかったんで、おかしいと思ってはいたんです。こんな感じ。

# ls -l /etc/systemd/system/
合計 4
drwxr-xr-x. 2 root root   31  319 21:13 basic.target.wants
lrwxrwxrwx. 1 root root   41  319 21:13 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root   57  319 21:13 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   41  319 21:13 dbus-org.freedesktop.timedate1.service -> /usr/lib/systemd/system/timedatex.service
lrwxrwxrwx. 1 root root   37  319 21:15 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x. 2 root root   32  319 21:12 getty.target.wants
drwxr-xr-x. 2 root root 4096  319 21:13 multi-user.target.wants
drwxr-xr-x. 2 root root   48  319 21:13 network-online.target.wants
drwxr-xr-x. 2 root root   52  319 21:13 sockets.target.wants
drwxr-xr-x. 2 root root  207  319 21:13 sysinit.target.wants
lrwxrwxrwx. 1 root root   39  319 21:12 syslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root    9  512  2019 systemd-timedated.service -> /dev/null
drwxr-xr-x. 2 root root   34  319 21:13 timers.target.wants
drwxr-xr-x. 2 root root   29  319 21:13 vmtoolsd.service.requires

systemctlでのステータス確認でも/etc/rc.d/init.d/配下のスクリプト読んでるのが確認できますし。

# systemctl status splunk
● splunk.service - SYSV: Splunk indexer service
   Loaded: loaded (/etc/rc.d/init.d/splunk; generated)
   Active: active (running) since Tue 2020-03-24 23:26:40 JST; 8min ago
...以下略


以前触ったときにsystemdだった気がするっていうのもあるけど、システム要件の記載も罠なんですよね。

System requirements for use of Splunk Enterprise on-premises - Splunk Documentation
以下の記述。

On machines that run Linux where Splunk Enterprise services are managed by systemd, you can update the /etc/systemd/system/Splunkd.service unit file to set the values shown in the table below. Review the values and adjust them depending on the machine resources available.

これだけ読んだらLinux上だとsystemdで管理されているだな、って思いますよね。。
実はこちらも読まなくちゃいけないんですよ。
Run Splunk Enterprise as a systemd service - Splunk Documentation
これ先述のシステム要件のところにリンク貼っておいてほしいです。
Splunk 7.2.2以降のバージョンで、systemd管理にするためにはboot-start実行時に"-systemd-managed 1"オプションをつける必要があると記載されています。
(デフォルトでは暗黙的に"-systemd-managed 0"となっている)

systemdについては賛否があるようですが、RHEL8も既定はsystemdですし、Splunkもsystemd管理にしたいところ。ということで手順に従ってsystemdに変更してみます。

まずはSplunkサービスの停止と自動起動の無効化

# /opt/splunk/bin/splunk stop
Stopping splunkd...
Shutting down.  Please wait, as this may take a few minutes.
..                                                         [  OK  ]
Stopping splunk helpers...
                                                           [  OK  ]
Done.

# /opt/splunk/bin/splunk disable boot-start
Disabled.

そして"-systemd-managed 1"オプションを追加しての自動起動有効化。

# /opt/splunk/bin/splunk enable boot-start -systemd-managed 1 -user splunk
Systemd unit file installed at /etc/systemd/system/Splunkd.service.
Configured as systemd managed service.

Splunkサービスの起動。

$ /opt/splunk/bin/splunk start

Splunk> CSI: Logfiles.

Checking prerequisites...
        Checking http port [8000]: open
        Checking mgmt port [8089]: open
        Checking appserver port [127.0.0.1:8065]: open
        Checking kvstore port [8191]: open
        Checking configuration... Done.
        Checking critical directories...        Done
        Checking indexes...
                Validated: _audit _internal _introspection _metrics _telemetry _thefishbucket history main summary
        Done
        Checking filesystem compatibility...  Done
        Checking conf files for problems...
        Done
        Checking default conf files for edits...
        Validating installed files against hashes from '/opt/splunk/splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64-manifest'
        All installed files intact.
        Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
'Splunkd.service'を開始するには認証が必要です。
Authenticating as: ojisan
Password:
==== AUTHENTICATION COMPLETE ====
Done
                                                           [  OK  ]

ここでの動作がinitとは異なる。ログインしているユーザの認証を求められます。
そして以前仕事で扱った際にはこれが出たことを記憶しています。
※表示された瞬間、「これだよ、これ!」って声が出た。

Splunkd.serviceというユニットファイルも生成されていることが確認できましたが、systemctlでステータス確認したら"not-found"が出ました。

# ls -l /etc/systemd/system
-rw-r--r--. 1 root root  627  324 23:56 Splunkd.service

# systemctl status splunk
● splunk.service
   Loaded: not-found (Reason: Unit splunk.service not found.)
   Active: active (exited) since Tue 2020-03-24 23:26:40 JST; 34min ago
...以下略

原因調査したいけど、時間がない。
とりあえず、困ったときのOS再起動で挙動を確認してみます。

$ systemctl status splunk
Unit splunk.service could not be found.

まさかのステータスさえ確認できなくなってしまいました。。

$ /opt/splunk/bin/splunk status
splunkd is running (PID: 994).
splunk helpers are running (PIDs: 1733 1747 1818 1915 2086).

でもSplunk CLIより自動起動していることが確認できます。
深追いは時間がかかりそうなので、また今度。

[2020/03/25更新]
原因わかりました。原因というか、凡ミスなんですが。
systemdだとユニット名は"splunk"ではなく"Splunkd"なんですね。

ユニットファイル名確認したときに気づけよ、という話ではありますが。。
ということで、ユニット名を"Splunkd"にすれば自動起動が正常に設定されていることが確認できます。

$ systemctl status Splunkd
● Splunkd.service - Systemd service file for Splunk, generated by 'splunk enable boot-start'
   Loaded: loaded (/etc/systemd/system/Splunkd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-03-25 21:42:08 JST; 42s ago
...以下略

個人的には大文字から始まるのやめてほしいな。。

なんにせよ、これにて無事systemdへの変更が完了です。

ついでにlimit設定とTHPの無効化も行っちゃいます。
設定方法は各所で説明されているので設定値だけ。

"/etc/systemd/system/Splunkd.serive"に以下を追記しました。

ExecStartPre=/bin/bash -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
LimitNOFILE=65536 * これは最初から設定されていました。
LimitNPROC=16000
LimitFSIZE=infinity

そして以下を実行します。

$ systemctl daemon-reload

$ systemctl restart Splunkd

正しく反映されているか確認です。
ここでlimit設定ですが、システム要件ではulimitコマンドで確認するような記載となっていますが、Splunkd.serviceへのlimit設定は起動プロセスに適用されていることに注意します。
※ulimitコマンドで確認できるのは、実行したユーザのlimit設定です。

Splunkのプロセスに適用されているlimitを確認するためには、まず起動しているプロセスを特定します。
psコマンドでもいいですが、systemctlで確認してしまうのが手っ取り早いと思います。

$ systemctl status Splunkd
● Splunkd.service - Systemd service file for Splunk, generated by 'splunk enable boot-start'
   Loaded: loaded (/etc/systemd/system/Splunkd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-03-25 22:06:39 JST; 14min ago
 Main PID: 2260 (splunkd)
...以下略

Main PIDよりプロセス番号が確認できました。

次に"/proc/確認したプロセス番号/limits"ファイルを参照します。上記の場合PIDが2260なので"/proc/2260/limits"となります。

$ cat /proc/2260/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             16000                16000                processes
Max open files            65536                65536                files
Max locked memory         16777216             16777216             bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7087                 7087                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

Soft Limit、Hard Limitともに、先に設定したlimitが適用されているのが確認できました。

次はTHPです。
これは簡単で以下のコマンドで"never"が"[]"でくくられているのを確認するだけです。

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always defer defer+madvise madvise [never]

RHELのサイトをみると、grubの設定でTHPを無効化する方法も記載されていますが、まあこのほうが簡単で安全でしょう。

OS周りの設定はこんなもんかと思いますので、今回はここまでとします。

BOM付UTF-8のBOMを外す

Linux上でUTF-8のBOM(Byte Order Mark)を外す方法を検索するとnkfを使う方法を多く確認できます。
ただMinimalインストール環境でどうにかできんかね?って検索したら、この辺に色々書いてあったので試してみようと思います。
linux - How can I remove the BOM from a UTF-8 file? - Stack Overflow
UTF-8ファイルからBOMを削除するにはどうすればよいですか?

環境

まずは自宅環境。

$ localectl
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp

$ echo -e "field1,field2\nフィールド1,フィールド2" > utf8linux.csv

$ cat utf8linux.csv
field1,field2
フィールド1,フィールド2

$ file utf8linux.csv
utf8linux.csv: UTF-8 Unicode text

って感じです。
BOM付UTF-8作成は、業務的な流れを想定してWindows 10(ホストOS)で作成したものをCentOS(ゲストOS)へ送ります。
CSVにしているのは今後Splunkのエントリで扱うことを予定しているからです。

ちなみに自宅のWindows 10(1903)だと、メモ帳でも既定でBOMなしUTF-8になっていて、BOM付けることも選択できました。
f:id:ojisanworld:20200322102815p:plain
ただ、業務アプリケーションが自動生成するファイルとかだと、勝手にBOM付になることがあるので、そういう環境だとBOM外す必要あるよねって感じで見ていただければと思います。
今回は検証用にBOM付にします。

$ file utf8withbom.csv
utf8withbom.csv: UTF-8 Unicode (with BOM) text, with CRLF line terminators

$ cat utf8withbom.csv
field1,field2
フィールド1,フィールド2

sed

まずはsed

$ sed -i $'1s/^\uFEFF//' utf8withbom.csv
$ file utf8withbom.csv
utf8withbom.csv: UTF-8 Unicode text, with CRLF line terminators

余裕でした。
原本を残して別名保存する場合はリダイレクトを使えばいけます。

sed '1s/^\xEF\xBB\xBF//' < utf8withbom.csv > utf8withoutbom.csv

vim

vi(vim)を使う方法。
対話形式でよければ、以下のように編集、保存するだけ。

$ vi utf8withbom.csv 
:set nobomb
:wq!

ただこれだと、スクリプト化できないし、都度やるのはめんどうなので、BOMだけ外すのであれば以下のように1ラインでOK。

$ vi -c "set nobomb" -c wq! utf8withbom.csv

$ file utf8withbom.csv
utf8withbom.csv: UTF-8 Unicode text, with CRLF line terminators

tail

tailを使うパターン。BOMは先頭3バイトなので4バイト目以降を読みだしてリダイレクトする形。

$ tail --byte=+4 utf8withbom.csv > utf8withoutbom.csv

$ file utf8withoutbom.csv
utf8withoutbom.csv: UTF-8 Unicode text, with CRLF line terminators

この方法を使う場合は、リダイレクト先を異なるファイルにしないといけないようです。
※同名で設定したら空のファイルになってしまいました。


他にawkを使う方法もあるようですが、上記3つの方法よりコマンド内容が複雑なんで、これだけ知っておけばよいかな、と思います。

今回は以上。

CentOS 8にSplunkをインストール

CentOS 8にSplunkをインストールします。

CentOSは自宅PCのVMware Workstation Player上に最小構成(Minimal)で用意しています。

$ hostname
SplunkServer

$ uname -a
Linux SplunkServer 4.18.0-147.el8.x86_64 #1 SMP Wed Dec 4 21:51:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)

Splunkは最新バージョン、インストールにはrpmパッケージを利用します。
f:id:ojisanworld:20200321153600p:plain
ゲストOSはホストとNAT接続させていてインターネットアクセスが可能なので、直接ダウンロードします。
ダウンロードするためのURLはこんな感じでダウンロード画面から確認可能です。
f:id:ojisanworld:20200321154002p:plain


最小構成だとwgetが利用できないので、curlを利用します。
wgetと違い、curlでファイル名を指定するオプションは小文字の"o"なので変更します。

$ curl -o ./splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?ar
chitecture=x86_64&platform=linux&version=8.0.2.1&product=splunk&filename=splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm&wget=true'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0

$ ls -l
合計 0
-rw-rw-r--. 1 ojisan ojisan 0  321 15:43 splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm

コマンドの実行は成功しましたが、サイズ0のファイルが作成されてしまいました。
URLからしてリダイレクトされているように見えるので、"-L"オプションも付加してみます。

$ curl -L -o ./splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm 'https://www.splunk.com/bin/splunk/DownloadActivityServlet
?architecture=x86_64&platform=linux&version=8.0.2.1&product=splunk&filename=splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm&wget=true'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100  486M  100  486M    0     0  10.8M      0  0:00:45  0:00:45 --:--:-- 10.8M

$ ls -l
合計 498180
-rw-rw-r--. 1 ojisan ojisan 510134434  321 15:48 splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm

無事ダウンロードできました。
ハッシュ値まで確認すべきなんでしょうがめんどいので省略します。

ここからSplunkのインストールです。
ユーザ"ojisan"はスーパーユーザではないので、sudoをつけてやります。

$ sudo rpm -ivh ./splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm
[sudo] ojisan のパスワード:
警告: ./splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64.rpm: ヘッダー V4 RSA/SHA256 Signature、鍵 ID b3cd4420: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
useradd: ディレクトリ /opt/splunk を作成できません
更新中 / インストール中...
   1:splunk-8.0.2.1-f002026bad55      ################################# [100%]
complete

$ rpm -qi splunk
Name        : splunk
Version     : 8.0.2.1
Release     : f002026bad55
Architecture: x86_64
Install Date: 20200321155611秒
Group       : Applications/Internet
Size        : 1336979287
License     : Commercial
Signature   : RSA/SHA256, 20200305030359秒, Key ID 5efa01edb3cd4420
Source RPM  : splunk-8.0.2.1-f002026bad55.src.rpm
Build Date  : 20200305030129秒
Build Host  : 6f9d1b48bd7b
Relocations : /opt
Vendor      : Splunk Inc. <info@splunk.com>
Summary     : Splunk
Description :
The platform for machine data.

"useradd: ディレクトリ /opt/splunk を作成できません"
は無視して問題ありません。
※"/opt/splunk"はインストールディレクトリなので、存在しなければインストールも失敗します。

rpmパッケージからインストールすると"splunk"というユーザとグループが作成され、インストールディレクトリ(/opt/splunk)配下のファイルも所有者が一律spunkになります。

$ grep splunk /etc/passwd
splunk:x:1001:1001:Splunk Server:/opt/splunk:/bin/bash

$ ls -l /opt
合計 0
drwxr-xr-x. 8 splunk splunk 224  321 15:56 splunk

RHEL版のSplunkはインストール後に起動しませんし、自動起動設定もされていません。
RHEL版しか利用したことないのでDebian版とかがどうかは知らない。。

まずは自動起動の設定をします。"-user"オプションで起動ユーザをsplunkにします。
※"--accept-license"をつけることで、コマンド実行後に表示されるライセンス同意をスキップ(承認)することができます。
※Splunkの初回起動コマンド実行時には管理者ユーザの設定を求められます。GUIへのログインやSplunk CLIの実行時に利用するため失念ないように。
※[2020/03/23追記]ここで”-systemd-managed”オプションの指定を失念してました。Splunk 8.0.2では当該オプションなしだと、SysVinitでの起動となるようです。

$ sudo /opt/splunk/bin/splunk enable boot-start -user splunk --accept-license
[sudo] ojisan のパスワード:

This appears to be your first time running this version of Splunk.

Splunk software must create an administrator account during startup. Otherwise, you cannot log in.
Create credentials for the administrator account.
Characters do not appear on the screen when you type in credentials.

Please enter an administrator username: splunk
Password must contain at least:
   * 8 total printable ASCII character(s).
Please enter a new password:
Please confirm new password:
Copying '/opt/splunk/etc/openldap/ldap.conf.default' to '/opt/splunk/etc/openldap/ldap.conf'.
Generating RSA private key, 2048 bit long modulus
..........................................+++++
...............................................+++++
unable to write 'random state'
e is 65537 (0x10001)
writing RSA key

Generating RSA private key, 2048 bit long modulus
........+++++
............................................+++++
unable to write 'random state'
e is 65537 (0x10001)
writing RSA key

Moving '/opt/splunk/share/splunk/search_mrsparkle/modules.new' to '/opt/splunk/share/splunk/search_mrsparkle/modules'.
Init script installed at /etc/init.d/splunk.
Init script is configured to run at boot.


Splunkの起動はsplunkユーザで実行します。

$ sudo su splunk
[sudo] ojisan のパスワード:

$ /opt/splunk/bin/splunk start

Splunk> The IT Search Engine.

Checking prerequisites...
        Checking http port [8000]: open
        Checking mgmt port [8089]: open
        Checking appserver port [127.0.0.1:8065]: open
        Checking kvstore port [8191]: open
        Checking configuration... Done.
                Creating: /opt/splunk/var/lib/splunk
                Creating: /opt/splunk/var/run/splunk
                Creating: /opt/splunk/var/run/splunk/appserver/i18n
                Creating: /opt/splunk/var/run/splunk/appserver/modules/static/css
                Creating: /opt/splunk/var/run/splunk/upload
                Creating: /opt/splunk/var/run/splunk/search_telemetry
                Creating: /opt/splunk/var/spool/splunk
                Creating: /opt/splunk/var/spool/dirmoncache
                Creating: /opt/splunk/var/lib/splunk/authDb
                Creating: /opt/splunk/var/lib/splunk/hashDb
New certs have been generated in '/opt/splunk/etc/auth'.
        Checking critical directories...        Done
        Checking indexes...
                Validated: _audit _internal _introspection _metrics _telemetry _thefishbucket history main summary
        Done
        Checking filesystem compatibility...  Done
        Checking conf files for problems...
        Done
        Checking default conf files for edits...
        Validating installed files against hashes from '/opt/splunk/splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64-manifest'
        All installed files intact.
        Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...
Generating a RSA private key
.........+++++
........................................................................................................................................................................................+++++
writing new private key to 'privKeySecure.pem'
-----
Signature ok
subject=/CN=SplunkServer/O=SplunkUser
Getting CA Private Key
writing RSA key
Done
                                                           [  OK  ]

Waiting for web server at http://127.0.0.1:8000 to be available... Done


If you get stuck, we're here to help.
Look for answers here: http://docs.splunk.com

The Splunk web interface is at http://SplunkServer:8000

ここで起動状態を確認してみました。

$ sudo /opt/splunk/bin/splunk status
splunkd is running (PID: 2027).
splunk helpers are running (PIDs: 2028 2047 2109 2212).

$ systemctl status splunk
● splunk.service - SYSV: Splunk indexer service
   Loaded: loaded (/etc/rc.d/init.d/splunk; generated)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

Splunk CLIでは問題なく起動が確認できますが、systemdのほうでは"inactive"となってしまっています。
Splunkの待ち受けポート(8089/tcp, 8191/tcp, 8000/tcp)も正常にリッスンされていて問題はなさそうに見えます。

$ ss -tan
State            Recv-Q             Send-Q                            Local Address:Port                           Peer Address:Port
LISTEN           0                  128                                     0.0.0.0:22                                  0.0.0.0:*
LISTEN           0                  128                                     0.0.0.0:8089                                0.0.0.0:*
LISTEN           0                  128                                     0.0.0.0:8191                                0.0.0.0:*
LISTEN           0                  128                                     0.0.0.0:8000                                0.0.0.0:*
LISTEN           0                  5                                     127.0.0.1:8065                                0.0.0.0:*

CentOS 8のバグとか、相性の問題でしょうか。一度OSを再起動してみました。

$ systemctl status splunk
● splunk.service - SYSV: Splunk indexer service
   Loaded: loaded (/etc/rc.d/init.d/splunk; generated)
   Active: active (running) since Sat 2020-03-21 16:31:15 JST; 1min 1s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 962 ExecStart=/etc/rc.d/init.d/splunk start (code=exited, status=0/SUCCESS)
    Tasks: 168 (limit: 11339)
   Memory: 1.0G
   CGroup: /system.slice/splunk.service
           tq1736 splunkd -p 8089 start
           tq1742 [splunkd pid=1736] splunkd -p 8089 start [process-runner]
           tq1791 mongod --dbpath=/opt/splunk/var/lib/splunk/kvstore/mongo --storageEngine=mmapv1 --port=8191 --timeStampFormat=iso8601-utc --smallfile>
           tq1936 /opt/splunk/bin/python3.7 -O /opt/splunk/lib/python3.7/site-packages/splunk/appserver/mrsparkle/root.py --proxied=127.0.0.1,8065,8000
           tq2005 /opt/splunk/bin/splunkd instrument-resource-usage -p 8089 --with-kvstore
           tq2175 [splunkd pid=1736] [search-launcher]
           mq2176 [splunkd pid=1736] [search-launcher] [process-runner]

ちゃんとactive(running)になりました。一件落着?

最後にSplunk Webにアクセスできるか確認します。デフォルトではTLSは有効化されていないので"http://[ホスト名 or IPアドレス]:8000"で接続します。
の前に、ファイアウォールの設定を確認しておきます。

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

アクティブなゾーンに8000/tcpの許可設定はないことが確認できましたので追加します。
※今回は本番環境でも何でもないので、publicゾーンにどーんと設定しています。

$ sudo firewall-cmd --add-port=8000/tcp --zone=public --permanent
success

$ sudo firewall-cmd --reload
success

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 8000/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

IPアドレスも確認。

$ ip a show dev ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:05:d3:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.121.129/24 brd 192.168.121.255 scope global dynamic noprefixroute ens160
       valid_lft 1095sec preferred_lft 1095sec
    inet6 fe80::ba5f:b58:65a8:8ecb/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

ではアクセス。
f:id:ojisanworld:20200321164551p:plain

無事接続できました。今回はここまで。

Splunkのシステム要件をちゃんと読む

Splunkのシステム要件、ちゃんと確認してますか?

ちょいと確認してみます。

 

なお、対象はSplunk Enterpriseのみ、本日時点で最新バージョンである8.0.2のドキュメントを参照します。

Splunk Universal Forwarderとかはまたの機会に。

System requirements for use of Splunk Enterprise on-premises - Splunk Documentation

 

Supported Operating Systems

サポートされるOSの情報。

表ではSplunk Enterpriseは"Enterprise License"という列を見ていきます。

"X"と"D"がサポート対象だけど、"D"は近い将来サポート外になる可能性が高いため非推奨。

 

Unix/Linuxプラットフォームでは、Linux Kernel 2.6、3.x、4.x、Windowsプラットフォームでは、Windows Server 2016か2019がサポートされています。

Linux Kernel 2.6は非推奨です。まあRHELなら6とかなんで、今からこれを選択することもないでしょう。

 

コンテナもサポートされていて、そちらはLinux Kernel 4.xのみが対象です。

 

Operating system notes

Windowsについては注意事項も記載されています。

かいつまんで言うと、WindowsはSplunkを実行するユーザの権限に注意してねって感じですかね。

権限云々でいえば、Linuxでも同じだと思いますけどね。

 

Operating systems that support the Monitoring Consoleには、モニタリングコンソールという、Splunkの正常性等を確認できる便利機能を利用する場合には追加の要件あるよ、と書いてあります。

といっても、記載のリンクを参照しても、有用なことは書いてないように見えるので、あまり気にしなくてもいいかも。

 

Deprecated operating systems and features

今サポートしてても、Splunkのアップデートにあわせて非サポートになる可能性あるからね、という念押し。

 

Creating and editing configuration files on OSes that do not use UTF-8 character set encoding

これ、超大事。今どきUTF-8扱えないOSはないと思うけど、この"UTF-8"はSplunk触ってるといろんなところでつまづきポイントになりがち。

とくにWindows版では注意。この辺は別のエントリで書きたい。

 

IPv6 platform support

IPv6サポートしてます。

...これはいいよね。

 

Supported browsers

サポートされるブラウザ。IEがあって、Edgeはない。

IEは互換性モード非サポートってあるけど、互換性モードでなくても表示崩れたり、読み込み失敗したりと不安定なことが多い印象。

できればChromeFirefoxを使いたいですね。

 

Recommended hardware

推奨されるハードウェア。これもかなり大事。

ちょっと前後するけど、推奨されるハードウェアスペックはRecommended hardware capacityに書いてある。

 

ここ、昔からWindowsとそれ以外で分かれているけど、結局同じことが書いてあります。意味あるのかな?

RAID0(またはRAID1+0)って書いてあるけど、Splunkが高速であるためには、ディスクの読み書きが高速である必要があるってことで、たぶん必須ではない。

必須ではないけど、まあ高速化するなら使うよねってところ。もちろん、RAID5とかでもいい。

 

Splunk Enterprise and virtual machines

今は仮想化やクラウド利用が主流で、Splunk用に専用の物理サーバを用意することはないと思います。

この項目には仮想化環境(IaaS含む)の利用時は、物理サーバ占有利用時よりパフォーマンスが落ちることに注意してね、ってことが書いてあります。

 

ハードウェアに関してはこちらを参照したほうがいいです。

Reference hardware - Splunk Documentation

 

Supported file systems

サポートされるファイルシステムファイルシステム自体は言うことないかな。

 

Considerations regarding Network File System (NFS)

NFSは注意が必要。原則、Hot/Warmバケツの保存場所として利用するのはNG。

Cold/Frozenなら利用可。ただし、ネットワーク経由する分サーチのパフォーマンスが落ちるので、そこは理解してねって感じ。

あと、Considerations regarding Common Internet File System (CIFS)/Server Message Block (SMB)WindowsのSMBについても書かれているけど、だいたい同じようなこと言ってると思います。

 

Considerations regarding system-wide resource limits on *nix systems

Unix/Linuxだとデフォルトのリソース制限設定が引っかかってエラーになったり、パフォーマンス落ちたりする可能性があるんで、制限を緩和してね、と。

設定方法はディストリビューションによって異なるので、各自で確認する必要があります。

 

別途、CentOS8にSplunkインストールするエントリ書く予定なので、そこでこの辺の設定も確認したいと思います。

 

Considerations regarding environments that use the transparent huge pages memory management scheme

LinuxのTHPという機能が有効だと30%パフォーマンス落ちる可能性があるとのこと。他のアプリケーションでも使う必要ないなら、無効にしてねという話。

これもCentOS8で確認したいと思います。

 

今回は以上。

※ディスクサイジングとかも書かなきゃな気がするけど、それはまたいつか。

 

 

当ブログのプライバシーポリシー

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。この規約に関して、詳しくはここをクリックしてください。

当ブログへのコメントについて

当ブログでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。

これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって、削除する事があります。

  • 特定の自然人または法人を誹謗し、中傷するもの。
  • 極度にわいせつな内容を含むもの。
  • 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
  • その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

当サイトへのリンクに関して

当サイトは完全リンクフリーです。トップページ、記事など、正規に公開しているページであれば、どのページにリンクしていただいても問題ありません。

免責事項

当ブログで掲載している画像の著作権・肖像権等は各権利所有者に帰属致します。権利を侵害する目的ではございません。記事の内容や掲載画像等に問題がございましたら、各権利所有者様本人が直接メールでご連絡下さい。確認後、対応させて頂きます。

当ブログからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当ブログのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。