Glances Cloud 插件详解:基于 OpenStack 元数据服务识别云主机实例信息

发布时间:2026/11/5 11:18:46

Glances Cloud 插件详解:基于 OpenStack 元数据服务识别云主机实例信息 指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载导读本文围绕 docs/aoa/cloud.rst 讲解的cloud 插件展开当你的主机运行在 OpenStack含 Amazon EC2 兼容 API 的云平台上时Glances 可以通过标准的 OpenStack 元数据服务metadata service自动获取云平台、实例 ID、实例类型、实例名称与可用区等信息并显示在 TUI 界面中。读完本文你将掌握该插件的启用方式、配置项含义、底层采集原理两个异步线程与字段映射关系以及实际运行的前提条件与排查要点。一、插件功能概述cloud 插件的目的非常单一且明确识别宿主机所在的数据中心/云平台环境并把实例的元信息呈现出来。官方文档的描述为This plugin displays information about the cloud provider if your host is running on OpenStack.也就是说它不是通用云监控插件而是专门面向OpenStack及其EC2 兼容 API的场景。从 插件源码 的模块注释可以确认其支持的云 API 范围ThreadOpenStack标准VanillaOpenStack 元数据服务ThreadOpenStackEC2兼容 Amazon EC2 元数据服务的 OpenStack 环境。该插件默认处于禁用状态需要显式启用后才会启动采集线程。二、工作原理OpenStack 元数据服务OpenStack Nova 为实例提供了一套实例内的元数据服务metadata service虚拟机可以通过一个保留的链路本地地址访问IPv4169.254.169.254IPv6fe80::a9fe:a9fecloud 插件正是基于这一机制在实例内部发起 HTTP 请求来读取平台下发的元数据无需任何云平台账号或认证信息。官方文档将这一入口称为 standard OpenStack metadata service。从源码看插件定义了两套 API 地址与字段映射glances/plugins/cloud/init.py平台API 根地址字段映射OpenStackhttp://169.254.169.254/openstack/latest/meta-dataid ← project_idname ← nametype ← meta/roleregion ← availability_zoneAmazon EC2兼容http://169.254.169.254/latest/meta-dataid ← ami-idname ← instance-idtype ← instance-typeregion ← placement/availability-zone最终汇总的 stats 是一个字典包含五个键stats { id: # 项目 ID / AMI ID name: # 实例名称 / 实例 ID type: # 角色 / 实例类型 region: # 可用区 platform # OpenStack 或 Amazon EC2 }源码中甚至保留了一段仅供本机测试用的示例glances/plugins/cloud/init.pystats {id: ami-id, name: My VM, type: Gold, region: France, platform: OpenStack}三、启用与配置3.1 命令行启用由于插件默认禁用官方文档明确要求通过--enable-plugin cloud选项启用glances --enable-plugin cloud--enable-plugin别名--enable-plugins/--enable是 Glances 全局插件开关定义于 glances/main.py支持逗号分隔的插件列表。与之配套的还有--disable-plugin别名--disable-plugins/--disable支持all关键字glances/main.py例如只保留 cloud 插件glances --disable-plugin all --enable-plugin cloud3.2 配置文件配置Glances 的默认配置文件 conf/glances.conf 中包含完整的[cloud]小节conf/glances.conf[cloud] # This plugin is disabled by default disableTrue # Refresh rate for this plugin (in seconds). Default is the global refresh rate. # Cloud metadata API calls are slow. refresh120两个配置项的含义disableTrue默认关闭插件这与文档disable by default的描述一致refresh120该插件独立的刷新周期秒不跟随全局刷新率。配置注释明确说明原因——云元数据 API 调用较慢因此把刷新间隔拉长到 120 秒避免频繁发起元数据请求。从源码看插件的启停判定最终由插件基类 glances/plugins/plugin/model.py 的is_enabled()/is_disabled()完成它优先读取disable_cloud参数配置文件disableTrue会映射到该参数否则回退到enable_cloud由--enable-plugin设置返回d is False作为最终判定结果。也就是说配置文件与命令行开关是同一套判定逻辑的两种入口。3.3 依赖要求cloud 插件依赖 Pythonrequests库glances/plugins/cloud/init.py。若环境中缺少requests插件会打印告警日志 Missing Python Lib (...), Cloud plugin is disabled并自动禁用自身且采集线程会立即停止glances/plugins/cloud/init.py。因此启用前请确认依赖已安装。四、TUI 界面输出格式当插件启用、且成功从元数据服务取回数据时TUI 界面会显示一行云平台信息。输出逻辑位于 glances/plugins/cloud/init.py 的msg_curse()第一段以标题样式TITLE显示platform即OpenStack或Amazon EC2第二段显示{type} instance {name} ({region})。对应的渲染模板为msg self.stats.get(platform, Unknown) # 例OpenStack msg {} instance {} ({}).format( self.stats.get(type, Unknown), # 例Gold / m1.small self.stats.get(name, Unknown), # 例My VM / i-xxxx self.stats.get(region, Unknown), # 例France / us-east-1a )有两个值得注意的细节无数据时不显示若 stats 为空或插件被禁用msg_curse()直接返回空glances/plugins/cloud/init.py信息不完整时不显示若拿不到platform或name同样不渲染避免输出 Unknown 噪声——这是针对 issue #2485 的显式处理glances/plugins/cloud/init.py。因此在实际 TUI 中只有数据完整可用时你才会看到 cloud 那一行。五、源码级实现解析两个采集线程cloud 插件最核心的实现特点是用两个后台线程异步抓取元数据避免阻塞 Glances 主循环。5.1 线程生命周期在 CloudPlugin.init中只有is_enabled()判定插件已启用时才会创建并启动两个线程if self.is_enabled(): self.OPENSTACK ThreadOpenStack() self.OPENSTACKEC2 ThreadOpenStackEC2() self.OPENSTACK.start() self.OPENSTACKEC2.start()插件退出时exit() 会依次调用两个线程的stop()通过线程内部的threading.Event安全收尾。5.2 采集流程与回退逻辑update()的更新策略glances/plugins/cloud/init.py是stats self.OPENSTACK.stats if not stats: stats self.OPENSTACKEC2.stats即优先使用标准 OpenStack 元数据若为空说明当前环境不是 Vanilla OpenStack则回退到 EC2 兼容 API。5.3 字段抓取与超时ThreadOpenStack.run()glances/plugins/cloud/init.py按OPENSTACK_API_METADATA定义的字段逐条发起请求r requests.get(r_url, timeout3)超时设为3 秒代码注释解释为本地请求3 秒超时足够glances/plugins/cloud/init.py任一请求失败异常或非 OK 状态都会break此时不会写入platform字段整个 stats 保持为空从而触发上面的 EC2 回退只有当四个字段全部成功获取循环正常走完else分支时才设置platform OpenStackglances/plugins/cloud/init.py。这种全部成功才认定平台的设计保证了不会把残缺数据当成有效结果。ThreadOpenStackEC2继承自ThreadOpenStack仅覆盖平台名、API 地址和字段映射三处常量glances/plugins/cloud/init.py。六、适用前提与限制基于文档与源码使用 cloud 插件需要满足以下前提缺一不可运行在 OpenStack 云上含提供 EC2 兼容元数据服务的环境。在物理机、普通虚拟机或非 OpenStack 云如仅提供 AWS 原生元数据的场景需另行确认兼容性上插件不会取到数据实例能访问链路本地地址169.254.169.254。若云网络策略屏蔽了该地址采集会因超时失败插件静默无输出Python 环境已安装requests否则插件直接禁用显式启用插件通过--enable-plugin cloud或修改配置文件的disableFalse。几点限制说明该插件默认禁用、不参与默认输出需要按上文方式手动开启刷新周期独立为 120 秒修改refresh值可调整元数据请求频率不建议设得过低元数据 API 调用较慢从仓库结构看tests 目录中暂未见针对 cloud 插件的独立测试文件功能验证主要依赖真实 OpenStack 环境下的运行表现本地调试时可参考源码中注释掉的示例 stats 字典进行模拟。七、快速排障清单当 TUI 中看不到 cloud 信息时可按以下顺序排查现象可能原因处理方式日志出现 Missing Python Lib未安装requests安装依赖后重启 Glances无输出且插件已启用非 OpenStack 环境或元数据地址不可达在实例内curl http://169.254.169.254/openstack/latest/meta-data验证可达性输出 Unknown数据不完整插件按 issue #2485 逻辑隐藏检查元数据服务是否返回了完整字段想临时验证效果本地无云环境参考源码中测试用的示例 stats 字典仅测试用途结语cloud 插件是 Glances 众多插件中定位最聚焦的一个它只做一件事——通过 OpenStack 标准元数据服务识别宿主机云环境并把平台、实例类型、名称与可用区以一行信息呈现。其双线程异步采集 全字段成功才认定平台 EC2 自动回退的实现方式既保证了不阻塞主界面也保证了数据的可靠性。结合 docs/aoa/cloud.rst 的文档说明、插件源码 与 默认配置你可以快速在 OpenStack 云主机上启用并验证该功能。赞分享指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载相关推荐ESP32 GNSS 定位实战4步搞定从接线到深睡低功耗的 GPS 终端ESP32 GNSS 定位实战4步搞定从接线到深睡低功耗的 GPS 终端 本文解决一个问题用 ESP32 加一块 GNSS 模块做出能长期运行的定位终端从嵌入式物联网驱动开发视频看完就忘BiliNote让AI视频笔记生成一键完成省下一大半整理时间视频看完就忘BiliNote让AI视频笔记生成一键完成省下一大半整理时间 你的收藏夹里是不是也躺着几十个标着以后再看的教程、讲座和网课真正打开时往AI 应用大模型RAG语音后端前端桌面应用5步掌握Umi-OCR让扫描PDF文档焕发新生的终极指南5步掌握Umi OCR让扫描PDF文档焕发新生的终极指南 在数字化办公时代我们每天都会遇到各种扫描版PDF文档——合同、报告、论文、档案这些文档虽然保留了OCR桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/4 22:49:02

Windows下nvm-windows完全指南:安装、切换与镜像加速

我在 Windows 上折腾 Node.js 这些年前前后后换过几十个版本。有一阵子全靠官网安装包来回卸载重装,结果就是各种环境冲突,直到用上 nvm-windows 才算是真正解脱。这篇就把 Windows 下 nvm 的完整玩法一次讲清楚,从安装、环境变量&#xff0c…

2026/10/25 22:33:18

垃圾填埋场设计开题报告:从场址分析到防渗与渗滤液系统的关键参数

简介:垃圾填埋场设计开题报告PDF,面向环境工程、市政工程等专业学生及从事固废处理的设计人员,聚焦堰桥地区山谷型小型垃圾填埋场的工程难点。文档围绕场底平整与防滑、雨水导排与防渗系统、渗滤液与填埋气收集导排、渗滤液处理及终场覆盖等核…

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑