文章目录
- 阅读提示
- 一. prometheus 启用告警功能
- 二. rules 规则
- 1. 什么是 [promQL](https://prometheus.io/docs/prometheus/latest/querying/basics/)
- 2. rules 的组成
- 3. 告警逻辑是怎么样
- 4. 告警语句解析
- 5. 常用的告警语句及其含义
阅读提示
- 阅读本文,假设你仅仅安装了 prometheus ,并且简单设置了一个 node_exporter
- 适合不了解 prometheus 的查询语法,却对语法比较感兴趣
- 本文主要讲解通用的一些 告警规则
一. prometheus 启用告警功能
- prometheus 本身没有告警功能,需要额外安装一个 alertmanager
- 下面是简要步骤,
# 注意替换 xxxx ,填写发送邮箱地址,用户名,密码,收件邮箱地址
1. cat > /root/config.yml << EOD
global:
resolve_timeout: 5m
smtp_from: 'xxxxxx@163.com'
smtp_smarthost: 'smtp.163.com:465'
smtp_auth_username: 'xxxx@163.com'
smtp_auth_password: 'xxxxx'
smtp_require_tls: false
smtp_hello: '163.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'xxxxx@163.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
EOD
2. docker run -d -p '9093:9093' --name alertmanager -v "/root/config.yml:/etc/alertmanager/config.yml" bitnami/alertmanager:latest
3. vim /root/node-status.rules
groups:
- name: node-up
rules:
- alert: node-up
expr: count(up == 0) > 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
4. vi prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 1.1.1.1:9093
rule_files:
- "/root/*.rules"
5. 重启一下prometheus,或者热加载一下
感觉每次都会少写一个 e,prometheus 写成 promethus,吐血
- 下面是成功的示例,错了的话,看下日志,检查一下配置
二. rules 规则
1. 什么是 promQL
- QL 是 query language 的缩写,也就是 Prometheus的 查询语言
- 基础语法
- 属性值{label1=value1,label2=value2}
- 函数(属性值{label1=value1,label2=value2}) / 100
- 函数(函数(属性值{label1=value1,label2=value2}[5m])) / 100
- 函数(函数(属性值{label1=value1,label2=value2}[5m])) by (name) / 100
- 属性值{label1=value1,label2=value2} / ignoring(label2) 属性值2
- 查询语法
- 聚合函数(sum,min,max,avg,group)
- 正则表达式 (=~, !~)
- group by(搭配聚合函数使用)
- (算术计算)加减乘除,余商,幂运算
- 条件判断(==, !=, <=, < , >, >=)
- 逻辑筛选 (and, or, unless)
- unless 有点像 集合中的并集
- [5m] 表示最近 5分钟之内的
- 属性与属性之间进行运算
- 4种数据类型
- counter
- gauge
- Histogram
- summary
- 更多细节请访问官网
2. rules 的组成
groups:
- name: node-up # 告警分组名称
rules: # 规则列表
- alert: node-up # 具体告警名称
expr: count(up == 0) > 0 # 告警逻辑(触发告警条件)
for: 15s # 告警持续多久,状态改变,状态达到 firing时,发送告警
labels: # 告警属性
severity: 1
team: node
annotations: # 告警模板
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
3. 告警逻辑是怎么样
- expr: count(up == 0) > 0, 即 当语句
count(up == 0) > 0
为真时,触发告警
4. 告警语句解析
- expr: count(up == 0) > 0
- up 是 prometheus 监控各种instance 的数据,up == 0, 表示down的instance,up == 1 表示 up 的instance
- count(up == 0) 表示down的instance的总数,> 0 表示只要有一个或一个以上的instance挂了,就会触发告警
5. 常用的告警语句及其含义
- instance 挂了 触发告警
- count(up == 0) > 0
- 内存使用率超过 0.7,需要安装 node-exporter
- (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.7
- 下载速度超过 20KB, 需安装 node-exporter
- max(rate(node_network_transmit_bytes_total[1m])) / 8 > 20000
- 默认所有数据都会携带,job 和 instance 这个两个字段,可以根据这两个字段进行筛选