ローカルLLM × Prometheus MCP構築記録 ── 監視データをAIで分析する
はじめに
Prometheusで監視データを収集しているインフラエンジニアにとって、メトリクスの「意味を読む」作業は意外と手間がかかります。Grafanaで可視化できても、「このグラフが何を意味するか」を解釈するのは結局人間の仕事です。
そこで今回は、ローカルLLM(Ollama)とPrometheus MCPサーバーを組み合わせ、PrometheusのメトリクスをAIが自然言語で分析・解釈できる環境を構築してみました。
データを外部に送信しないローカル完結の構成のため、社内の監視データを扱う場面でも安心して使えます。
結果
- ✅ Prometheus MCPサーバー経由でOllamaがPrometheusのメトリクスを取得・分析できることを確認
- ✅ 自然言語でメトリクスの問い合わせが可能
- ⚠️ CPUのみの環境(e2-standard-8)では回答までに約20〜25分かかる。実用にはGPU環境を推奨
構成概要
User
↓
Open WebUI(MCPクライアント)
↓ ↓
Prometheus MCP Server Ollama(qwen3:8b)
↓
Prometheus
使用ツール
| ツール | 役割 |
|---|---|
| Prometheus | メトリクス収集 |
| Ollama(qwen3:8b) | ローカルLLM |
| Open WebUI | MCPクライアント兼チャットUI |
| prometheus-mcp-server(tjhop製) | PrometheusとLLMをつなぐMCPサーバー |
動作環境
今回はGCP(e2-standard-8)を使用しました。
| 項目 | スペック |
|---|---|
| インスタンス | e2-standard-8 |
| vCPU | 8コア |
| RAM | 32GB |
| OS | Ubuntu 22.04 LTS |
| リージョン | us-central1(アイオワ) |
1. 環境構築
docker-compose.yml
全サービスをDocker Composeで管理します。
services:
prometheus:
image: prom/prometheus
container_name: prometheus
ports:
- "9090:9090"
restart: always
ollama:
image: ollama/ollama
container_name: ollama
volumes:
- ollama:/root/.ollama
ports:
- "11434:11434"
restart: always
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
volumes:
- open-webui:/app/backend/data
restart: always
prometheus-mcp:
image: ghcr.io/tjhop/prometheus-mcp-server:latest
container_name: prometheus-mcp
ports:
- "8080:8080"
environment:
- PROMETHEUS_MCP_SERVER_PROMETHEUS_URL=http://prometheus:9090
- PROMETHEUS_MCP_SERVER_MCP_TRANSPORT=http
- PROMETHEUS_MCP_SERVER_WEB_LISTEN_ADDRESS=:8080
depends_on:
- prometheus
restart: always
volumes:
ollama:
open-webui:
ℹ️ 今回は検証目的のため、Prometheusは設定ファイルをマウントせずデフォルト設定のまま起動しています。この状態ではPrometheus自身のみをスクレイプします。実際の監視対象を扱う場合は、
prometheus.ymlをマウントしてください。
起動
docker compose up -d
docker compose ps
全サービスが起動していることを確認します。
open-webui : 0.0.0.0:3000 ✅
prometheus-mcp : 0.0.0.0:8080 ✅
prometheus : 0.0.0.0:9090 ✅
ollama : 0.0.0.0:11434 ✅
モデルのダウンロード
docker exec -it ollama ollama pull qwen3:8b
2. つまずいたポイント
MCPサーバーの選定
最初にpab1it0製のprometheus-mcp-serverを試しましたが、Open WebUIが必要とするStreamable HTTPに対応していないため接続できませんでした。
curl http://localhost:8080/mcp
# {"jsonrpc":"2.0","error":{"message":"Not Acceptable: Client must accept text/event-stream"}}
tjhop製のprometheus-mcp-serverに変更することで接続に成功しました。
HTTPトランスポートの設定
環境変数PROMETHEUS_MCP_SERVER_MCP_TRANSPORT=httpを指定することで、Streamable HTTPでの通信が可能になります。
モデルの選定
複数のモデルを同じ設定のもとで検証した結果、今回の構成ではqwen3:8bのみ動作確認ができました。llama3.1:8b・gemma4:e4b・mistral:7bはいずれもツール呼び出しに失敗しています。
詳細な検証結果は「6. モデル比較検証」を参照してください。
3. Open WebUIの設定
MCPサーバーの登録
MCPサーバーの登録は管理者パネルから行います。ユーザー設定からはMCP (Streamable HTTP)の種類が選択できません。
ブラウザのURLを直接:3000/admin/settings/integrationsに変更してアクセスするか、管理者パネル → 設定 → 連携から開いてください。
⚠️ 管理者パネルの設定画面はユーザー設定と見た目が似ていますが、サイドメニューの項目数が異なります。URLで確認するのが確実です。
+ボタンをクリックして以下を入力してください。種類の「OpenAPI」テキストを直接クリックするとMCP (Streamable HTTP)に切り替わります。
| 項目 | 設定値 |
|---|---|
| ID | prometheus-mcp |
| 種類 | MCP (Streamable HTTP) |
| URL | http://prometheus-mcp:8080/mcp |
| 認証 | なし |
モデルの設定
管理者パネルの設定画面(サイドバーに管理者セクションが表示されている画面)からモデル一覧を開き、qwen3:8bの鉛筆アイコンから編集画面を開きます。
⚠️ 管理者パネルの設定画面かどうかはサイドバーの項目で確認できます。管理者セクションに「一般・認証・接続・モデル・Sub-agents」が表示されていれば管理者パネルの設定画面です。
高度なパラメータ(「表示」をクリックして展開)
- Function呼び出し → ネイティブ
機能(組み込みツール)
- 全てのチェックを外す
⚠️ 組み込みツールが有効になっていると、prometheus-mcpより優先されてしまいMCPツールが呼び出されません。
ツール
-
Prometheus-Mcpにチェックを入れる
チャット画面での有効化
新しいチャットを開くと、入力欄の連携アイコンにprometheus-mcpが表示されます。デフォルトで有効になっている場合はそのまま使えます。
4. 動作確認
以下のように質問すると、実際にPrometheusからデータを取得して分析してくれます。
prometheus-mcp_queryツールを使って、prometheus_http_requests_totalの値を取得してください。timestampは指定しないでください。
内部でprometheus-mcp_queryツールが呼び出され、Prometheusから実データが返ってきます。
さらに、取得したデータをもとにLLMが自動で解釈・分析を行います。
/metricsエンドポイントのみ314リクエストがあります。これはPrometheusが自分自身をスクレイプしているためで正常な動作です。他のエンドポイントへのリクエストが0なのは、外部からのトラフィックがない状態を示しています。
Grafanaなどの可視化ツールとの大きな違いは、数字を見るだけでなく、意味を解釈して次のアクションまで提案してくれる点です。
5. 課題
推論速度
CPUのみの環境(e2-standard-8)では、回答が返ってくるまで約20〜25分かかりました。GPUありの環境であれば大幅に短縮できます。実用にはGPUインスタンスの利用を推奨します。
回答言語
qwen3:8bはデフォルトで英語で回答する傾向があります。モデル編集画面(「3. Open WebUIの設定」で開いたのと同じ画面)のシステムプロンプト欄に以下を設定することで、概ね日本語で回答するようになります。チャットごとに指定したい場合は、チャット画面の設定からでも同様に指定できます。
必ず日本語で回答してください。
ただし、エンドポイント名や技術用語は英語が混在する場合があります。これ以上強く日本語を強制すると技術用語が誤訳されるリスクがあるため、現状の設定が現実的な落としどころです。
6. モデル比較検証
「3. Open WebUIの設定」と同じ設定(MCPサーバー登録・Function CallingをNative・組み込みツールをオフ・ツール紐付け)のもとで複数のモデルを検証しました。
| モデル | サイズ | 提供元 | 結果 | 備考 |
|---|---|---|---|---|
| qwen3:8b | 約5GB | Alibaba | ✅ 成功 | ツール呼び出し・分析ともに正常 |
| llama3.1:8b | 約5GB | Meta | ❌ 失敗 | ツールのパラメータを出力するだけで実行されない |
| gemma4:e4b | 約6GB | ❌ 失敗 | Tool not found エラーが繰り返される | |
| mistral:7b | 約4GB | Mistral | ❌ 失敗 | 自分でコマンドを生成するだけ |
今回の構成ではqwen3:8bのみ成功しました。
⚠️ Open WebUIのMCPサポートは現時点で実験的であり、バージョンによって挙動が変わります。検証中もMCPサーバーの設定が消えたり、種類の選択UIが表示されなくなるなど不安定な挙動が見られました。他のモデルの失敗にはOpen WebUI側の問題も影響している可能性があり、qwen3:8bの成功もツール呼び出し能力の高さとタイミングが重なった結果である可能性があります。
まとめ
| 項目 | 内容 |
|---|---|
| MCPサーバー | tjhop製を使用(pab1it0製はStreamable HTTP非対応) |
| モデル | qwen3:8b(今回の検証で動作確認済み) |
| Function Calling | Nativeに設定必須 |
| 組み込みツール | 全てオフ必須 |
| MCPサーバー登録場所 | 管理者パネル(:3000/admin/settings/integrations)で登録。ユーザー設定ではMCP種類が選択不可 |
| モデル編集場所 | 管理者パネルのモデル一覧から編集(Function Calling・機能・ツールをここで設定) |
| チャット画面での有効化 | 連携アイコンにprometheus-mcpが表示される(無効の場合は手動で有効化) |
現時点での評価
正直に言うと、現時点では実用には厳しいという結論です。
- CPUのみの環境では回答まで約20〜25分かかる
- Open WebUIのMCPサポートが不安定で、設定が消えたり再現性に疑問が残る
- 動作確認できたモデルがqwen3:8bのみ
ただし、方向性としては非常に面白いと感じています。PrometheusのメトリクスをLLMが自然言語で解釈・分析してくれる体験は、従来の可視化ツールにはないものです。
GPU環境であれば推論速度の問題は大幅に改善できると考えており、別途GPU環境での検証を予定しています。Open WebUIのMCPサポートの成熟とあわせて、実用レベルに近づく可能性は十分あると思っています。






