こんばんは。torippy1024です。
時間があいてしまいましたが前回の続きです。
https://qiita.com/torippy1024/items/726444a818e3d2af0e49
前回、OllmaとOpen WebUIによるセルフマネージドチャットツール環境を構築しました。
今回は、これにSplunk Universal Forwarder(UF)とOpenTelemetry Add-on(OTel Add-on)を導入し、この環境を監視/可視化してみることにします。
構成図
前回構成した環境にUF/OTelを追加した構成図です。
OTelについては導入先によって二種類あることに注意が必要です。
サーバーのOSのログやメトリクスに関しては、OpenTelemetry Add-onを使用して収集しています。
これに対し、Open WebUIのトレースに対しては、OpenTelemetry Distribution(Splunk Distribution of the OpenTelemetry Collector)のOTel Collectorをコンテナイメージ内に導入し収集しています。
今回、OSとDockerイメージそれぞれにOTelを導入しなければなりませんでした。
その理由は、OSおよびDockerレイヤのログやメトリクスは、OSに導入したOTelで収集できるのですが、Docker上で稼働しているアプリケーション(今回の場合はOpenUI)のトレースを取得するには、Dockerイメージ内にOTelを組み込む必要があったためです。
導入先と監視対象
導入先と監視対象は以下の通りです。
以下以外に、Splunk EnterpriseにTA-Ollam Add-onも入れる必要があることに注意してください。
| サーバー名 | 導入コンポーネント | 監視対象カテゴリ | 監視対象 |
|---|---|---|---|
| Ollamaサーバー | Splunk Universal Forwarder(UF) | ログ | /var/log/ollama/ollama.log(Ollamaログ) |
| Ollamaサーバー | OpenTelemetry Add-on(OTel Add-on) | メトリクス(インフラ) | cpu,disk,filesystem,memory,network,load,paging,processes(hostmetricsで取得) |
| Open-WebUIサーバー | Splunk Universal Forwarder(UF) | ログ | /var/lib/docker/containers/* /*-json.log(Open WebUIのコンテナログ) |
| Open-WebUIサーバー | OpenTelemetry Add-on(OTel Add-on) | メトリクス(インフラ) | cpu,disk,filesystem,memory,network,load,paging,processes(hostmetricsで取得), docker-container-stats(smartagents/docker-container-statsで取得) |
| Open-WebUIサーバー | Splunk Distribution of the OpenTelemetry Collector(OTel Collector Distribution) | トレース(APM) | open-webuiコンテナ上のトレース |
設定手順
Splunk Enterprise/Splunk Observability Cloudの準備
以下を用意しておく必要があります。
Splunk Enterpriseの作業
- HEC転送有効化
- HECトークンの発行
- ラボ用インデックスの(今回はollama-labという名前で作成)
- TA-Ollam add-on(https://splunkbase.splunk.com/app/8024 )のインストール
Splunk Observability Cloudの作業
- realmの確認(この日本語の記事を読む人のほとんどは東京リージョンを使うと思われるのでほぼjp0のはず)
- access_tokenの発行
Ollamaサーバーへの作業
Universal Forwarderインストールと設定
sudo useradd -m splunk
sudo passwd splunk
(Linux上のsplunkユーザーのパスワードを新規設定)
wget -O splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz "https://download.splunk.com/products/universalforwarder/releases/10.4.2/linux/splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
(splunk adminパスワードをpasswordとして初回起動)
sudo /opt/splunkforwarder/bin/splunk stop
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
sudo -u splunk /opt/splunkforwarder/bin/splunk add forward-server <splunk enterpriseの内部IPアドレス>:9997
OpenTelemetry Add-onインストールと設定
(/Users/ubuntu/配下に、OTel Add-on for Linux(https://splunkbase.splunk.com/app/8698 )をダウンロードして保管)
sudo mv /home/ubuntu/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz /home/splunk/
sudo chown splunk:splunk /home/splunk/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz
sudo -u splunk /opt/splunkforwarder/bin/splunk install app /home/splunk/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz
sudo -u splunk mkdir /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/
sudo -u splunk vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(default/inputs.confを参考に、以下を追記)
---
[Splunk_TA_otel://Splunk_TA_otel]
disabled=false
start_by_shell=false
interval = 0
index = _internal
sourcetype = Splunk_TA_otel
splunk_access_token = <access_token>
splunk_realm = jp0
splunk_config = $SPLUNK_HOME/etc/apps/$SPLUNK_MODINPUT_BASE_DIR_NAME/configs/agent_config.yaml
splunk_collector_log_level = error
splunk_collector_env_vars = SPLUNK_HEC_TOKEN=<hec_token>,SPLUNK_HEC_URL = https://<splunk_enterpriseのHEC_endpoint>:8088/services/collector
splunk_collector_cmd_args =
---
sudo cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(変更が反映されていることを確認)
sudo /opt/splunkforwarder/bin/splunk restart
Ollamaログ取り込み設定
(/Users/ubuntu/配下に、OTel Add-on for Linux(https://splunkbase.splunk.com/app/8698 )をダウンロードして保管)
sudo mv /home/ubuntu/ta-ollama_015.tgz /home/splunk/ta-ollama_015.tgz
sudo chown splunk:splunk /home/splunk/ta-ollama_015.tgz
sudo -u splunk /opt/splunkforwarder/bin/splunk install app /home/splunk/ta-ollama_015.tgz
sudo -u splunk mkdir /opt/splunkforwarder/etc/apps/TA-ollama-releasev1/local/
sudo -u splunk vi /opt/splunkforwarder/etc/apps/TA-ollama-releasev1/local/inputs.conf
(以下を追記。モニターパスは前回設定したものに合わせている)
---
[monitor:///var/log/ollama/ollama.log]
disabled = 0
index = test-ollama
sourcetype = ollama:server
---
sudo cat /opt/splunkforwarder/etc/apps/TA-ollama-releasev1/local/inputs.conf
(変更が反映されていることを確認)
sudo /opt/splunkforwarder/bin/splunk restart
Open-WebUIサーバーへの作業
Universal Forwarderインストールと設定(Ollamaサーバーへの作業と同手順)
sudo useradd -m splunk
sudo passwd splunk
(Linux上のsplunkユーザーのパスワードを新規設定)
wget -O splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz "https://download.splunk.com/products/universalforwarder/releases/10.4.2/linux/splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz"
sudo tar -xzvC /opt -f splunkforwarder-10.4.2-33c3bf42cd73-linux-amd64.tgz
sudo /opt/splunkforwarder/bin/splunk start --accept-license --answer-yes --seed-passwd password
(splunk adminパスワードをpasswordとして初回起動)
sudo /opt/splunkforwarder/bin/splunk stop
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
sudo -u splunk /opt/splunkforwarder/bin/splunk add forward-server <splunk enterpriseの内部IPアドレス>:9997
dockerログ取り込み設定
sudo -u splunk vi /opt/splunkforwarder/etc/system/local/inputs.conf
(以下を追記。ラボなので、わざわざ新しいAppフォルダなどは作成せず、何も考えずsystem/local/配下のinputs.confに追記してしまうことにする)
---
[monitor:///var/lib/docker/containers/*/*-json.log]
disabled = 0
index = test-ollama
sourcetype = docker:json
---
sudo -u splunk cat /opt/splunkforwarder/etc/system/local/inputs.conf
(変更が反映されていることを確認)
OpenTelemetry Add-onインストールと設定(Ollamaサーバーへの作業と同手順)
(/Users/ubuntu/配下に、OTel Add-on for Linux(https://splunkbase.splunk.com/app/8698 )をダウンロードして保管)
sudo mv /home/ubuntu/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz /home/splunk/
sudo chown splunk:splunk /home/splunk/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz
sudo -u splunk /opt/splunkforwarder/bin/splunk install app /home/splunk/splunk-add-on-for-opentelemetry-collector-for-linux-x86_64_01570.tgz
sudo -u splunk mkdir /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/
sudo -u splunk vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(default/inputs.confを参考に、以下を追記)
---
[Splunk_TA_otel://Splunk_TA_otel]
disabled=false
start_by_shell=false
interval = 0
index = _internal
sourcetype = Splunk_TA_otel
splunk_access_token = <access_token>
splunk_realm = jp0
splunk_config = $SPLUNK_HOME/etc/apps/$SPLUNK_MODINPUT_BASE_DIR_NAME/configs/agent_config.yaml
splunk_collector_log_level = error
splunk_collector_env_vars = SPLUNK_HEC_TOKEN=<hec_token>,SPLUNK_HEC_URL = https://<splunk_enterpriseのHEC_endpoint>:8088/services/collector
splunk_collector_cmd_args =
---
sudo cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(変更が反映されていることを確認)
sudo /opt/splunkforwarder/bin/splunk restart
dockerメトリクス取り込み設定
sudo -u splunk cp -a /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/configs/agent_config.yaml /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/configs/agent_config-with-docker.yaml
sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/configs/agent_config-with-docker.yaml
(以下のように、receivers配下にsmartagent/docker-container-statsを追加し、service-pipelines-metrics配下にsmartagent/docker-container-statsを追加)
---
receivers:
smartagent/docker-container-stats:
type: docker-container-stats
:
service:
pipelines:
metrics:
receivers: [host_metrics, otlp, smartagent/docker-container-stats]
---
sudo cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/configs/agent_config-with-docker.yaml | grep "smartagent/docker-container-stats" -C5
(変更が反映されていることを確認)
sudo vi /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(以下の通り、OTelが使用するコンフィグを修正版に変更)
---
splunk_config = $SPLUNK_HOME/etc/apps/$SPLUNK_MODINPUT_BASE_DIR_NAME/configs/agent_config_with_docker.yaml
---
sudo cat /opt/splunkforwarder/etc/apps/Splunk_TA_otel_linux_x86_64/local/inputs.conf
(変更が反映されていることを確認)
sudo usermod -aG docker splunk
sudo /opt/splunkforwarder/bin/splunk restart
Splunk Distribution of the OpenTelemetry Collectorインストールと設定
以前デプロイしたopen-webuiコンテナの停止
docker stop open-webui
docker rm open-webui
open-webui-with-otelコンテナ用の環境変数ファイルの作成(<Ollamaサーバーの内部IP>は変更して実行すること)
echo "WEBUI_SECRET_KEY=$(openssl rand -hex 32)" >> ~/.open-webui-with-otel.env
echo "OLLAMA_BASE_URL=http://<Ollamaサーバーの内部IP>:11434" >> ~/.open-webui-with-otel.env
echo "AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL=false" >> ~/.open-webui-with-otel.env
echo "SCARF_NO_ANALYTICS=true" >> ~/.open-webui-with-otel.env
echo "DO_NOT_TRACK=true" >> ~/.open-webui-with-otel.env
echo "WEBUI_ADMIN_EMAIL=admin@example.com" >> ~/.open-webui-with-otel.env
echo "WEBUI_ADMIN_PASSWORD=password" >> ~/.open-webui-with-otel.env
echo "ENABLE_OTEL=true" >> ~/.open-webui-with-otel.env
echo "ENABLE_OTEL_TRACES=true" >> ~/.open-webui-with-otel.env
echo "OTEL_EXPORTER_OTLP_ENDPOINT=http://host.docker.internal:4317" >> ~/.open-webui-with-otel.env
echo "OTEL_EXPORTER_OTLP_PROTOCOL=grpc" >> ~/.open-webui-with-otel.env
echo "OTEL_EXPORTER_OTLP_INSECURE=true" >> ~/.open-webui-with-otel.env
echo "OTEL_SERVICE_NAME=open-webui" >> ~/.open-webui-with-otel.env
echo "OTEL_RESOURCE_ATTRIBUTES=deployment.environment=lab" >> ~/.open-webui-with-otel.env
echo "OTEL_INSTRUMENTATION_GENAI_EMITTERS=span_metric" >> ~/.open-webui-with-otel.env
echo "OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=SPAN_ONLY" >> ~/.open-webui-with-otel.env
echo "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=delta" >> ~/.open-webui-with-otel.env
cat ~/.open-webui-with-otel.env
(上記の環境変数が表示されることを確認)
chmod 600 ~/.open-webui-with-otel.env
open-webui-with-otelのデプロイ
docker run -d \
-p 80:8080 \
--add-host=host.docker.internal:host-gateway \
--env-file ~/.open-webui-with-otel.env \
--name open-webui-with-otel \
--restart unless-stopped \
-v open-webui:/app/backend/data \
ghcr.io/open-webui/open-webui:main
稼働確認
docker ps
docker logs open-webui-with-otel --tail 30
APMトレースによるService Map表示(Splunk Observability Cloud)

Dockerメトリクスの表示(Splunk Observability Cloud)



