【Splunk】フリーライセンスを使用して無料でSplunk Enterpriseを利用する

こんにちは。torippy1024です。
Splunkのオンプレ版製品であるSplunk Enterpriseには、フリーライセンスがあり、無償で利用することが可能です。
今回は、フリーライセンスでできる機能を紹介し、実際にインスタンスを立ててみようと思います。

### フリーライセンスでできること

フリーライセンスでは、Splunk Enterpriseの一部機能のみが利用可能です。具体的には、以下の機能が利用可能です。

- 1日あたり500MBのインデックス作成
- スタンドアロンの単一インスタンス環境のみで利用可(つまり、Search HeadとIndexerをサーバー毎に分割できない)
- 有効期限はなし

また逆に、利用できない機能は以下の通りです。
>Splunk Free is for standalone, single-instance use only installations. Most Splunk Enterprise features are available on the Free license, with the following exceptions:
>- Ingest actions is not available.
>- Alerting (monitoring) is not available.
>- There are no users or roles. This means:
    - There is no login. You are passed straight into Splunk Web as an administrator-level user.
    - The command line or browser can access and control all aspects of Splunk Free with no user and password prompt.
    - There is only the admin role, and it is not configurable. You cannot add roles or create user accounts.
    - Restrictions on search, such as user quotas, maximum per-search time ranges, and search filters are not supported.
    - Features that rely on user authentication do not work.
>- Distributed search configurations including search head clustering are not available.
>- Deployment management capabilities are not available.
>- Indexer clustering is not available.
>- Forwarding in TCP/HTTP formats is not available. This means you can forward data from a Free license instance to other Splunk platform instances, but not to non-Splunk software.
>- Report acceleration summaries are not available.

Google翻訳
>Splunk Free は、スタンドアロンの単一インスタンス使用専用インストールです。ほとんどの Splunk Enterprise 機能は、次の例外を除き、無料ライセンスで利用できます。
>- 取り込みアクションは使用できません。
>- アラート（監視）は利用できません。
>- ユーザーやロールはありません。これは次のことを意味します:
    - ログインは必要ありません。管理者レベルのユーザーとして Splunk Web に直接アクセスできます。
    - コマンドラインまたはブラウザから、ユーザー名とパスワードの入力を求められることなく、Splunk Free のあらゆる側面にアクセスし、制御できます。
    - 管理者ロールのみが存在し、構成できません。ロールを追加したり、ユーザー アカウントを作成したりすることはできません。
>- ユーザー割り当て、検索ごとの最大時間範囲、検索フィルターなどの検索の制限はサポートされていません。
>- ユーザー認証に依存する機能は動作しません。
>- 検索ヘッド(注訳：Search Headの直訳)のクラスタリングを含む分散検索構成は使用できません。
>- 展開管理機能は利用できません。
>- インデクサー クラスタリングは使用できません。
>- TCP/HTTP 形式での転送は利用できません。つまり、無料ライセンスのインスタンスから他の Splunk プラットフォーム インスタンスにデータを転送することはできますが、Splunk 以外のソフトウェアには転送できません。
>- レポートの加速の概要は利用できません。(注訳：レポートアクセラレーション機能は利用不可、という意味)

引用元：What features are disabled on Splunk Free?
https://docs.splunk.com/Documentation/Splunk/latest/Admin/MoreaboutSplunkFree#What_features_are_disabled_on_Splunk_Free.3F

いろいろ機能が制限されますが、個人的に大きな問題は、ログインなしであらゆる管理機能が使用できてしまうこと、アラート機能が使えないこと、Search Head ClusterおよびIndexer Clusterが利用できないこと、あたりが商用ライセンスと大きく異なる点かなと思いました。
ただし、ソースタイプの定義やフィールド抽出などの機能は何も制限されていません。本番同等です。またApp/Add-onは使えるということなので、そこもいい点です。(Enterprise SecurityなどのPremium Appは当然使えませんが)


#### ライセンス違反をしないための注意

フリーライセンスにもライセンス違反があります。
ライセンス違反をすると、インデックス作成(データの取り込み)は可能だが、サーチが実行できなくなるようです。ただ一定期間放置しておけば復旧されます。
30日間連続で3回以上、500MB/dayの取り込み量を超えるとライセンス違反です。
取り込み量を制限するのは難しいので気をつけたいのですが、アラート機能がないのでマニュアルチェックか、自作スクリプトの作成などが必要そうです。

>The Free license will prevent searching if there are 3 license warnings in a rolling 30 day window. If that happens, Splunk Free continues to index your data but disables search functionality. You will regain search when you are below 3 license violation warnings in a 30 day period. See About license violations.

Google 翻訳
>無料ライセンスでは、30 日間に 3 件のライセンス警告が発生した場合、検索ができなくなります。その場合、Splunk Free は引き続きデータのインデックスを作成しますが、検索機能は無効になります。30 日間にライセンス違反の警告が 3 件未満になると、検索機能が回復します。「ライセンス違反について」を参照してください。

引用元：About Splunk Free
https://docs.splunk.com/Documentation/Splunk/9.3.2/Admin/MoreaboutSplunkFree


### Splunkを導入するための条件

いろいろ制限はあるけど、とにかく無料なんだ！いいから使ってみよう！！と考える人も多いと思います。
では使ってみることにしましょう。
導入のためのハードウェア要件を見てみます。

>x86 64ビットチップアーキテクチャ
>12 個の物理 CPU コア、またはコアあたり 2 GHz 以上の速度の 24 個の vCPU。
>12 GB の RAM。
>ストレージについては、 「ロールにはどのストレージ タイプを使用すればよいですか?」のIndexer の推奨事項を確認してください。
>1 Gb イーサネット NIC、管理ネットワーク用のオプションの 2 番目の NIC。
>64 ビット Linux または Windows ディストリビューション。インストール マニュアルの「サポートされているオペレーティング システム」を参照してください。

引用元：Reference hardware
https://docs.splunk.com/Documentation/Splunk/latest/Capacity/Referencehardware

えっ、物理CPU12コア必要なの？メモリも12GB？と思った方、ご心配なく。
300GB/dayまでのデータ取り込み量であれば、シングルインスタンスで実行可能(https://docs.splunk.com/Documentation/Splunk/latest/Capacity/Summaryofperformancerecommendations )とあるため、上記はそれを見込んだ数値ではないかと予測されます。(個人的な見解です)


本当にただSplunk Enterpriseをインストールしてイベントをいくつか取り込んで、Web画面でサーチを実行してみるだけであれば、それこそ2vCPU/4GBメモリのAWS EC2でも動作するので、とりあえず試してみたいだけの方はそれくらいのスペックでも構わないと個人的には思います。
ディスク速度やネットワーク帯域なども、ちゃんと使い出すと非機能要件の確認が必要ですが、フリーライセンスで使う範囲であれば気にしなくてもいいでしょう。
ディスク容量のみ、保存期間などを踏まえて概算で試算しておくことは必要と思います。
500MB/dayまでなので、30日間全ログを保管するとすると、15GBあればまあ安心です。

ちなみに実行するためのOSは、Windows/Linuxどちらでも可能です。Macbookでも動作可能ですし、AIX/Solaris/FreeBSDでも動作するようです。

引用元：System requirements for use of Splunk Enterprise on-premises
https://docs.splunk.com/Documentation/Splunk/latest/Installation/Systemrequirements

### Splunk Enterpriseインストール手順(Linux)

インストール手順(Linux版)は以下の通りです。他の記事で書いた手順とほぼ同じです。

splunkというユーザーを作成して、そのユーザーでsplunkプロセスを起動します。
初期インストールはrootで実行し、その後、splunkユーザーにディレクトリのオーナーを変更してから起動し直すことがポイントです。
```
ssh torippy1024@xxx.xxx.xxx.xxx
sudo mkdir /opt/splunk
sudo useradd splunk
sudo passwd splunk
(パスワードを入力)
wget -O splunk-9.3.0-51ccf43db5bd-Linux-x86_64.tgz "https://download.splunk.com/products/splunk/releases/9.3.0/linux/splunk-9.3.0-51ccf43db5bd-Linux-x86_64.tgz"
sudo tar -xzvC /opt -f splunk-9.3.0-51ccf43db5bd-Linux-x86_64.tgz 
sudo /opt/splunk/bin/splunk start --accept-license --answer-yes --seed-passwd password
sudo /opt/splunk/bin/splunk stop
sudo chmod -R 755 /opt/splunk
sudo chown -R splunk:splunk /opt/splunk
sudo /opt/splunk/bin/splunk enable boot-start -user splunk
sudo /opt/splunk/bin/splunk start
```

splunkユーザーでsplunkを起動するにあたって、重要なポイントがSplunk内部ログへのアクセス権限です。
重要なログは/var/log/に保管されていることが多いのですが、デフォルトユーザーはアクセス権を持っていません。
このため、setfaclでsplunkユーザーに読み取り権限を付与しておきます。

/var/log/への読み取り権限付与
```
sudo setfacl -R -m d:u:splunk:r /var/log/
sudo setfacl -R -m u:splunk:r /var/log/
```

個別のファイルへのアクセス権限を付与する方法もあるのかもしれませんが、その場合ログローテーションに対応できないため、ディレクトリそのものにアクセス権を付与した方がいいと思います。

### Forwarderインストール手順(Linux)

Splunkを使うためにはログが必要です。
Syslogやスクリプト入力やWMIなどでもログは取り込めますが、やはりForwarderからログ転送してもらったほうが多くのログを確実に収集できます。
というわけで、別のサーバーを用意して、そこにForwarderをインストールしておきます。

```
ssh torippy1024@xx.xx.xx.xx
sudo mkdir /opt/splunkforwarder
sudo useradd splunkfwd
sudo passwd splunkfwd
(パスワードを入力)
wget -O splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz "https://download.splunk.com/products/universalforwarder/releases/9.3.0/linux/splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-9.3.0-51ccf43db5bd-Linux-x86_64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
sudo /opt/splunkforwarder/bin/splunk stop
sudo chmod -R 755 /opt/splunkforwarder
sudo chown -R splunkfwd:splunkfwd /opt/splunkforwarder
sudo setfacl -R -m u:splunkfwd:r /var/log/
sudo /opt/splunkforwarder/bin/splunk enable boot-start -user splunkfwd
sudo /opt/splunkforwarder/bin/splunk start
```

Forwarderの場合、ログの転送先であるSplunk EnterpriseのIPアドレスとポートを指定する必要があります。ログ転送のデフォルトポートは9997/tcpですのでそちらをそのまま使用して転送先を指定します。
(Splunk Cloudを利用する場合、SSL化のためのクレデンシャルAppをForwarderにインストールすることで、そのAppの中にSplunk CloudのFQDNを使ってログ転送を行います。今回はオンプレ版のEnterpriseなので、CLIを使ってSplunk EnterpriseをインストールしたサーバーのIPアドレスを指定します)

```
sudo /opt/splunkforwarder/bin/splunk add forward-server <Splunk Enterpriseの内部IPアドレス>:9997
sudo /opt/splunkforwarder/bin/splunk restart
sudo /opt/splunkforwarder/bin/splunk list forward-server
(<Splunk Enterpriseの内部IPアドレス>:9997がActive Forwardsに登録されていることを確認)
```

それ以外の作業としては、LinuxであればとりあえずLinux and Unix add-onをインストールした方がいいと思います。
手順はここでは省略します。以下の記事を読んでSplunk EnterpriseとForwarder両方にインストールしてみてください。それぞれ手順が異なりますのでご注意ください。

【Splunkラボ】Splunk Cloudに中継Forwarder経由でログ転送するための手順
https://qiita.com/torippy1024/items/1c125ab08967c11f1889

### ログインして使ってみる

では、実際にSplunk Enterrpriseを使用してみます。https://< Splunk EnterpriseのIPアドレス>:8000 でアクセスします。ポート番号は8000であることに注意してください。

![スクリーンショット 2024-12-05 0.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/dcaca64e-2f35-9a33-98c1-f786dfde1082.png)

インストール直後はフリーライセンスではなく、30日間有効のトライアルライセンスが適用されているため、ログイン画面が表示されます。こちらはインストール時に指定したユーザーとパスワードを使用してログインできます。
本手順の通りインストールしていれば、admin/passwordです。
ちなみに、トライアルライセンスの期限が切れると30日後にはフリーライセンスに切り替わります。

急いでライセンスを変更する必要性は低いのですが、使えると思って使っていた機能が30日間後に急に使えなくなると困ることもあるので、最初からフリーライセンスに切り替えてみます。
メニューの[設定]-[ライセンス]を選択し、[ライセンスグループの変更]-[フリーライセンス]を選択して保存します。その後、Splunk Enterpriseを再起動すればフリーライセンスが適用されます。

![スクリーンショット 2024-12-05 0.56.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/b7c0427f-b7af-ec4a-a889-1db816604d00.png)

フリーライセンスになると、ログイン画面は表示されなくなります。
ログイン不要でサーチやSplunk管理など、フリーライセンスで利用可能な全機能が利用可能です。

![スクリーンショット 2024-12-05 0.57.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/6cdb7b98-143b-bb22-984a-a19a62f99a13.png)

ちなみに、フリーライセンスであっても、APIを実行することはできます。
例えば、以下を実行することによってサーチ結果をcsv形式で取得することもできます。(json/xmlも選択可能)

curlでSPLを実行
```
curl -k https://localhost:8089/services/search/v2/jobs/export -d search="<SPL>" -d output_mode=csv
```

具体例(通常省略されているサーチ文先頭の"search"を明示しないと動作しなかったので注意)
```
curl -k https://localhost:8089/services/search/v2/jobs/export -d search="search index=_internal | head 5" -d output_mode=csv
```

参考：REST API Reference Manual
https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTprolog

困った時にとりあえず使うSplunk公式チュートリアルデータ tutorialdata.zip(https://docs.splunk.com/Documentation/SplunkCloud/latest/SearchTutorial/Systemrequirements#Download_the_tutorial_data_files )をアップロードすれば、Splunkの機能自体は十分体験できます。


### フリーライセンスでは何ができるのか
というわけで、フリーライセンスを活用したSplunk Enterpriseのインストール手順と、ざっくりできることについてまとめてみました。
フリーライセンスであり、非機能要件には制限がありますが、期間無制限でログ検索・管理機能の多くを利用可能であるので、トライアルの延長で利用するようなイメージであれば使うことは可能だと思います。

例えば自分でソースタイプやフィールド抽出を定義して、オリジナルログを取り込むこともできますし、splunkbase(https://splunkbase.splunk.com )に公開されている好きなApp/Add-onを使用することもできます。(Enterprise SecurityなどのPremium Appは除く)

App/Add-onを自分で開発することも可能です。
(ただ開発をする場合は、Deveploper License(https://dev.splunk.com/enterprise/dev_license) を申請できるので、それを利用する方がいいかもしれません)

分散構成がとれないことは我慢し、アラート機能はAPIやCLIを実行してサーチ結果を取得してアラート通知するスクリプトを自作し、ログイン不要で全機能を使えてしまう問題に対しては、Splunkを含む本番環境ネットワークにアクセスできるサーバー自体へのアクセスを厳密に制限しておけば、本番環境でもそこそこ使えるのかもしれないなと思いました。
(まあ、そこまでちゃんとやるならちゃんと契約しろよって話でもありますが)

以上です。