Prometheus yaml 文件中的变量替换

Posted

技术标签:

【中文标题】Prometheus yaml 文件中的变量替换【英文标题】:Variable substitution in Prometheus yaml file 【发布时间】:2019-11-21 16:14:32 【问题描述】:

我正在使用给定的配置将 Prometheus 与 Thanos 一起部署:

global:
  scrape_interval: 15s  # By default, scrape targets every 15 seconds.

 # Attach these labels to any time series or alerts when communicating with
 # external systems (federation, remote storage, Alertmanager).
 external_labels:
   monitor: %%CLUSTER%%
   replica: $(HOSTNAME)

我从 Thanos 示例文档中得到了这个,但我无法完成这个工作。 "%%CLUSTER%% 给出 "cannot start with the given token" 错误,而 HOSTNAME 替换永远不会发生。

我在这个问题上读到不支持变量替换,但 Thanos 文档另有说明。 https://github.com/prometheus/prometheus/issues/2357

还有其他方法可以实现吗?

【问题讨论】:

【参考方案1】:

更新:

看起来 Thanos 开箱即用。 我们必须配置 Thanos 以监视具有此模板化变量的配置文件并将输出生成到目录。然后 Prometheus 选择这个文件作为它的配置文件。该文件将包含来自 Thanos sidecar 的“替换值”。

【讨论】:

目前尚不清楚您要实现什么,但您最初的问题失败了,不是因为这些是 Thanos 的一些特殊模板变量,而是因为它们应该被 github.com/improbable-eng/thanos/blob/… 的教程设置脚本替换。 我认为灭霸也将其设置为边车的一部分。因为,当我将标签指定为 '$(HOSTNAME)' 并将该配置文件指向 sidecar 的重新加载器配置时,它会自动将其替换为输出文件中的 pod 名称。如果我理解有误,请告诉我!【参考方案2】:

从 Prometheus 2.27 开始就有一种标准的方法。

见disabled_features

--enable-feature=expand-external-labels

根据当前环境变量的值替换external_labels值中的$var$var。对未定义变量的引用被空字符串替换。

还有这个replyroidelaplui

【讨论】:

以上是关于Prometheus yaml 文件中的变量替换的主要内容,如果未能解决你的问题,请参考以下文章

接口自动化测试:yaml文件中变量替换

替换 SVG 文档中的变量(在 YAML 中外部定义)

prometheus动态刷新rule

批处理将文本中的变量名替换为变量值并删除定义赋值语句

Google Cloud Build 不会替换 cloudbuild.yaml 的机密部分中的值

helm Prometheus values.yaml 的 alertmanager.yml 部分中的 external_labels 配置出错