【问题标题】:Create a prometheus-operator `PrometheusRule` (CRD) from a raw Prometheus rule file?从原始 Prometheus 规则文件创建 prometheus-operator `PrometheusRule` (CRD)?
【发布时间】:2019-12-16 06:55:52
【问题描述】:

这样的 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 文件,也无需编写自定义工具来转换它?

  1. https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
  2. https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md
  3. https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/

【问题讨论】:

    标签: prometheus prometheus-operator


    【解决方案1】:

    我使用 helm 的方法是创建一个单独的图表并将规则文件与图表文件一起放置。这意味着您需要独立部署它们,也许这就是您想要的。

    步骤

    1. 创建舵图:helm create prometheus-rules
    2. 创建rules目录并将prometheus规则文件放入该目录。
    3. 删除templates/目录下所有不需要的yaml文件
    4. 新建模板文件templates/prometheus-rules.yaml
    5. 在下面插入示例:
        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-operator chart 时要注意prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues 的值。它只会加载与 prometheus-operator 期间安装的标签相同的规则。您可以通过在安装 prometheus-operator 时将其设置为 false 来解决此问题。详情请见ruleSelector logic。

    【讨论】:

    • @PathSeeker 能否分享一个完整的 helm 警报文件示例。
    • @bibincatchme 当然,你可以在这里查看我的完整示例:github.com/pesarkhobeee/The-EKS-the-Prometheus-and-the-Wardrobe/…
    • 此 yaml 文件向我抛出错误,“错误:prometheus-custom-rules/templates/prometheus-rules.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:第 14 行:无法找到预期的 ':'"
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2020-12-09
    • 2019-03-30
    • 2020-10-08
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多