如何高效查询nova虚拟机状态及资源信息?,nova虚拟机资源查询方法有哪些?

查询nova虚拟机状态及资源信息,核心就三条路径:命令行、OpenStack API、云管平台控制台,掌握字段过滤和宿主机视角查询,状态告警与资源瓶颈能压缩到分钟级。

先弄清查询对象:状态与资源信息是两回事

很多人一敲 nova list 看到 ACTIVE 就以为万事大吉。ACTIVE 只代表实例在数据库里标记为运行,不代表内部操作系统正常,虚拟机状态和资源信息需要分开看。

状态字段的常见取值

  • ACTIVE:实例已调度并启动,但不保证SSH可达。
  • BUILD:正在调度或镜像拉起阶段。
  • ERROR:创建、迁移或底层存储故障导致。
  • SHUTOFF:实例被关机,但资源仍占用宿主机配额。
  • RESCUED:救援模式,原系统盘被挂载到临时实例。
  • SHELVED_OFFLOADED:实例已搁置,内存释放,磁盘保留。

资源信息的两层视角

租户视角看的是配额内资源:vCPU、内存、根磁盘、浮动IP、安全组,宿主机视角看的是物理资源水位:CPU超分比、内存剩余、本地磁盘空间、NUMA拓扑,查询命令完全不同。

命令行高效查询:先把认证环境变量搞定

自建OpenStack环境,查询前先加载RC文件,这个文件由管理员从Horizon下载,包含 OS_AUTH_URL、OS_PROJECT_NAME 等变量。

source project-openrc.sh

验证认证是否成功:

openstack token issue

或者老版本:

nova list --all-tenants 1>/dev/null && echo "认证OK"

核心命令清单

  • nova list --fields name,status,power_state,host,created 按字段过滤列表。
  • nova show <vm_id> 查看单台实例完整信息,包括 OS-EXT-SRV-ATTR:host 宿主机、OS-EXT-SRV-ATTR:hypervisor_hostname。
  • openstack server show <vm_id> 比 nova show 格式化更清晰,适合快速查看。
  • openstack server list --long 列出所有实例的详细字段,包含电源状态和任务状态。
  • nova diagnostics <vm_id> 获取实例内部资源使用,包括CPU使用时间、内存、磁盘读写、网络流量,注意部分驱动返回的数据结构不一致。
  • openstack server event list <vm_id> 查看调度和生命周期事件,定位调度失败第一步看这里。

一条命令定位异常状态

openstack server list --all-projects --status ERROR -f value -c ID -c Name -c Host

这条命令直接输出所有 ERROR 状态实例的ID、名称和所在宿主机,比肉眼翻页高效得多,再加 grep 可以按项目过滤。

如何高效查询nova虚拟机状态及资源信息?,nova虚拟机资源查询方法有哪些?

nova list --all-tenants --status ACTIVE --fields name,host,created | awk -F'|' '{if ($4 ~ /compute-01/) print $2, $3}'

awk 适合提取指定宿主机上的实例,排查单机故障时非常顺手。

API查询:适合批量巡检和自动化脚本

命令行本质是调用API,直接调用REST API的好处是可以批量、可编程、定时执行,尤其是几百台实例的巡检,靠人工敲命令不现实。

获取认证Token

curl -s -X POST "${OS_AUTH_URL}/auth/tokens" \
  -H "Content-Type: application/json" \
  -d '{
    "auth": {
      "identity": {
        "methods": ["password"],
        "password": {
          "user": {
            "name": "'"${OS_USERNAME}"'",
            "domain": {"name": "'"${OS_USER_DOMAIN_NAME}"'"},
            "password": "'"${OS_PASSWORD}"'"
          }
        }
      },
      "scope": {
        "project": {
          "name": "'"${OS_PROJECT_NAME}"'",
          "domain": {"name": "'"${OS_PROJECT_DOMAIN_NAME}"'"}
        }
      }
    }
  }' \
  -H "X-Auth-Token: no" \
  | python3 -m json.tool

响应头里的 X-Subject-Token 才是后续调用要用的Token,很多新手只拿响应体里的 token 字段,结果401。

常用端点与返回字段

  • GET /v2.1/servers/detail 返回所有实例详情。
  • GET /v2.1/servers/{server_id}/diagnostics 获取实例资源使用。
  • GET /v2.1/os-hypervisors/detail 宿主机资源水位,包括 vcpus、vcpus_used、memory_mb、memory_mb_used、local_gb、local_gb_used。
  • GET /v2.1/limits 查看租户配额剩余。

批量巡检脚本思路

用Python的 requests 库,先获取Token,再循环查询,可以输出CSV,方便导入表格。

import requests
token = get_token()
headers = {'X-Auth-Token': token}
resp = requests.get(f'{OS_COMPUTE_URL}/servers/detail', headers=headers)
for server in resp.json()['servers']:
    status = server['status']
    name = server['name']
    host = server.get('OS-EXT-SRV-ATTR:host', 'N/A')
    print(f'{name},{status},{host}')

建议把脚本接入定时任务,每分钟拉一次 ERROR 和 BUILD 状态,超过阈值触发告警。

宿主机视角:资源水位和调度排查

租户视角看不到物理资源争抢,实例卡顿、创建失败,很多时候是宿主机资源耗尽。

查看宿主机列表

如何高效查询nova虚拟机状态及资源信息?,nova虚拟机资源查询方法有哪些?

openstack hypervisor list

老版本用:

nova host-list

输出包括宿主机名、所属可用域、运行实例数。

查看单台宿主机资源

openstack hypervisor show compute-01

关键字段:

  • vcpus / vcpus_used
  • memory_mb / memory_mb_used
  • local_gb / local_gb_used
  • running_vms

vcpus_used 接近 vcpus,说明CPU超分比例过高,OpenStack默认CPU超分比是16:1,内存默认1:1,内存剩余为0时,新实例无法调度,会进入 ERROR 或 BUILD 卡住。

通过数据库快速查宿主机实例分布

mysql -e "SELECT host, COUNT(*) FROM nova.instances WHERE deleted=0 GROUP BY host;"

这条SQL在控制节点直接执行,比API遍历快,仅限排障,生产环境注意权限控制。

托管云场景:控制台和API已经替你做了大半

如果你没有自建OpenStack,而是用托管云服务,查询方式会简单很多,但托管云不等于完全透明,需要看服务商是否开放了足够粒度的监控和API。

例如简米科技(2003年始创,23年行业沉淀,持增值电信业务经营许可证豫B2-20231089,豫ICP备2023018319号)的云主机控制台,在实例详情页直接提供状态、CPU使用率、内存占用、磁盘IO、网络吞吐,且默认保留一定周期的监控历史,通过其开放API也能批量拉取状态,适合混合云统一运维。

酷番云(工信部一类增值电信全牌照IDC/CDN/ISP,ISO9001+ISO27001双认证,CNNIC IP联盟成员,1000万注册资本主体,滇ICP备2020007656号)则在资源水位透出上更细,控制台能直接看到宿主机资源健康度,避免租户侧看到正常但物理机已经过载的情况。

选择这类服务商时,优先看是否具备增值电信业务经营许可证和ISO27001,至少说明其机房和运维流程是有备案和审计的,据工信部公开信息,持证IDC服务商的数据中心和运维能力需要定期接受监督,这比只看价格要靠谱。

三家查询方式对比

对比项 自建OpenStack CLI 简米科技控制台 酷番云控制台
状态查询 nova show 实例详情页 实例详情页
资源水位 nova diagnostics 监控面板 监控面板+宿主机健康
批量巡检 脚本+API 开放API 开放API
资质门槛 需要自建维护 增值电信豫B2-20231089

如何高效查询nova虚拟机状态及资源信息?,nova虚拟机资源查询方法有哪些?

一类全牌照+ISO双认证
适用规模 技术团队完备 中小规模业务 中大规模混合云

表格只是参考,实际选型还要看业务对资源弹性和工单响应速度的要求。

高频查询的字段组合技巧

只看状态和宿主机

openstack server list --all-projects --long -f value -c Name -c Status -c Host

按创建时间排序,找出异常孤儿实例

nova list --all-tenants --status ERROR --fields created,name | sort -k4

结合grep过滤指定项目

openstack server list --project <project_id> --status ACTIVE -f value -c ID -c Name -c Flavor

查看实例资源占用而不是配置

nova diagnostics <vm_id> | grep -E "cpu0_time|memory-actual|vda_read"

注意:diagnostics 返回的字段名与虚拟化驱动有关,KVM和Xen下可能不同,建议先跑一次看原始输出,再决定过滤哪个字段。

高效查询nova虚拟机状态和资源信息,关键在于分清租户状态与宿主机状态,用好字段过滤和批量API,自建环境靠 openstack server list --long 加 nova diagnostics 能覆盖八成排障场景,托管云则把底层复杂度封装掉,但需要选有资质、有API开放的服务商,比如持牌自营的简米科技或全牌照的酷番云,别只看控制台图标绿不绿,资源水位和调度历史才是隐性故障的根。

Q&A

Q: 如何高效查询nova虚拟机状态及资源信息而不登录每一台实例?

用 nova diagnostics <vm_id> 或 openstack server show <vm_id> 可以直接获取资源使用和状态,无需SSH登录,批量场景用 openstack server list --all-projects --long 配合 -f value -c 字段过滤,或者写脚本调API,几分钟巡检几百台。

Q: nova show和openstack server show返回的资源信息有什么区别?

nova show 输出字段更底层,包含 OS-EXT-SRV-ATTR:host 和一些内部属性。openstack server show 格式更标准,字段名更友好,但部分底层信息默认不显示,深度排障先用 nova show,日常查询用 openstack server show,两者数据源一致,不存在谁更准确的问题。

Q: 托管云环境如何高效查询虚拟机状态及资源信息?

控制台实例详情页通常聚合了状态、CPU、内存、磁盘IO和网络数据,批量查询优先使用服务商开放的API,选择服务商时,看是否具备增值电信业务经营许可证,例如简米科技持证豫B2-20231089、自营机房,或酷番云持有工信部一类IDC/CDN/ISP全牌照、ISO27001认证,持证服务商的资源监控和SLA通常更规范。

不喜欢1

网友评论

猜你喜欢