prometheus - 如何使用 prometheus 和 node_exporter 获得服务器的整体正常运行时间
问题描述
我正在寻找一个查询来获取上周运行 prometheus 的服务器的平均正常运行时间。它应该是大约 15 小时/周,所以大约 8-10 %。
我在 CentOS 7.6.1810 上使用 Prometheus 2.5.0 和 node_exporter。我最有希望的实验是:
1 - avg_over_time(up{job="prometheus"}[7d])
这是我在寻找获得平均正常运行时间的方法时发现的,但它正好给了我 1。(我的猜测是它忽略了没有刮擦发生的时间?)
2 - sum_over_time(up{job="prometheus"}[7d]) * 15 / 604800
这在技术上是可行的,但取决于刮擦间隔,在我的例子中是 15 秒。我似乎找不到从普罗米修斯的配置中获取所述间隔的方法,所以我必须将其硬编码到查询中。
我还尝试找到获取工作的所有开始和结束时间的方法,但到目前为止无济于事。
解决方案
干得好。不要问。(o:
avg_over_time(
(
sum without() (up{job="prometheus"})
or
(0 * sum_over_time(up{job="prometheus"}[7d]))
)[7d:5m]
)
一点一点地解释一下:
sum without() (up{job="prometheus"})
:采用up
指标(该sum without()
部分用于摆脱指标名称,同时保留所有其他标签);0 * sum_over_time(up{job="prometheus"}[7d])
up{job="prometheus"}
:为过去一周看到的每个标签组合生成一个零值向量(例如,如果您有多个 Prometheus 实例);or
两者结合在一起,因此您可以在可用的情况下获得实际值,在缺失的情况下获得零;[7d:5m]
:PromQL 子查询,生成一个跨越 7 天的范围向量,基于其前面的表达式,分辨率为 5 分钟;avg_over_time
: 取指标随时间变化的平均值,up
默认填零,如果缺失。
您可能还想在and sum_over_time(up{job="prometheus"}[7d]
该表达式的末尾添加一个,以便仅获得过去 7 天中某个时间点存在的标签组合的结果。否则,由于 7 天范围和 7 天子查询的组合,您将获得前 14 天所有组合的结果。
无论如何,这不是一个有效的查询,但它不需要您将抓取间隔硬编码到查询中。按照要求。(o:
推荐阅读
- python - Python 导入模块名称的 VS Code 编辑器颜色自定义
- javascript - Javascript - 从回调 javascript 函数返回值并在下一个回调函数中使用它
- javascript - 创建 React App 不从“react”转换导入 React
- python - 如何在 Fast API 中使用具有简单功能的依赖注入?
- windows - 将本地 PowerShell 脚本内容从 terraform 文件夹发送到适用于 Windows 的自定义脚本扩展
- android - 如何在 android 中使用 kotlin 制作这样的视图
- python - 更新 postgresql 中的 jsonb 列
- react-native - 容器不想全屏显示
- android - 让用户在特定条件下再上传一篇文章(kotlin list count)
- powershell - 如何从 azure devops 的特定存储库中批量删除分支?