文章目录

  • 阅读提示
  • 一. prometheus 启用告警功能
  • 二. rules 规则
  • 1. 什么是 [promQL](https://prometheus.io/docs/prometheus/latest/querying/basics/)
  • 2. rules 的组成
  • 3. 告警逻辑是怎么样
  • 4. 告警语句解析
  • 5. 常用的告警语句及其含义


阅读提示

  1. 阅读本文,假设你仅仅安装了 prometheus ,并且简单设置了一个 node_exporter
  2. 适合不了解 prometheus 的查询语法,却对语法比较感兴趣
  3. 本文主要讲解通用的一些 告警规则

一. prometheus 启用告警功能

  1. prometheus 本身没有告警功能,需要额外安装一个 alertmanager
  2. 下面是简要步骤,
# 注意替换 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,吐血

  1. 下面是成功的示例,错了的话,看下日志,检查一下配置

使用prometheus进行业务告警java prometheus告警模板_linux

二. rules 规则

1. 什么是 promQL

  1. QL 是 query language 的缩写,也就是 Prometheus的 查询语言
  2. 基础语法
    • 属性值{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
  3. 查询语法
    • 聚合函数(sum,min,max,avg,group)
    • 正则表达式 (=~, !~)
    • group by(搭配聚合函数使用)
    • (算术计算)加减乘除,余商,幂运算
    • 条件判断(==, !=, <=, < , >, >=)
    • 逻辑筛选 (and, or, unless)
      • unless 有点像 集合中的并集
    • [5m] 表示最近 5分钟之内的
    • 属性与属性之间进行运算
  4. 4种数据类型
    • counter
    • gauge
    • Histogram
    • summary
  5. 更多细节请访问官网

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. 告警逻辑是怎么样

  1. expr: count(up == 0) > 0, 即 当语句count(up == 0) > 0为真时,触发告警

4. 告警语句解析

  1. expr: count(up == 0) > 0
  2. up 是 prometheus 监控各种instance 的数据,up == 0, 表示down的instance,up == 1 表示 up 的instance
  3. count(up == 0) 表示down的instance的总数,> 0 表示只要有一个或一个以上的instance挂了,就会触发告警

5. 常用的告警语句及其含义

  1. instance 挂了 触发告警
    • count(up == 0) > 0
  2. 内存使用率超过 0.7,需要安装 node-exporter
    • (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.7
  3. 下载速度超过 20KB, 需安装 node-exporter
    • max(rate(node_network_transmit_bytes_total[1m])) / 8 > 20000
  4. 默认所有数据都会携带,job 和 instance 这个两个字段,可以根据这两个字段进行筛选