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 3月 19 21:13 basic.target.wants lrwxrwxrwx. 1 root root 41 3月 19 21:13 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service lrwxrwxrwx. 1 root root 57 3月 19 21:13 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service lrwxrwxrwx. 1 root root 41 3月 19 21:13 dbus-org.freedesktop.timedate1.service -> /usr/lib/systemd/system/timedatex.service lrwxrwxrwx. 1 root root 37 3月 19 21:15 default.target -> /lib/systemd/system/multi-user.target drwxr-xr-x. 2 root root 32 3月 19 21:12 getty.target.wants drwxr-xr-x. 2 root root 4096 3月 19 21:13 multi-user.target.wants drwxr-xr-x. 2 root root 48 3月 19 21:13 network-online.target.wants drwxr-xr-x. 2 root root 52 3月 19 21:13 sockets.target.wants drwxr-xr-x. 2 root root 207 3月 19 21:13 sysinit.target.wants lrwxrwxrwx. 1 root root 39 3月 19 21:12 syslog.service -> /usr/lib/systemd/system/rsyslog.service lrwxrwxrwx. 1 root root 9 5月 12 2019 systemd-timedated.service -> /dev/null drwxr-xr-x. 2 root root 34 3月 19 21:13 timers.target.wants drwxr-xr-x. 2 root root 29 3月 19 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 3月 24 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周りの設定はこんなもんかと思いますので、今回はここまでとします。