prometheus+alertmanager+webhook实现服务器监控短信告警

634 阅读2分钟

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

image.png

1.4查看规则

登陆普罗米修斯点击Alerts可以看到规则已生效

image.png

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/ 查看运行状态

image.png

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 代码仓库:

gitee.com/qlglg123/sm…

4.3代码结构

image.png

4.4短信提示

image.png

参考文档:

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…