CodexからVictoriaMetricsのメトリクスを取得してみた

CodexからVictoriaMetricsのメトリクスを取得してみた

CodexからVictoriaMetricsのメトリクスを取得してみた

はじめに

こんにちは、新井です。

今回は mcp-victoriametrics を使って、CodexからVictoriaMetricsに蓄積されたメトリクスを取得し、サーバーの状態を分析してレポートを作成するところまで試してみたいと思います。

普段、サーバーやアプリケーションの状態を確認する際には、Grafanaのダッシュボードを確認したり、PromQLやMetricsQLを使って必要なメトリクスを取得したりすることが多いと思います。

ただ、実際の運用では単純にメトリクスを確認するだけではなく、

  • 直近1週間でCPU使用率が高かった時間帯を確認する
  • メモリ使用量に普段と異なる傾向がないか確認する
  • 複数のメトリクスからサーバー全体の状態を確認する
  • 取得した情報をもとに週次レポートを作成する

といった作業を行うこともあると思います。

そこで今回は、VictoriaMetricsとcodexをMCP経由で接続し、自然言語で指示することでVictoriaMetricsのメトリクスを取得・分析できる環境を作ってみたいと思います。

構成

各種サーバ

  • Application Server
    • NGINX
    • NGINX Exporter
    • Node Exporter
  • Monitor Server
    • Node Exporter
    • VictoriaMetrics
    • VictoriaMetrics MCP Server(mcp-victoriametrics)
    • Grafana

構築手順

terraformファイルなどは下記リポジトリにまとめています。

https://github.com/grasys-arai/blog-mcp-victoriametrics

terraform

下記ファイルを作成し、必要な設定を追加する

Bash
vim terraform/terraform.tfvars

project_id = PROJECT_ID
name_prefix = PREFIX_NAME
allowed_ssh_ranges = [
  ALLOW_IP
]

# Optional overrides:
# region       = "asia-northeast1"
# zone         = "asia-northeast1-a"

設定できたら、applyする

Bash
terraform plan
terraform apply

ansible

terraform反映後に作成された各種VMの外部/内部IPを設定する

Bash
vim ansible/inventories/production/hosts.yml

---
all:
  vars:
    ansible_user: YOUR_SSH_USERNAME
    ansible_ssh_private_key_file: /PATH/TO/YOUR_SSH_PRIVATE_KEY

  children:
    app:
      hosts:
        app01:
          ansible_host: YOUR_APP_SERVER_PUBLIC_IP

    monitor:
      hosts:
        monitor01:
          ansible_host: YOUR_MONITOR_SERVER_PUBLIC_IP
          internal_ip: YOUR_MONITOR_SERVER_INTERNAL_IP

各vmへssh接続できるように、known_hostsへ追加しておく

Bash
ssh-keyscan -H YOUR_APP_SERVER_PUBLIC_IP >> ~/.ssh/known_hosts
ssh-keyscan -H YOUR_MONITOR_SERVER_PUBLIC_IP >> ~/.ssh/known_hosts

ssh agentへ登録する

Bash
eval "$(ssh-agent -s)" && ssh-add --apple-use-keychain ~/.ssh/google_compute_engine

ansibleでssh接続できるか確認する

Bash
ansible all -m ansible.builtin.ping

問題なければansibleを流す

Bash
ansible-playbook site.yml

確認方法

  • 各サーバの設定が完了できているか確認する
Bash
ansible-playbook verify.yml
  • grafanaへアクセスできるか確認する

http://MONITOR_IP:3000 (user: admin, password: admin)

  • mcp serverへアクセスし、200が返るか確認する
Bash
curl -D - http://MONITOR_IP:8081/mcp

HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
Date: Mon, 28 Sep 2026 02:41:56 GMT
Transfer-Encoding: chunked

CodexにMCP Serverを連携する

  1. mcp serverを登録する
Bash
codex mcp add mcp-victoriametrics --url http://MONITOR_IP:8081/mcp
  1. 登録したmcp serverを確認する
Bash
codex mcp list
  1. codexから呼び出してみる
Bash
mcp-victoriametricsを使用し直近1時間のサーバー状態を確認して、CPU・メモリ・ネットワークなどに問題がなかったか分析し、レポートを作成してください

実際の表示例

まとめ

codexからmcp-victoriametrics経由でvictoriametrics上のメトリクスを取得し、レポート作成する方法を試しました。

便利ではあるもののトークン数の削減や根拠の明示、複数サービスに跨った場合など、実際に運用する場合は考慮することがまだありそうです。

今回は試していませんが、grafana alertとgemini enterprise等を使用して、アラート発報を起点にレポートを作成させ、slackへ通知するなどより実運用に向けた構成も試してみたいと思いました。