1.设置prometheus告警规则
1.1修改prometheus.yml文件
prometheus.yml 设置告警规则文件为rules目录下得所有_rules.yml结尾的文件
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "rules/*_rules.yml"
# - "second_rules.yml"
1.2创建告警规则
增加规则文件host_rules.yml 设置节点、cpu、内存、数据盘告警规则
groups:
# 报警组组名称
- name: hostStatsAlert
#报警组规则
rules:
- alert: HostDown
expr: up{job=~"node-exporter|prometheus|grafana|alertmanager"} == 0
for: 0m
labels:
severity: critical
annotations:
title: 'Instance down'
description: "主机: 【{{ $labels.instance }}】has been down for more than 1 minute"
#告警名称,需唯一
- alert: hostCpuUsageAlert
#promQL表达式
expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.95
#满足此表达式持续时间超过for规定的时间才会触发此报警
for: 1m
labels:
#严重级别
severity: page
annotations:
#发出的告警标题
summary: "实例 {{ $labels.instance }} CPU 使用率过高"
#发出的告警内容
description: "实例{{ $labels.instance }} CPU 5五分钟内CPU使用率超过 95% (当前值为: {{ $value }})"
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100 > 90
for: 1m
labels:
severity: page
annotations:
summary: "实例 {{ $labels.instance }} 内存使用率过高"
description: "实例 {{ $labels.instance }} 内存使用率大于 90% (当前值为: {{ $value }})%"
- alert: HostFileSystemUsage
expr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs",mountpoint!~".*tmp|.*boot" }/node_filesystem_size_bytes{fstype=~"ext4|xfs",mountpoint!~".*tmp|.*boot" }))*100 > 96
for: 1m
annotations:
title: "磁盘空间剩余不足"
description: "主机: 【{{ $labels.instance }}】 {{ $labels.mountpoint }}分区使用率超过96%, 当前值使用率:{{ $value }}%"
labels:
severity: 'warning'
1.3检查prometheus配置文件并重启
./promtool check config prometheus.yml
ps -ef |grep prometheus
kill -hup 604436
1.4查看规则
登陆普罗米修斯点击Alerts可以看到规则已生效
2.安装alertmanager
2.1安装alertmanager
下载地址: prometheus.io/download/
alertmanager会定义一个基于标签匹配规则的路由树,用以接收到报警后根据不同的标签匹配不同的路由,来将报警发送给不同的receiver。如果定义一个路由route则需要接收并处理所有的报警,如果需要区分不同的报警发送给不同的receiver,则需要配置多个子级route来处理不同的报警,而根route此时必须能够接收处理所有的报警。
2.2 设置规则文件
使用webhook方式,alertmanager会给配置的webhook地址http://127.0.0.1:8060/demo发送一个http类型的post请求,参数为json字符串(字符串类型)
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:8060/demo'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
2.3 设置启动脚本 start.sh
nohup ./alertmanager > alertmanager.out 2>&1 &
2.4查看启动
查看启动进程
ps -ef | grep alertmanager
访问http://ip:9093/ 查看运行状态
3.prometheus关联alertmanager
3.1 prometheus.yml文件增加Alertmanager配置
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.119.139:9093
4.编写短信发送处理代码
4.1 代码说明
目的是处理Alertmanager发送的预警json信息,处理解析json提示信息进行短信预警发送
4.2 代码仓库:
4.3代码结构
4.4短信提示
参考文档:
prometheus+alertmanager+webhook实现自定义监控报警系统_alertmanager webhook自定义: blog.csdn.net/bluuusea/ar…
Prometheus常用告警规则_promethus alert expr:blog.csdn.net/wangshui898…
prometheus使用 (八) 小结--综合查询_promethus查询container的磁盘使用率-CSDN博客:blog.csdn.net/qq_42883074…