株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

Nutanix API活用 第2回 ~Python SDKによるVM情報取得とLLM連携~

はじめに

前回は、Nutanix v4 APIの概要や、APIを利用することで実現できることについて紹介しました。

今回は実際に、

  • Python実行環境の構築
  • 仮想実行環境(virtualenv)の作成
  • Nutanix SDKのインストール
  • v4 APIを利用したVM一覧取得
  • 仮想マシンの構成情報の取得
  • CPU・メモリなどの使用率
  • LLMとの連携

までを行います。

 

検証環境

作業端末:Windowsマシン

Python:3.14.6

Prism Central:pc.7.5.1

 

Python実行環境の構築

ドキュメントは以下のものを参考にしています。

https://developers.nutanix.com/sdk-reference?namespace=vmm&version=v4.2&language=python

こちらには環境構築の手順や、リファレンス等の記載があります。

 

まずはPythonをインストールします。

インストール後、PowerShell等でバージョンを確認します。

>python

Python 3.14.6

 

仮想実行環境(virtualenv)のインストールをします。

#virtualenvのインストール

> pip install virtualenv

#インストールの確認

> virtualenv --version

virtualenv 21.6.1

 

次に仮想実行環境を構築します。

ここではnutanix_001という環境を作成しました。

> virtualenv nutanix_001

 

作成したnutanix_001をアクティベートし、Nutanix SDKをインストールします。

NutanixのSDKは名前空間(NameSpace)ごとにモジュールが分かれていますので、目的に合うモジュールをインストールしてください。

ここでは仮想マシン管理用のモジュール(ntnx_vmm_py_client)をインストールします。

> .\nutanix_001\Scripts\activate

> nutanix_001\Scripts\pip.exe install ntnx_vmm_py_client

 

ntnx_vmm_py_clientで取得できる主な情報

ntnx_vmm_py_clientではVM情報を取得・操作することができます。

VM一覧を取得するAPIを実行すると、かなり多くの情報を取得することができました。

情報が多すぎるので割愛しますが、一部抜粋すると以下のようなものを得られます。

VM名、UUID(ExtId)、説明、作成日時、更新日時、

Power State、Protection Type、

CPUソケット数、コア数、スレッド数、メモリ容量、

Cluster ExtId、Host ExtId、

ディスク数、容量、接続方式(SCSI)、Storage Container、

ISOイメージ、接続状態、

MACアドレス、IPアドレス、Subnet、接続状態、

Boot Order、BIOS UUID、vTPM、CPU Hotplug、Live Migration可否など

Prismで仮想マシン作成を作成する際の画面のパラメーター部分は大体取得することができました。

ここで紹介している情報は一部であり、SDKからはさらに多くの設定情報へアクセスできます。

ここではサンプルとして仮想マシン名、vCPU、メモリ、Power State、IPアドレスを表示するコードを書きます。

仮想マシン構成情報を取得するサンプルコード

import ntnx_vmm_py_client
import urllib3

# SSL警告を非表示
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

config = ntnx_vmm_py_client.Configuration()
config.host = '<Prism Central IP>'
config.port = 9440 
config.username = '<ユーザー名>' 
config.password = '<パスワード>' 
config.verify_ssl = False

vmm_client = ntnx_vmm_py_client.ApiClient(configuration=config)

vm_api = ntnx_vmm_py_client.VmApi(api_client=vmm_client)

# VM一覧を取得
api_response = vm_api.list_vms()

for vm in api_response.data:

    # vCPU数
    vcpu = (
        vm.num_sockets
        * vm.num_cores_per_socket
        * vm.num_threads_per_core
    )

    # IPアドレス取得
    ip_address = "N/A"

    if vm.nics:
        for nic in vm.nics:
            if (
                nic.network_info
                and nic.network_info.ipv4_config
                and nic.network_info.ipv4_config.ip_address
            ):
                ip_address = nic.network_info.ipv4_config.ip_address.value
                break

    print(f"VM Name     : {vm.name}")
    print(f"vCPU        : {vcpu}")
    print(f"Memory      : {vm.memory_size_bytes / 1024**3:.1f} GB")
    print(f"Power State : {vm.power_state}")
    print(f"IP Address  : {ip_address}")
    print("-" * 50)

実行結果

--------------------------------------------------
VM Name     : TEST_VM_001
vCPU        : 4
Memory      : 16.0 GB
Power State : ON
IP Address  : 192.168.1.10
--------------------------------------------------
VM Name     : TEST_VM_002
vCPU        : 2
Memory      : 4.0 GB
Power State : OFF
IP Address  : N/A
--------------------------------------------------

 

Prism CentralのIPや認証情報は各環境に置き換えてください。

このように仮想マシン名と構成情報を簡単に表示することができます。

ただし、このコードではCVMは表示されませんのでご注意ください。

 

次に仮想マシンのリソース使用状況を表示するサンプルコードになります。

仮想マシン構成情報を取得するサンプルコード

from datetime import datetime, timedelta, timezone
import urllib3
import ntnx_vmm_py_client

# SSL警告を非表示
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

config = ntnx_vmm_py_client.Configuration()
config.host = "<Prism Central IP>"
config.port = 9440
config.username = "<ユーザー名>"
config.password = "<パスワード>"
config.verify_ssl = False

vmm_client = ntnx_vmm_py_client.ApiClient(configuration=config)

vm_api = ntnx_vmm_py_client.VmApi(api_client=vmm_client)
stats_api = ntnx_vmm_py_client.StatsApi(api_client=vmm_client)

# 直近5分の統計情報を取得
end_time = datetime.now(timezone.utc)
start_time = end_time - timedelta(minutes=5)

# VM一覧取得
api_response = vm_api.list_vms()

for vm in api_response.data:

    try:
        stats = stats_api.get_vm_stats_by_id(
            extId=vm.ext_id,
            _startTime=start_time,
            _endTime=end_time,
            _samplingInterval=60,
            _statType="AVG",
            _select="*"
        )

        stats_list = stats.to_dict()["data"]["stats"]

        if not stats_list:
            print(f"VM Name      : {vm.name}")
            print("Statistics   : No Data")
            print("-" * 50)
            continue

        stat = stats_list[-1]

        cpu = (
            stat["hypervisor_cpu_usage_ppm"] / 10000
            if stat.get("hypervisor_cpu_usage_ppm") is not None
            else None
        )

        memory = (
            stat["guest_memory_usage_ppm"] / 10000
            if stat.get("guest_memory_usage_ppm") is not None
            else None
        )

        print(f"VM Name      : {vm.name}")
        print(f"CPU Usage    : {cpu:.2f}%" if cpu is not None else "CPU Usage    : N/A")
        print(f"Memory Usage : {memory:.2f}%" if memory is not None else "Memory Usage : N/A")
        print(f"IOPS         : {stat.get('controller_num_iops', 'N/A')}")
        print(f"Read I/O     : {stat.get('controller_num_read_io', 'N/A')}")
        print(f"Write I/O    : {stat.get('controller_num_write_io', 'N/A')}")
        print("-" * 50)

    except Exception as e:
        print(f"VM Name      : {vm.name}")
        print(f"Error        : {e}")
        print("-" * 50)

実行結果

--------------------------------------------------
VM Name      : TEST_VM_001
CPU Usage    : 0.84%
Memory Usage : 51.26%
IOPS         : 0
Read I/O     : 0
Write I/O    : 26
--------------------------------------------------
VM Name      : TEST_VM_002
CPU Usage    : 0.00%
Memory Usage : 0.00%
IOPS         : None
Read I/O     : None
Write I/O    : None
--------------------------------------------------

仮想マシンごとのCPU使用率やメモリ使用率、IOPSなどのリソース情報を取得できました。

実行結果の例を見ると、稼働中のVMではCPUやメモリの使用率が取得できており、一方で停止中のVMでは値がNoneとなることが確認できます。

これにより、現在どの仮想マシンがどの程度リソースを消費しているかを簡単に把握できます。

これらの情報を活用することで、単なるVM一覧の取得だけでなく、運用監視やキャパシティプランニングにも利用できます。

例えば、

  • CPU使用率が高い仮想マシンの特定
  • メモリ使用率が高い仮想マシンの抽出
  • ストレージI/Oが集中している仮想マシンの確認
  • 定期的に情報を収集し、リソース使用率の推移を可視化

といった運用がPythonから実現できます。

今回紹介したコードは情報を表示するシンプルなものですが、取得した値をCSVへ出力したり、データベースへ保存したりすることで、日々の監視やレポート作成にも応用できます。

またVMの構成情報と組み合わせることで、「どのVMがどのクラスタ上で、どれだけリソースを消費しているのか」を一元的に把握できるようになります。

 

LLMとNutanix APIの連携

これまで紹介したPython SDKを利用することで、Nutanixの仮想マシン情報やリソース情報を取得できるようになりました。

次のステップとして、これらのPythonコードをLLM(Large Language Model)と連携させることで、「自然言語でNutanixを操作する」環境を構築していきます。

最終的には、

「CPU使用率が高いVMを教えて」

「仮想マシン一覧を表示して」

「UbuntuのVMを作成して」

といった自然言語だけで、Nutanixを操作できることを目標としています。

 

今回構築した環境は以下の様な構成です。

ブラウザ
 ↓
Open WebUI (Docker)
 ↓
Ollama
 ↓
qwen3:8b
 ↓
Open WebUI Tool (Python)
 ↓
Nutanix Python SDK(v4)
 ↓
Prism Central

構築手順の詳細は省略しますが、Ubuntu上にDocker環境を構築し、その上でOpen WebUIとOllamaを動作させています。

Ollamaを導入することで、クラウド上のLLMサービスを利用することなく、自社環境内で大規模言語モデル(LLM)を実行できます。

そのため、機密性の高いインフラ情報を外部へ送信することなく、安心して運用に活用できる点が大きなメリットです。

また、Open WebUIはチャットインターフェースを提供するだけでなく、Python Toolを利用して任意のPythonコードを実行できます。今回作成したNutanix SDKを利用するPythonコードをPython Toolとして登録することで、チャットからNutanix APIを呼び出せるようになります。

例えば、Open WebUIで以下のように質問します。

「Nutanix環境のCPU消費量が多い仮想マシンTOP3を教えてください。」

すると、LLMがユーザーの意図を理解し、登録済みのPython Toolを実行します。Python ToolはNutanix SDKを利用してPrism CentralへAPIを実行し、取得したCPU使用率を集計・並べ替えた結果をLLMが自然な文章で回答します。

仮想マシン名の一部は伏せていますが、Nutanix基盤上でCPU使用率の高い仮想マシンが上位3台表示されていることが確認できます。

このように、Nutanix APIとLLMを組み合わせることで、従来は管理画面を開いて確認していた情報を自然言語だけで取得できるようになります。リソース監視だけでなく、仮想マシン一覧の取得や構成情報の確認など、日常的な運用業務の効率化にも活用できます。

 

まとめ

今回は、Nutanix v4 APIで提供されているPython SDKを利用して、仮想マシンの情報やリソース情報を取得する方法を紹介しました。

比較的シンプルなコードでNutanix環境を操作できることがお分かりいただけたかと思います。

また取得した情報をOpen WebUIとOllamaで構築したLLM環境と連携することで、「CPU使用率が高い仮想マシンを教えて」といった自然言語での問い合わせにも対応できることを確認しました。Nutanix APIは単なる情報取得のためだけではなく、LLMと組み合わせることで、より直感的なインフラ運用を実現できる可能性を秘めています。

今回紹介した内容は、主に「情報を取得する」ことを中心とした活用例です。しかし、Nutanix APIでは仮想マシンの作成や電源操作、スナップショットの作成など、さまざまな運用操作も実行できます。

今後はNutanix APIを利用した仮想マシンの作成や運用自動化について紹介し、自然言語からNutanix環境を操作する仕組みをさらに発展させていきたいと思います。

 

 

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
ネットワールドが開催する 年に一度の大イベント
【 Networld Wiz 2026 】お申込み受付中!!

本ブログでご紹介したメーカーもイベントへ出展します!

セッション & ブース出展情報 随時更新中
  ▼ぜひチェックしてください▼