Linux サーバーのログを Universal Forwader を使って Splunk Cloud に送信する
今回は、シンプルに Linux サーバーのログをログ送信のエージェントである Universal Forwarder を使って Splunk Cloud に送信してみたいと思います。
*nixデータの収集
公式ドキュメント参考
構成
構成としては、一番シンプルかつ、データ転送パフォーマンスが良い、フォワーダーからインデクサーへのダイレクトフォワーディング構成で設定します。
下記の構成図では、Forwarders がデータを送りたいLinuxサーバーで Indexers が Splunk Cloud の環境と捉えていただけるとよいかと思います。
ダイレクトフォワーディングが適している構成は以下のポイントになります。
- シンプルな構成で構築・管理がしやすい
- インデクサーとの接続構成がシンプルで処理効率が良い
- HTTPプロキシの経由が必要な場合、HTTPOUT のオプションが利用できる(後述「UF -> UF -> Splunk Cloud」でも可能)
- 直接インターネットに出ることができないプライベート空間などの制限がない場合
Splunk のログ送信エージェントである Universal Forwarder はTCP上で動く独自プロトコルを使います。
S2S(Splunk to Splunk)と呼ばれポート9997を使います。
Universal Forwarder をインストールしたインスタンスからアウトバウンド方向の通信がFWなどで許可されていることを確認します。
そのため、HTTPSプロキシの経由が必要な環境では、そのままでは利用できません。
HTTPSプロキシ経由が必要なケースでは、Universal Forwarder の設定で HTTPOUT というオプションを使うことで、HTTPに変換してデータ送信を行うことができますが、今回の記事ではその内容については触れないでおこうと思います。
今回の構成以外で、中間フォワーダーを連携するパターン(UF -> 中間フォワーダー -> Splunk Cloud)があります。
中間フォワーダーでもUniversal Forwarderで経由するもの(UF -> UF -> Splunk Cloud)、Heavy Forwarderで経由するもの(UF -> HF -> Splunk Cloud)とがありますので、詳細は以下のドキュメントも参考にしていただけます。
フォワーダーの名称と役割についてはこちらのブログを参考にいただけると良いかと思います。
フォワーダー(S2Sアウトプット時)のデータ損失防止について
フォワーダーでデータを転送する時の、データ損失防止についても確認しておきます。(気になりますよね...)
Indexer Acknowledgement という機能を使って、データ転送中のネットワーク通信の遮断やインデクサー側の原因によるデータ送信エラー時に、復旧後にデータを再送する仕組みを取ることができます。
こちらで仕組みについて説明がされています。
やってみる
設定の流れ
- Splunk Cloud でのセットアップ
- Universal Forwarder のインストール
- Universal Forwarder クレデンシャルのダウンロードとインストール
- Universal Forwarder で Splunk Add-on for Unix のダウンロード
- データ収集ができていることの確認
Splunk Cloud でのセットアップ
Splunk Cloud で App > 他のAppのサーチ で Splunk Add-on for Unix and Linux をインストールします。
必要であれば、index を作成しますが、ここではデフォルトの main を使うことにします。
※実際の環境では別途 index 設計の検討をしていただくのが推奨です。
Universal Forwarder のインストール
収集するホストで Universal Forwarder をインストールします。
Universal Forwarder のダウンロード
上記のダウンロードページでOSをLinuxに選択し、該当するものの「wget」リンクを取得します。
収集するホストにログインしてインストールとセットアップをしていきます。
上記で取得したwgetリンクをCLIで入力して、インストーラをダウンロードし、インストールしていきます。
cd /tmp
## wgetリンクをコピペ
wget -O splunkforwarder-9.3.2-d8bb32809498.x86_64.rpm "https://download.splunk.com/products/universalforwarder/releases/9.3.2/linux/splunkforwarder-9.3.2-d8bb32809498.x86_64.rpm"
## rootユーザーにスイッチ
sudo -i
rpm -i /tmp/splunkforwarder-9.3.2-d8bb32809498.x86_64.rpm
splunkfwdユーザーが作成されているので、このユーザー権限でサービスを開始します。
ユーザーとパスワードを設定する必要があるので、「admin」ユーザーとしてパスワードを設定します。
## splunkfwd ユーザーにスイッチ
su - splunkfwd
cd bin
## サービスをスタート、adminユーザーのパスワードを初期設定
## 設定ファイルのチェックなどが問題なく進みOKとなれば正常起動
./splunk start --accept-license
...
Please enter an administrator username: admin
Password must contain at least:
* 8 total printable ASCII character(s).
Please enter a new password:
Please confirm new password:
Creating unit file...
...
Checking conf files for problems...
Done
Checking default conf files for edits...
Validating installed files against hashes from '/opt/splunkforwarder/splunkforwarder-9.3.2-d8bb32809498-linux-2.6-x86_64-manifest'
All installed files intact.
Done
All preliminary checks passed.
Starting splunk server daemon (splunkd)...
PYTHONHTTPSVERIFY is set to 0 in splunk-launch.conf disabling certificate validation for the httplib and urllib libraries shipped with the embedded Python interpreter; must be set to "1" for increased security
Done
[ OK ]
Universal Forwarder クレデンシャルのダウンロードとインストール
ブラウザから Splunk Cloud で App > Universal Forwarder で「Download Universal Forwarder Credentials」をクリックしてダウンロードします。
ダウンロードした「splunkclouduf.spl」をSCP等でLinuxサーバーに送信してください。
※Linuxサーバー側でダウンロードリンクをwgetなどで直接取得するとその後のインストールの時にエラーとなってしまうので注意です。
再び、Universal Forwarder をインストールしたホスト(Linuxサーバー)で作業します。
クレデンシャルをインストールします。
設定したパスワードを入力します。
pwd
/opt/splunkforwarder
## adminユーザーのパスワードを入力
./bin/splunk install app /tmp/splunkclouduf.spl
Warning: Attempting to revert the SPLUNK_HOME ownership
Warning: Executing "chown -R splunkfwd:splunkfwd /opt/splunkforwarder"
Splunk username: admin
Password:
App '/tmp/splunkclouduf.spl' installed
You need to restart the Splunk Server (splunkd) for your changes to take effect.
$SPLUNK_HOME/etc/apps
配下に新しく以下のような感じのディレクトリが作成されています。
## インストールしたAppのディレクトリができている
ls etc/apps/
100_scv-shw-d8e1b576e5977c_splunkcloud
ls etc/apps/100_scv-shw-d8e1b576e5977c_splunkcloud
default local metadata
## useACK が設定されています
## その他の設定ファイル部分を見ていくと接続先の情報なども設定されていることが確認できると思います。
head -3 etc/apps/100_scv-shw-d8e1b576e5977c_splunkcloud/default/outputs.conf
[tcpout]
defaultGroup = splunkcloud_20241213_c32678ca3a6142f3c776f6fe16f34e53
useACK = true
Universal Forwarder で Splunk Add-on for Unix のダウンロード
ブラウザ等で splunkbase から Splunk Add-on for Unix and Linux をダウンロードします。
「splunk-add-on-for-unix-and-linux_920.tgz」のようなファイルがダウンロードされるので、こちらもSCP等で対象のホストに送信します。(/tmp などに配置します。)
再度、Universal Forwarder をインストールしたホストに戻り、add-on をインストールしていきます。
/tmp ディレクトリのadd-onを解凍し、app用のディレクトリ配下に置き換えます。
tar xzfv /tmp/splunk-add-on-for-unix-and-linux_920.tgz
mv Splunk_TA_nix/ /opt/splunkforwarder/etc/apps/
移動したadd-onのディレクトリ内に「local」ディレクトリを作成して、「inputs.conf」をコピーします。
cd /opt/splunkforwarder/etc/apps/
pwd
/opt/splunkforwarder/etc/apps
## 編集するコンフィグファイルはlocalディレクトリ内に置く
mkdir Splunk_TA_nix/local
cp Splunk_TA_nix/default/inputs.conf Splunk_TA_nix/local
「inputs.conf」にはLinuxのデータ取得の定義が項目毎に入っているので、取りたいものを有効化します。
デフォルトでは disabled=1 で無効化されているので、これを取りたい項目で disabled=0 とすることでデータ収集を開始することができます。
cat Splunk_TA_nix/local/inputs.conf | head -12
##
## SPDX-FileCopyrightText: 2024 Splunk, Inc.
## SPDX-License-Identifier: LicenseRef-Splunk-8-2021
##
##
[script://./bin/vmstat_metric.sh]
sourcetype = vmstat_metric
source = vmstat
interval = 60
disabled = 1
今回は、一括ですべての設定を有効化して、再起動で設定を反映します。
## すべての設定で有効化
sed -i -e 's/disabled = 1/disabled = 0/g' Splunk_TA_nix/local/inputs.conf
## 再起動実施
cd /opt/splunkforwarder/bin
./splunk restart
最後にrootユーザーでサービスの自動起動をONにしておきます。
## 一度サービスをストップ
./splunk stop
## rootユーザーにスイッチ
sudo -i
## 自動起動を有効化
/opt/splunkforwarder/bin/splunk enable boot-start -user splunkfwd -systemd-managed 1
Systemd unit file installed by user at /etc/systemd/system/SplunkForwarder.service.
Configured as systemd managed service.
## サービスを起動
cd /opt/splunk
./bin/splunk start
自動起動をONにした後は、rootユーザーで起動コマンドを実施する必要があります。
その後のコマンドラインでの設定編集が必要な際は、rootユーザーで実施するのが効率が良いかと思います。
データ収集ができていることの確認
Splunk Cloud で検索してみます。
有効化したデータ収集項目からログソースが取れていることが確認できます。
Cloud Monitoring Console でも確認してみます。
App > Cloud Monitoring Console で Forwarder > Forwarder monitoring setup に移動して、フォワーダー監視を有効にします。
Forwarders: instance の画面でフォワーダーの情報や、収集しているログの状況を確認することができます。
まとめ
以上、Linux サーバーのログを Universal Forwader を使って、Splunk Cloud にログを送信してみました。
先人の有識者の方が既に色んなところで寄稿されている内容ではあるものの、バージョンが新しくなっていたり、Splunk Cloudの環境とSplunk Enterpriseでの環境と少し異なっていたりと、少し戸惑う部分もあったので、改めて一度記事にしてみました。
本内容が、どなたかの一助になれば幸いです。