You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PromQL同时获取delta结果与当前值的优化及告警模板访问问题

PromQL优化与告警模板访问别名值方案

一、更优实现方式

你当前用union组合两个查询的方式可行,可从标签一致性和告警规则简洁性两个维度优化:

1. 对齐标签,减少序列歧义

你的sum查询仅保留cluster标签,而delta查询带有environment、instance等大量标签。调整sum的分组标签,让两个序列的核心标签匹配,避免union后序列关联混乱:

union(
  delta(elasticsearch_cluster_health_number_of_nodes[1m]) < 0, 
  alias(
    sum(elasticsearch_cluster_health_number_of_nodes[1m]) by(cluster, environment, namespace), 
    "current_state"
  )
)

2. 告警规则分离查询(推荐)

如果核心需求是告警中附带当前节点数,无需用union合并查询。将告警触发条件保留为原delta查询,在annotations中直接补充当前节点数:

groups:
- name: elasticsearch-alerts
  rules:
  - alert: ElasticsearchNodeCountDecreased
    expr: delta(elasticsearch_cluster_health_number_of_nodes[1m]) < 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "集群 {{ $labels.cluster }} 节点数减少"
      delta: "节点数变化:{{ $value }}"
      current_nodes: "当前节点数:{{ query \"sum(elasticsearch_cluster_health_number_of_nodes) by(cluster)\" | first | value }}"

这种方式逻辑清晰:告警表达式负责判断触发条件,annotations补充业务上下文,避免查询逻辑混杂。

3. VictoriaMetrics专属优化

如果你使用VictoriaMetrics,可通过vm_label_add将当前节点数作为附加标签关联到delta结果上,避免生成独立序列:

delta(elasticsearch_cluster_health_number_of_nodes[1m]) < 0
| vm_label_add(
  "current_nodes", 
  "{{ sum(elasticsearch_cluster_health_number_of_nodes) by(cluster) | first | value }}"
)

触发告警的序列会直接带上current_nodes标签,模板中可通过{{ $labels.current_nodes }}直接访问。

二、告警模板中访问别名查询的值

用union + alias时,别名会被设为序列的__name__标签。在模板中可遍历$values变量,通过匹配__name__标签提取对应值:

示例模板片段

{{ define "elasticsearch-node-decrease" }}
### 告警详情
- 告警名称:{{ .Alert.Name }}
- 集群:{{ .Labels.cluster }}
- 节点数变化:{{ range $v := .Values }}{{ if ne $v.Labels.__name__ "current_state" }}{{ $v.Value }}{{ end }}{{ end }}
- 当前节点数:{{ range $v := .Values }}{{ if eq $v.Labels.__name__ "current_state" }}{{ $v.Value }}{{ end }}{{ end }}
{{ end }}
  • 遍历.Values所有返回序列,用eq $v.Labels.__name__ "current_state"筛选别名对应的序列,提取其值。
  • 用ne排除别名序列,可获取delta的变化值(delta序列的__name__为自动生成的delta_elasticsearch_cluster_health_number_of_nodes)。

注意事项

  • 确保alias设置的名称唯一,避免与其他指标名冲突。
  • 多集群场景下,sum查询需保留cluster等核心标签,确保模板能匹配对应集群的节点数。

内容的提问来源于stack exchange,提问作者Igor Hrcek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:35:34