Kubernetes普罗米修斯法则中变量的定义

zpgglvta  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(2)|浏览(138)

我目前在Kubernetes的PrometheusRule实现如下:(注意,有一个硬编码编号10000000000:

---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  namespace: mytest
  labels:
    team: myteam
  name: myname
spec:
  groups:
  - name: mygroup
    rules:
    - alert: MemoryUsage
      annotations:
        message: MemoryUsage at ec2 {{ $labels.cluster_id }} is {{printf "%.2f" $value}}%.  Threshold is 80%.
      expr: 100 * memory_average{container="XXX"...} / 10000000000 > 80
      for: 20m
      labels:
        severity: warning

问题1:如何定义变量来替换硬编码数字10 000 000 000?即,在PromethusRole中的何处以及如何定义类似的内容:max_memory=10 000 000 000,然后将expr替换为类似下面的内容?

expr: 100 * memory_average{container="XXX"...} / var.max_memory > 80

问题2:我希望max_memory的值对于不同的集群是不同的。在PromethusRole中,我如何用下面的逻辑定义变量?谢谢!

if  {{ $labels.cluster_id }} == "ClusterA":
    max_memory = 10000000000
else If  {{ $labels.cluster_id }} == "ClusterB":
    max_memory = 7000000000
q8l4jmvw

q8l4jmvw1#

你说的是templatizing你的清单。你需要一个模板系统来为你生成这些YAML***,然后***你才能把它们应用到你的集群。
有多种方法可以实现这一点,您可以尝试mustachekustomize作为开始。这些方法将允许您以您描述的方式创建模板,并且当您生成清单时,这些值将被替换,您将拥有可应用于群集的现成清单。
对于更高级的应用程序,您可以查看基于Python的jinja模板系统,这也是ansible用于生成剧本清单的系统。

vsikbqxv

vsikbqxv2#

对于问题1:* 如何定义变量来替换硬编码数字10 000 000 000?即在PromethusRole中的何处以及如何定义类似的内容:max_memory=10 000 000 000,然后将表达式替换为如下形式?*
您可以使用类似下面的方法(如果您使用Helm图表并从Values.yaml文件中获取值)
第一个月

数值,月

内存阈值:任意值
问题2:* 我希望max_memory的值对于不同的集群是不同的。在PromethusRole中,我如何使用下面的逻辑定义变量?谢谢!*
在这里你也可以使用{{ .Values.maxvalue}},如果你的变量是在helm模板文件中定义的,那么使用如下内容-

expr: max_over_time(reloader_last_reload_successful{namespace=~".+", ingress= {{ include "kube-prometheus-stack.operator.fullname" . }} }[5m]) == {{ .Values.nginxValue }}

相关问题