【问题标题】:sum of Dynamic fields动态字段的总和
【发布时间】:2020-11-23 09:15:31
【问题描述】:

我需要按 VM 名称前缀总结我的 VM。我所有的虚拟机都有像“customername_IIS01”、“customername_IIS02”、“customernameN_SQL”这样的前缀。我需要编写一个 promQL 查询来按客户名称汇总所有客户的指标。但当然,当有新客户来时,它需要通过查询得到它的名字。

示例: 这是我需要收集的指标。我可以通过 "vmware_vm_cpu_usagemhz_average{vm_name=~"customer01.+"}" 获得它,客户可以达到 100 或更多,并且它正在动态变化。 promQL 获取此信息的正确方法是什么?

【问题讨论】:

    标签: prometheus promql


    【解决方案1】:

    您可以解析标签以创建一个附加标签customer,其中包含从前缀推断出的客户名称。

    这可以在 Prometheus 配置中使用 #metric_relabel_configs 来完成:

    metric_relabel_configs:
      - source_labels: [vm_name]
        regex: ^([^.]+)\..*$
        target_label: customer
        replacement: $1
    

    如果您无权访问 promteheus 配置,或者出于某种原因您更喜欢在查询时进行配置,您可以使用 label_replace 在查询中创建标签。如果您的查询变得更复杂,它很快就会变得笨拙且难以阅读。

     label_replace({__name__=~"vmware_vm_.*"}, "customer", "$1", "vm_name", "^([^.]+)\..*$")
    

    【讨论】:

    • 我尝试在相关作业定义下添加metric_label_configs。您的正则表达式无法返回所需的数据,但我用 ^([^_\t]+).* 更改了它,然后我在相关指标(vmware_vm_cpu_usagemhz_average)上得到了“客户”。但不是所有值都有“客户”字段,正常吗?
    • 感谢@Michael Doubez,不幸的是,Prometheus 不接受它的正则表达式并给出了错误。 link
    • 你缺少一个 "。我会修正这个表达式。我无法证明这个表达式,这是一个例子 :)。如果值没有标签 vm_name 或者如果模式错误,你会得到一个空值。你必须调整模式。
    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 2012-01-26
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多