prometheus - 从原始 Prometheus 规则文件创建一个 prometheus-operator `PrometheusRule` (CRD)?

标签 prometheus prometheus-operator

像这样的 Prometheus 规则文件:

groups:
- name: ./example.rules
  rules:
  - alert: ExampleAlert
    expr: vector(1)

Kubernetes prometheus-operator 需要一个额外的 yaml 配置数据层,如下所示:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  creationTimestamp: null
  labels:
    prometheus: example
    role: alert-rules
  name: prometheus-example-rules
spec:
  groups:
  - name: ./example.rules
    rules:
    - alert: ExampleAlert
      expr: vector(1)

对于使用前一种原始 Prometheus 规则格式的文件,我可以使用 Prometheus promtool运行单元测试。 (见下面的链接3)

对于使用后一种扩展 PrometheusRule 格式的文件,我可以使用 kubectl apply -f prometheus_rule_file.yaml将规则加载到我的 prometheus-operator 安装中。

我想以这些文件格式之一编写和维护规则,并且能够在 promtool 的单元测试系统中使用相同的规则文件,并将相同的规则加载到 prometheus-operator 安装中。我看不出有什么简单的方法可以做到这一点。

有没有办法可以使用原始 Prometheus 规则格式制定规则并将其加载到 prometheus-operator PrometheusRule 中,而无需维护单独的冗余 yaml 文件,也无需编写自定义工具来转换它?
  • https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
  • https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md
  • https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/
  • 最佳答案

    我让它与 一起工作的方式 Helm 是创建一个单独的图表并将规则文件与图表文件一起放置。这意味着您需要独立部署它们,也许这就是您的意图。

    脚步

  • 创建 Helm chart :helm create prometheus-rules
  • 创建 rules目录并将 prometheus 规则文件放在该目录中。
  • 删除 templates/ 中所有不需要的 yaml 文件目录
  • 创建一个新的模板文件 templates/prometheus-rules.yaml
  • 下面插入示例:
  •     apiVersion: v1
        kind: List
        items:
        {{- $root := .Files }}
        {{- range $path, $bytes := $root.Glob "rules/**.yaml" }}
          - apiVersion: "monitoring.coreos.com/v1"
            kind: PrometheusRule
            metadata:
              name: prometheus-rules-{{ $path | base }}
              labels:
                app: prometheus-operator
            spec:
              groups:
        {{ $root.Get $path | indent 8 }}
        {{- end}}
    

    注意 :一件棘手的事情是要注意 prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues安装 prometheus-operator chart 时的值。它只会加载与 prometheus-operator 期间安装的标签相同的规则。您可以通过在安装 prometheus-operator 时将其设置为 false 来解决这个问题。见 ruleSelector logic更多细节。

    关于prometheus - 从原始 Prometheus 规则文件创建一个 prometheus-operator `PrometheusRule` (CRD)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414695/

    相关文章:

    kubernetes - 如何配置Helm在kubernetes上安装的alertmanager?

    kubernetes - prometheus-postgres-exporter 将指标添加到 bitnami/kube-prometheus

    monitoring - prometheus 将一个 NaN 值结果求和为 NaN。如何避免?

    histogram - 将 Grafana 直方图与 Prometheus Bucket 结合使用

    spring-boot - Spring Boot REST 方法中的 Micrometer @Timed 和 Prometheus 错误

    kubernetes - prometheus-adapter 未正常运行

    prometheus - 使用警报管理器将数据发送到外部 API

    jenkins - 如何使用Prometheus运算符取消Jenkins指标

    kubernetes - 普罗米修斯使用多个目标

    python - 如何更新计数器 : set new value after avery request, 不将新值增加到以前的值?