针对PrometheusRule编写,我们可以从网上找别人已经写好的(避免重复造轮子),也可以从Grafana上的Dashboard进行拷贝,并针对自己需求进行相应的修改。

下面针对Mysql进行举例说明:

假设我们想通过mysql_up监测 MySQL 数据库实例是否正常运行

1.打开Mysql的Dashboard,点击【Edit】

PrometheusRule怎么写-1

PrometheusRule怎么写-2

2.复制相关PromQL语句

mysql_up{account=~"$account",group=~"$group"}

在此基础做相应修改

mysql_up{}

3.在Prometheus上测试即可

mysql_up{} != 0

PrometheusRule怎么写-3

4.告警规则所需要的expr已经完成,接下来创建PrometheusRule即可

[root@k8s-master01 ~]# vim  mysql-rules.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app.kubernetes.io/component: exporter
    app.kubernetes.io/name: mysql-exporter
    prometheus: k8s
    role: alert-rules
  name: mysql
  namespace: monitoring
spec:
  groups:
  - name: mysql-exporter
    rules:
    - alert: mysqlDown
      annotations:
        description: MySQL实例:{{ $labels.instance }} 挂了
        summary: MySQL无法连接
      expr: mysql_up != 1
      for: 1m
      labels:
        level: high
        severity: critical
        type: database

上面参数说明:

  • apiVersion: 这个字段指定了使用的 Kubernetes API 版本,monitoring.coreos.com/v1 表示使用了 Prometheus Operator 中的自定义资源版本
  • kind: 这里指定了自定义资源的类型,即 PrometheusRule
  • metadata: 这里是一些元数据,比如标签(labels)、名称(name)、命名空间(namespace)等,用于对该资源进行标识和分类
  • spec: 这里定义了实际的规则配置
  • groups: 这个字段是一个规则组(RuleGroup),它可以包含一个或多个相关的规则。
  • name: 这里定义了规则组的名称为 "mysql-exporter"。
  • rules: 这里是规则组包含的规则列表。
  • alert: 这是规则的名称,即 "mysqlDown",用于标识规则。
  • annotations: 这里定义了一些注释,包括告警的描述和摘要信息。
  • expr: 这是一个 PromQL 表达式,用于定义告警的触发条件。在这个示例中,它检查mysql_up不等于1。
  • for: 这是规则的持续时间,即在满足触发条件持续 1 分钟后才触发告警。
  • labels: 这里定义了一些标签,用于对告警进行分类和标识。