针对PrometheusRule编写,我们可以从网上找别人已经写好的(避免重复造轮子),也可以从Grafana上的Dashboard进行拷贝,并针对自己需求进行相应的修改。
下面针对Mysql进行举例说明:
假设我们想通过mysql_up监测 MySQL 数据库实例是否正常运行
1.打开Mysql的Dashboard,点击【Edit】


2.复制相关PromQL语句
mysql_up{account=~"$account",group=~"$group"}
在此基础做相应修改
mysql_up{}
3.在Prometheus上测试即可
mysql_up{} != 0

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