阶段 2:监控¶
《扩展之旅》的第二阶段是监控。
在正确配置集群以处理扩展之后,您需要正确监控它,以发现负载压力迹象。OpenStack 中的监控可能有些复杂,有时很难确定如何有意义地监控您的部署,以便提前预警负载过高。此页面旨在帮助回答这些问题。
一旦建立了有意义的监控,您就可以进入《扩展之旅》的第三阶段:扩展。
常见问题解答¶
问:监控如何帮助我们?
答:监控可以帮助我们
了解系统的当前状态、其利用率不足/过剩、其容量等
预测系统使用趋势,尝试了解是否存在任何瓶颈
通过分析系统图表快速排查系统问题
主动应对即将出现的问题
验证可扩展性问题
问:可以用来监控 OpenStack 集群的可能指标有哪些?
答:OpenStack 中存在各种各样的指标,包括但不限于
SLO:VM 创建/删除/重建所需的时间,以及每日/每月平均值
RabbitMQ:分区、队列和消息状态
Hypervisor:内存、CPU 和其他资源的利用率,正在运行/暂停/关闭的 VM 数量
C Plane:C Plane 资源利用率、RevC 队列大小
API:API 响应状态、API 延迟、API 可用性
用户端资源利用率:每个用户的项目数量、每个用户的 VM 数量、每个项目的端口数量等。
Agent 状态:Nova、Neutron 等的正在运行的 Agent 数量
问:如何检测 RabbitMQ 是否是瓶颈?
答:oslo.metrics 将引入对 rpc 调用的监控,目前正在开发中。RabbitMQ 节点 CPU 和 RAM 使用率也是您的 RabbitMQ 集群过载的指标,如果您发现 CPU 或 RAM 使用率很高,则应扩展 RabbitMQ 节点。
问:如何检测数据库是否是瓶颈?
答:oslo.metrics 也会将 oslo.db 集成为在 oslo.messaging 之后的下一步。
问:如何跟踪延迟问题?
答:如果您在 OpenStack API 服务器前面有负载均衡器或代理(例如 haproxy、nginx),您可以根据这些服务提供的指标监控 API 延迟。
问:如何跟踪错误率?
答:监控指标对于了解错误发生时的情况非常有用。错误率有两种类型
当操作失败时
由于 API 服务无法工作导致的 API 失败
通过跟踪 HTTP 返回码(3xx、4xx、5xx)来完成
当消息队列已满时
我们可以使用 RabbitMQ Exporters 来跟踪当前 MQ 状态
其他 MQ 的想法
当资源利用率超过阈值时
使用 Node Exporter、cAdvisor、自定义 Exporters,我们可以跟踪资源
当 C-Plane 资源或服务 Agent 停止工作时,等等
可以通过收集不同节点(控制、计算、网络、存储节点等)上的 Agent 当前状态来跟踪
当操作速度慢时
API 速度慢,但正在运行
我们可以在主连接点(例如 haproxy)跟踪请求/响应之间的时滞,以了解 API 速度有多慢
资源 CRUD(例如,VM CRUD)速度慢
这涉及计算完成创建/删除等资源所需的时间。由于资源 CRUD 可能是异步的,因此 API 响应时间可能无法给出确切的响应
问:我们如何跟踪性能问题?
A
VM 创建/删除/重建的时间增加
可以通过检查 Nova 发送的通知来计算
Nova 在开始创建/删除 VM 时以及操作结束时发送通知。这两个事件之间的时间间隔可用于查找时间
某些 Hypervisor 上调度的 VM 数量明显高于其他 Hypervisor(调度不当)
可以使用 libvirt Exporters 计算,libvirt Exporters 提供正在部署在计算节点上的 VM 的状态,并将其暴露给 Prometheus
也可以基于其他 Hypervisor 解决方案创建替代方案
API 响应时间过高
我们可以在主连接点(例如 haproxy)跟踪请求/响应之间的时滞,以了解 API 性能有多慢。
等等…
问:如何跟踪流量问题?
A
问:如何跟踪饱和度问题?
A
资源¶
在 Google SRE 书籍中了解黄金信号(延迟、流量、错误、饱和度)。
其他 SIG 在该阶段的工作¶
通过 oslo.metrics 测量 MQ 行为
oslo.metrics 的批准规范:https://review.opendev.org/#/c/704733/
0.1.0 初始版本已发布
达到 1.0 版本
oslo-messaging 指标代码 https://review.opendev.org/#/c/761848/ (genekuo)
启用 bandit(修复指标 socket 可预测路径的问题?)
改进测试以更接近 100% 覆盖率。