【Splunk】Splunk App(Splunk Add-On for OpenTelemetry Collector)を使ってSplunk Observability Cloudにメトリックデータを転送する

こんにちは。torippy1024です。
本日は、Splunk App(Splunk Add-On for OpenTelemetry Collector)を使ったSplunk Observability Cloudへのデータ転送手順について書きます。

Splunk CloudとSplunk Observability Cloudで、使用するエージェントが異なってしまうというのがこれまでの問題だったのですが、これをSplunk CloudのForwarderに統一させることができるのが、Splunk Add-On for OpenTelemetry Collectorを使うメリットです。


### Splunk CloudとSplunk Observability Cloudが使用するエージェント

Splunk CloudとSplunk Observability Cloudは、これまでSplunkが提供する製品でありながら、異なるエージェントを使ってデータを転送しており、両方の製品を使う場合は二つのエージェントを導入・管理する必要がありました。
- Splunk Cloud: Forwarder上のApp/Add-on
- Splunk Observability Cloud: OpenTelemetry Collector

しかし、最近(2025年4月)になってSplunk Add-On for OpenTelemetry CollectorというSplunk Appが公開されました。(https://splunkbase.splunk.com/app/7125)
このSplunk AppをForwarderに導入することによって、Splunk Observability Cloudに対しても、Forwarderを使ってメトリックデータを転送できるようになります。
(名前から推察すると、このAppは、OpenTelemetry Collector機能をSplunk Add-on上で提供するものだと考えられます)

![スクリーンショット 2025-04-23 10.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/35615b3e-0c0c-4588-99a3-2ae20adcb6a9.png)


### OpenTelemetry CollectorとSplunk Add-On for OpenTelemetry Collectorの違い
公式サイト(https://docs.splunk.com/observability/en/gdi/opentelemetry/collector-addon/collector-addon-intro.html )に、従来のOpenTelemetry Collectorを使う場合と、Splunk Add-On for OpenTelemetry Collectorの比較表が記載されています。
現時点では、Automatic discovery and configuration機能がLinux版にしかなかったり、デフォルトエージェント設定などが含まれていないなどの制限があるようです。


### 導入手順
今回導入する構成は以下の通りとします。有効にする機能はInfrastructure Monitoringのみで、最もシンプルな構成です。

![スクリーンショット 2025-04-23 14.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/2d18816a-fc22-4bca-a56a-6fc6b5d315da.png)

Forwarder(Universal Forwarder)の導入から実施します。OSはUbuntu 22.04です。

最新版のUniversal Forwarderのwgetリンクは以下より取得してください。
https://www.splunk.com/ja_jp/download/universal-forwarder.html

Forwarderの導入
```
ssh torippy1024@xx.xx.xx.xx

wget -O splunkforwarder-9.4.1-e3bdab203ac8-linux-amd64.tgz "https://download.splunk.com/products/universalforwarder/releases/9.4.1/linux/splunkforwarder-9.4.1-e3bdab203ac8-linux-amd64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-9.4.1-e3bdab203ac8-linux-amd64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
sudo /opt/splunkforwarder/bin/splunk stop

sudo useradd -m splunk
sudo passwd splunk
sudo chown -R splunk:splunk /opt/splunkforwarder
sudo /opt/splunkforwarder/bin/splunk enable boot-start -user splunk
sudo /opt/splunkforwarder/bin/splunk start
sudo /opt/splunkforwarder/bin/splunk status
```

次に、公式ドキュメントの導入手順を参照しながらSplunk Add-On for OpenTelemetry Collectorインストールを行います。
https://docs.splunk.com/observability/ja/gdi/opentelemetry/collector-addon/collector-addon-install.html

以下サイトより、Splunk Add-On for OpenTelemetry CollectorのAppファイルをダウンロードして作業用ローカルPCに保存しておきます。今回使用したバージョンは1.4.1で、容量は数百MB程度ありました。
https://splunkbase.splunk.com/app/7125

また、OpenTelemetry Collectorを使った転送のためにrealmとアクセストークンが必要になります。

realmは、us0やjp0などのSplunk Observability Cloudのインスタンスが所属しているリージョンです。Splunk Observability CloudのWeb画面にログインするためのURLに含まれている値です。

アクセストークンは、Splunk Observability CloudのWeb画面から発行・管理することができます。デフォルトで一年間有効なトークンが発行されているので、今回はそれを使うことにします。realmがjp1の場合、アクセストークンの一覧は以下より確認できます。
https://app.jp0.signalfx.com/#/tokens
またアクセストークンには、API access tokensとOrg access tokensの二種類がありますが、Org access tokensを使用することに注意してください。

Appの転送(別ターミナルを開いてローカルPC上で実行)
```
scp -r /Users/torippy1024/splunk-add-on-for-opentelemetry-collector_141.tgz torippy1024@xx.xx.xx.xx:/home/torippy1024/splunk-add-on-for-opentelemetry-collector_141.tgz
```

Splunk Add-On for OpenTelemetry Collectorインストール
```
sudo -u splunk /opt/splunkforwarder/bin/splunk install app splunk-add-on-for-opentelemetry-collector_141.tgz
ls -la /opt/splunkforwarder/etc/apps/Splunk_TA_otel
```

インストール後は、App内にlocalフォルダを作成し、その中にdefaultフォルダ内のトークンファイルおよびinputs.confをコピーし、必要な設定値の修正します。
具体的な手順はSplunk Observability CloudのWeb画面にも表示されるので、必要に応じて以下も参照してみてください。

https://app.jp0.signalfx.com/#/gdi/scripted/otel-connector-linux/step-1?category=all&gdiState=%7B%22integrationId%22:%22otel-connector-linux%22%7D&redirect=availableIntegrations

![スクリーンショット 2025-04-23 13.43.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/f43bd126-a34d-4a56-bae5-e1ba075837a9.png)


localフォルダへのトークンファイルおよびinputs.confのコピー
```
sudo -u splunk mkdir /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local
sudo -u splunk cp -r /opt/splunkforwarder/etc/apps/Splunk_TA_otel/default/access_token /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/
sudo -u splunk cp -r /opt/splunkforwarder/etc/apps/Splunk_TA_otel/default/inputs.conf /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/

sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/inputs.conf 
```

変更前のinputs.conf
```
(省略)
[Splunk_TA_otel://Splunk_TA_otel]
disabled=false
start_by_shell=false
interval = 60
index = _internal
sourcetype = Splunk_TA_otel
splunk_access_token_file=$SPLUNK_OTEL_TA_HOME/local/access_token
splunk_api_url=https://api.us0.signalfx.com
splunk_bundle_dir=$SPLUNK_OTEL_TA_PLATFORM_HOME/bin/agent-bundle
splunk_collectd_dir=$SPLUNK_OTEL_TA_PLATFORM_HOME/bin/agent-bundle/run/collectd
splunk_ingest_url=https://ingest.us0.signalfx.com
splunk_listen_interface=localhost
splunk_realm=us0
splunk_config=$SPLUNK_OTEL_TA_HOME/configs/ta-agent-config.yaml
splunk_otel_log_file=$SPLUNK_HOME/var/log/splunk/otel.log
```

変更後のinputs.conf(変更箇所は、計3か所のrealmをus0からjp0に変更するのみ)
```
(省略)
[Splunk_TA_otel://Splunk_TA_otel]
disabled=false
start_by_shell=false
interval = 60
index = _internal
sourcetype = Splunk_TA_otel
splunk_access_token_file=$SPLUNK_OTEL_TA_HOME/local/access_token
splunk_api_url=https://api.jp0.signalfx.com
splunk_bundle_dir=$SPLUNK_OTEL_TA_PLATFORM_HOME/bin/agent-bundle
splunk_collectd_dir=$SPLUNK_OTEL_TA_PLATFORM_HOME/bin/agent-bundle/run/collectd
splunk_ingest_url=https://ingest.jp0.signalfx.com
splunk_listen_interface=localhost
splunk_realm=jp0
splunk_config=$SPLUNK_OTEL_TA_HOME/configs/ta-agent-config.yaml
splunk_otel_log_file=$SPLUNK_HOME/var/log/splunk/otel.log
```

トークンの変更
```
sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/access_token
(Splunk Observability CloudのWeb上で確認したトークン値を追記して保存)
```

設定の確認およびsplunkプロセス再起動
```
cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/inputs.conf 
cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel/local/access_token 
sudo /opt/splunkforwarder/bin/splunk restart
```

splunkプロセスを再起動すると、無事にSplunk Add-On for OpenTelemetry Collectorを使って、Splunk Observability Cloudにメトリックデータを転送できていることが確認できました。

![スクリーンショット 2025-04-23 14.10.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684500/ff7fd4ab-2234-45f3-986e-c51b98b62869.png)

### 参考リンク
英語ばっかりですが・・・。

Splunk Add-On for the OpenTelemetry Collector
https://splunkbase.splunk.com/app/7125

Splunk Add-On for the OpenTelemetry Collector
https://docs.splunk.com/observability/en/gdi/opentelemetry/collector-addon/collector-addon-intro.html

View your realm, API endpoints, and organization(realmの確認方法)
https://docs.splunk.com/observability/en/admin/references/organizations.html

Create and manage organization access tokens using Splunk Observability Cloud(アクセストークンの管理と発行)
https://docs.splunk.com/observability/en/admin/authentication/authentication-tokens/org-tokens.html

Collect Linux data
https://docs.splunk.com/observability/en/gdi/get-data-in/compute/linux.html