prometheus - 使用 Prometheus 监控容器 CPU 利用率
问题描述
在 Prometheus UI 上,当我运行以下查询时,它按预期工作
(sum ( rate (container_cpu_usage_seconds_total{namespace="nginx-enabled", container="nginx"}[30s])) * 100000) / 110000
Output Returned: 23.34
container_spec_cpu_quota{namespace="nginx-enabled", container="nginx"}
Output Returned: 110000
但是当我尝试使用以下查询时,我没有看到任何输出,也没有与查询字符串相关的错误消息。
(sum ( rate (container_cpu_usage_seconds_total{namespace="nginx-enabled", container="nginx"}[30s])) * 100000) / (container_spec_cpu_quota{namespace="nginx-enabled", container="nginx"})
有人可以帮我解决我所缺少的吗,我对 Prometheus Query 非常陌生
解决方案
PromQL 确实很棘手,例如,如果碰巧使用了错误的数据类型,它就会默默地失败。您遇到的问题似乎是组合查询的左侧,即该 (sum(rate(container_cpu_usage_seconds_total...
部分返回一个标量值(因此,恰好是一个值),而右侧(container_spec_cpu_quota{...}
)是一个向量,其最近值仅显示。
我尝试在PromLens中重新创建您的组合查询,它提供了一种调试查询的好方法。不幸的是,它没有container_spec_cpu_quota
在数据中提供,所以我用附近可用的东西(container_spec_cpu_shares
)替换了它。
现在,如果您将以下查询插入 PromLens,模拟您的查询,您将看到它也失败了(您将在单击Explain
选项卡时看到原因):
(sum ( rate (container_cpu_usage_seconds_total[30s])) * 100000)
/
container_spec_cpu_shares
然而,当你也聚合右手边,把它变成一个标量(因为它是一个量规,很简单sum
),你会得到一个结果:
(sum ( rate (container_cpu_usage_seconds_total[30s])) * 100000)
/
sum(container_spec_cpu_shares)
处理左侧和右侧在数据类型方面未对齐的更多选项,例如使用on
orignoring
关键字,可通过矢量匹配部分中的文档获得。
推荐阅读
- asp.net - 使用 ASP.Net 直接打印 PDF 文件
- node.js - 使用 Typescript 在 Sequelize 模型中创建实例方法
- javascript - CSharp 和 javascript 中的 FromXmlString
- vba - exel文件中的错误行
- sql-server - SQL Server:查询单个表以显示其他列
- ios - 如何将用户注册到 AWSCognitoIdentityUserPool 并取回 JWT 令牌?
- android - Android应用程序中的“动态修改资源表”究竟是什么意思
- nginx - 用 proxy_pass 下的参数重写
- jquery - AJAX:JSON 数据不返回正确的值
- c# - OLEDB 在尝试获取数据时出错