0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル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_ps.png

モデルのダウンロード

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で確認するのが確実です。

管理者パネルでのMCPサーバー接続成功画面.png

+ボタンをクリックして以下を入力してください。種類の「OpenAPI」テキストを直接クリックするとMCP (Streamable HTTP)に切り替わります。

項目 設定値
ID prometheus-mcp
種類 MCP (Streamable HTTP)
URL http://prometheus-mcp:8080/mcp
認証 なし

外部ツールサーバ設定.png

モデルの設定

管理者パネルの設定画面(サイドバーに管理者セクションが表示されている画面)からモデル一覧を開き、qwen3:8bの鉛筆アイコンから編集画面を開きます。

⚠️ 管理者パネルの設定画面かどうかはサイドバーの項目で確認できます。管理者セクションに「一般・認証・接続・モデル・Sub-agents」が表示されていれば管理者パネルの設定画面です。

高度なパラメータ(「表示」をクリックして展開)

  • Function呼び出し → ネイティブ

高度なパラメータ.png

機能(組み込みツール)

  • 全てのチェックを外す

⚠️ 組み込みツールが有効になっていると、prometheus-mcpより優先されてしまいMCPツールが呼び出されません。

ツール

  • Prometheus-Mcpにチェックを入れる

機能オフ・ツール紐付け・システムプロンプト設定済みのモデル編集画面.png

チャット画面での有効化

新しいチャットを開くと、入力欄の連携アイコンにprometheus-mcpが表示されます。デフォルトで有効になっている場合はそのまま使えます。

チャット画面でprometheus-mcpが表示されている画面.png


4. 動作確認

以下のように質問すると、実際にPrometheusからデータを取得して分析してくれます。

prometheus-mcp_queryツールを使って、prometheus_http_requests_totalの値を取得してください。timestampは指定しないでください。

内部でprometheus-mcp_queryツールが呼び出され、Prometheusから実データが返ってきます。

さらに、取得したデータをもとにLLMが自動で解釈・分析を行います。

/metricsエンドポイントのみ314リクエストがあります。これはPrometheusが自分自身をスクレイプしているためで正常な動作です。他のエンドポイントへのリクエストが0なのは、外部からのトラフィックがない状態を示しています。

prometheus-mcp_queryでメトリクス取得成功画面.png

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 Google ❌ 失敗 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サポートの成熟とあわせて、実用レベルに近づく可能性は十分あると思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?