首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node_exporter将不同的group_left内存类型除以总内存

使用node_exporter将不同的group_left内存类型除以总内存
EN

Stack Overflow用户
提问于 2022-01-13 02:13:27
回答 1查看 281关注 0票数 1

我想要为给定的instance创建一个图,显示以下每一个内存消耗的总内存的比例

  • node_memory_MemFree_bytes{instance="$instance"}
  • node_memory_MemAvailable_bytes{instance="$instance"}
  • node_memory_Buffers_bytes{instance="$instance"}
  • node_memory_Cached_bytes{instance="$instance"}

我知道我可以从4个单独的查询中创建一个图,其中每个度量都被node_memory_MemTotal_bytes{instance="$instance"}除以

  • 查询A:node_memory_MemFree_bytes{instance="$instance"} / node_memory_MemTotal_bytes{instance="$instance"}
  • 查询B:node_memory_MemAvailable_bytes{instance="$instance"} / node_memory_MemTotal_bytes{instance="$instance"}
  • 查询C:node_memory_Buffers_bytes{instance="$instance"} / node_memory_MemTotal_bytes{instance="$instance"}
  • 查询D:node_memory_Cached_bytes{instance="$instance"} / node_memory_MemTotal_bytes{instance="$instance"}

我觉得应该有一种更简单的方法来处理group_left,因为每个查询的右侧都是相同的,左手可以简化为一个查询:

  • 左:{__name__=~"node_memory_(MemFree|MemAvailable|Buffers|Cached)_bytes",instance="$instance"}
  • 右:node_memory_MemTotal_bytes{instance="$instance"}

如果我正确地理解了“操作员”文件这篇博客文章,我应该能够在一个查询中使用group_left来完成这个任务。然而,我一直无法做到这一点。

我的推理是,由于方程的左、右有完全相同的标签(不包括__name__ ),所以不需要对group_left操作符使用ignoringon

代码语言:javascript
复制
{__name__=~"node_memory_(MemFree|MemAvailable|Buffers|Cached)_bytes",instance="$instance"}
/
on() group_left node_memory_MemTotal_bytes{instance="$instance"}

这个查询给出了一个错误:

代码语言:javascript
复制
"multiple matches for labels: grouping labels must ensure unique matches"

如果我使用ignoring()on(<labels>)ignoring(<labels>)的任何其他组合,情况也是如此。我无法理解我在这里所缺少的东西,左派和右派之间没有相同的__name__是个问题吗?我是不是不正确地处理这个问题?

在使用函数的Graphite中,这个操作非常简单,当然,我也可以对PromQL做同样的操作。

任何帮助都将不胜感激,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-16 08:39:10

PromQL在匹配二进制运算符(如/ )的左侧和右侧的时间序列之前,先剥去度量名称--参见这些医生。在您的示例中,左侧的时间序列仅通过度量名称不同,因此PromQL看到的序列在左侧有相同的标签集。解决方案是在应用/运算符之前将左侧时间序列的度量名称复制到另一个标签中,然后在/操作期间忽略该标签。这可以通过加入替换函数来完成:

代码语言:javascript
复制
label_join({__name__=~"node_memory_(MemFree|MemAvailable|Buffers|Cached)_bytes",instance="$instance"}, "metric_name", "", "__name__")
/
ignoring(metric_name) group_left() node_memory_MemTotal_bytes{instance="$instance"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70690645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档