1. 告警模板
yaml
* 告警模板是指在告警中的标签和注解上引用时间序列的标签和样本值的方法;
* 它使用标准的Go模板语法,并暴露一些包含时间序列标签和值的变量;
* 标签引用: {{ $labels.<label_name> }}
* 指标样本值引用: {{ $value }}
* 若要在description注解中引用触发告警的时间序列上的instance和job标签的值,可分别使用{{ $labels.instance }}和{{ $labels.job }};
* 告警模板是指在告警中的标签和注解上引用时间序列的标签和样本值的方法;
* 它使用标准的Go模板语法,并暴露一些包含时间序列标签和值的变量;
* 标签引用: {{ $labels.<label_name> }}
* 指标样本值引用: {{ $value }}
* 若要在description注解中引用触发告警的时间序列上的instance和job标签的值,可分别使用{{ $labels.instance }}和{{ $labels.job }};
2. 告警规则状态
告警规则分为三种
- inactive:无任何报警,一切正常
- pending:已触发阈值,但未满足告警持续时间,也就是在告警规则中写的for,在for规定的时间内触发都不会发送给AlertManager,当for持续时间一过会立即发送给AlertManager
- firing:已触发阈值且满足告警持续时间,告警发送给接收者
3.持久化规则
3.1 添加
- 1.修改配置文件
bash
[root@prometheus-server ~]# vim /etc/prometheus/prometheus.yml
rule_files:
- "rules/node_rules.yml" #指定持久化文件所在路径即可
[root@prometheus-server ~]# vim /etc/prometheus/prometheus.yml
rule_files:
- "rules/node_rules.yml" #指定持久化文件所在路径即可
- 2.刷新配置文件
bash
$curl -XPOST 127.0.0.1:9090/-/reload
$curl -XPOST 127.0.0.1:9090/-/reload
3.2 语法
yaml
groups:
- name: node_rules //持久化查询的名称
interval: 10s //10s刷新一次,如果不设置就是就是全局中的 evaluation_interval 时间
rules: //记录规则清单,一个rules下面可以写多个记录规则
- record: instance:node_cpu:avg_rate5m //持久化记录查询名称
expr: //取值表达式
labels: //定义一个标签
annotations:
summary: "标题"
description: "告警内容"
groups:
- name: node_rules //持久化查询的名称
interval: 10s //10s刷新一次,如果不设置就是就是全局中的 evaluation_interval 时间
rules: //记录规则清单,一个rules下面可以写多个记录规则
- record: instance:node_cpu:avg_rate5m //持久化记录查询名称
expr: //取值表达式
labels: //定义一个标签
annotations:
summary: "标题"
description: "告警内容"
- expr语法
yaml
<metric_name>{<label_name>="<label_value>", ...} <operator> <value>
#解释
<metric_name> 是正在查询的指标的名称
{<label_name>=“<label_value>”, ...} 是查询的可选部分,用于指定应用于筛选指标的标签
<operator> 是一个数学运算符,例如 >、<、== 等
<value> 是使用指定运算符必须将指标与该值进行比较的值
<metric_name>{<label_name>="<label_value>", ...} <operator> <value>
#解释
<metric_name> 是正在查询的指标的名称
{<label_name>=“<label_value>”, ...} 是查询的可选部分,用于指定应用于筛选指标的标签
<operator> 是一个数学运算符,例如 >、<、== 等
<value> 是使用指定运算符必须将指标与该值进行比较的值
文档:
PromQL (Prometheus Query Language)
1.检查语法
bash
promtool check config /etc/prometheus/prometheus.yml
promtool check config /etc/prometheus/prometheus.yml
2.热加载
bash
curl -XPOST 127.0.0.1:9090/-/reload
curl -XPOST 127.0.0.1:9090/-/reload
3.3 案例
1.cpu
1.创建持久化文件
bash
cd /etc/prometheus/
mkdir rules
vim rules/node_rules.yml
groups:
- name: node_rules
interval: 10s
rules:
- record: instance:node_cpu:avg_rate5m
expr: 100 - avg (irate(node_cpu_seconds_total{job="centos7-node",mode="idle"}[5m])) by (instance) * 100
labels:
metric_type: aggregation
cd /etc/prometheus/
mkdir rules
vim rules/node_rules.yml
groups:
- name: node_rules
interval: 10s
rules:
- record: instance:node_cpu:avg_rate5m
expr: 100 - avg (irate(node_cpu_seconds_total{job="centos7-node",mode="idle"}[5m])) by (instance) * 100
labels:
metric_type: aggregation
- 解释
yaml
groups:
- name: node_rules //持久化查询的名称
interval: 10s //10s刷新一次,如果不设置就是就是全局中的 evaluation_interval 时间
rules: //记录规则清单,一个rules下面可以写多个记录规则
- record: instance:node_cpu:avg_rate5m //持久化记录查询名称
expr: //取值表达式
labels: //定义一个标签
groups:
- name: node_rules //持久化查询的名称
interval: 10s //10s刷新一次,如果不设置就是就是全局中的 evaluation_interval 时间
rules: //记录规则清单,一个rules下面可以写多个记录规则
- record: instance:node_cpu:avg_rate5m //持久化记录查询名称
expr: //取值表达式
labels: //定义一个标签
record
规则中的定义,Prometheus
会在后台完成 expr
中定义的 PromQL
表达式周期性运算(每隔10s一次),以 instance
为维度使用 avg
聚合运算符,计算函数 irate
对 node_cpu_seconds_total
指标区间 5m
内的CPU使用率,并且将计算结果保存到新的时间序列 instance:node_cpu:avg_rate5m
中, 同时还可以通过 labels
为样本数据添加额外的自定义标签,但是要注意的是这个 Lables
一定存在当前表达式 Metrics
中
2.mem
1.增加内存持久化配置
yaml
vim rules/node_rules.yml
groups:
- name: node_rules
interval: 10s
rules:
- record: instance:node_cpu:avg_rate5m
expr: 100 - avg(irate(node_cpu_seconds_total{job="centos7-node"}[5m])) by (instance) * 100
labels:
metric_type: aggregation
- record: instance:node_mem:avg_rate5m
expr: (node_memory_MemTotal_bytes-(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes))/node_memory_MemTotal_bytes * 100
labels:
metric_type: aggregation
vim rules/node_rules.yml
groups:
- name: node_rules
interval: 10s
rules:
- record: instance:node_cpu:avg_rate5m
expr: 100 - avg(irate(node_cpu_seconds_total{job="centos7-node"}[5m])) by (instance) * 100
labels:
metric_type: aggregation
- record: instance:node_mem:avg_rate5m
expr: (node_memory_MemTotal_bytes-(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes))/node_memory_MemTotal_bytes * 100
labels:
metric_type: aggregation
2.加载配置
bash
curl -XPOST 127.0.0.1:9090/-/reload
curl -XPOST 127.0.0.1:9090/-/reload
3.down
yaml
groups: //定义一个告警规则组
- name: general.rules //组名,可以将同一类型的报警放到一个分组中
rules: //定义告警规则,可以有多个
- alert: 主机宕机 //告警名称,也就是告警信息的标题,一个alert代表一个告警规则
expr: up == 0 //表达式,根据表达式的值进行匹配
for: 5m //报警收到后多长时间后发送报警信息
labels: //定义标签
serverity: error //告警级别,有warning、error,critical等
annotations: //定义告警内容
summary: "主机 {{ $labels.instance }} 停止工作" //消息内容,$labels.instance就是监控项中的标签变量
description: "{{ $labels.instance }} job {{ $labels.job }} 已经宕机5分钟以上!" //详细描述
groups: //定义一个告警规则组
- name: general.rules //组名,可以将同一类型的报警放到一个分组中
rules: //定义告警规则,可以有多个
- alert: 主机宕机 //告警名称,也就是告警信息的标题,一个alert代表一个告警规则
expr: up == 0 //表达式,根据表达式的值进行匹配
for: 5m //报警收到后多长时间后发送报警信息
labels: //定义标签
serverity: error //告警级别,有warning、error,critical等
annotations: //定义告警内容
summary: "主机 {{ $labels.instance }} 停止工作" //消息内容,$labels.instance就是监控项中的标签变量
description: "{{ $labels.instance }} job {{ $labels.job }} 已经宕机5分钟以上!" //详细描述
4.规则文件默认结构
4.1 结构
yaml
groups:
- name: <group_name>
rules:
- alert: <alert_name>
expr: <PromQL_expression>
for: <duration>
labels:
<label_name>: <label_value>
annotations:
<annotation_name>: <annotation_value>
groups:
- name: <group_name>
rules:
- alert: <alert_name>
expr: <PromQL_expression>
for: <duration>
labels:
<label_name>: <label_value>
annotations:
<annotation_name>: <annotation_value>
参数 | 说明 |
---|---|
groups | 它包含一个或多个规则组。规则组允许您按逻辑组织警报规则 |
name | 指定规则组的名称 |
rules | 它包含在组中定义的一个或多个警报规则 |
alert | 定义警报的名称。每个警报规则在规则文件中必须具有唯一的名称 |
expr | 它表示评估触发警报的条件的 PromQL 表达式。PromQL(Prometheus Query Language,Prometheus 查询语言)用于查询和分析 Prometheus 采集的时间序列数据 |
for | 它指定在触发警报之前,PromQL 表达式定义的条件必须为 true 的持续时间 |
labels | 它包括附加到警报的其他元数据,例如严重性、服务或实例 |
annotations | 它包含有关警报的描述性信息,例如摘要或描述。注释有助于为警报系统提供更多上下文,并有助于更好地理解和处理警报 |
可以参考: