Prometheus使用alertmanager实现报警功能(服务器 MYSQL 等)

2022年8月18日

altermanager告警

实现了数据看板、观测后。自然地,当服务指标发生异常现象时,我们应当立即知晓并紧急修复问题,这个时候就需要借助告警系统了。
prometheus天生支持altermanager告警,因此我们来学习下告警是如何配置,如何使用的。

拉取altermanager资源

docker pull prom/alertmanager

配置文件

创建配置目录以及文件

  1. mkdir -p /opt/alertmanager
  2. cd /opt/alertmanager
  3. #创建配置文件
  4. vim alertmanager.yml

alertmanager内容如下:

  1. # 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
  2. global:
  3.   # 告警超时时间
  4.   resolve_timeout: 5m
  5.   # 发送者邮箱地址
  6.   smtp_from: '[email protected]'
  7.   # 邮箱smtp服务器地址及端口
  8.   smtp_smarthost: 'smtp.163.com:25'
  9.   # 发送者邮箱账号
  10.   smtp_auth_username: '[email protected]'
  11.   # 发送者邮箱密码,这里填入第一步中获取的授权码
  12.   smtp_auth_password: 'XBCODMBXMHTNOENJ'
  13.   # 是否使用tls
  14.   smtp_require_tls: false
  15.   smtp_hello: '163.com'
  16. # 路由配置,设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
  17. route:
  18.   # 用于将传入警报分组在一起的标签。
  19.   # 基于告警中包含的标签,如果满足group_by中定义标签名称,那么这些告警将会合并为一个通知发送给接收器。
  20.   group_by: ['alertname']
  21.   # 发送通知的初始等待时间
  22.   group_wait: 30s
  23.   # 在发送有关新警报的通知之前需要等待多长时间
  24.   group_interval: 5m
  25.   # 如果已发送通知,则在再次发送通知之前要等待多长时间,通常约3小时或更长时间
  26.   repeat_interval: 30s
  27.   # 接受者名称
  28.   receiver: '163.email'
  29. # 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式
  30. receivers:
  31. - name: '163.email'
  32.   email_configs:
  33.   # 配置接受邮箱地址
  34.   - to : '[email protected]'
  35. inhibit_rules:
  36.   - source_match:
  37.       severity: 'critical'
  38.     target_match:
  39.       severity: 'warning'
  40.     equal: ['alertname', 'dev', 'instance']

启动服务

docker run -d \
    --name alertmanager \
    -p 9093:9093 \
    -v /opt/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
    prom/alertmanager

浏览器访问,检查服务是否已启动

http://192.168.11.120:9093/

若出现下图表示alertmanager成功启动
在这里插入图片描述

配置告警规则rules

创建告警规则路径

  1. mkdir -p /opt/alertmanager/rules
  2. cd /opt/alertmanager/rules
  3. #创建规则
  4. vi node-up.yml

node-up.yml内容如下:

  1. groups:
  2. - name: node-up
  3.   rules:
  4.   - alert: node-up
  5.     expr: up{job="node-exporter"} == 0
  6.     for: 15s
  7.     labels:
  8.       severity: 1
  9.       team: node
  10.     annotations:
  11.       summary: "{{ $labels.instance }} 已停止运行超过 15s!"

 

expr:up{job=“node-exporter”} == 0表示 服务下线  其中 node-exporter  是 prometheus.yml 文件中定义的  - job_name 修改为自己定义的名称此方式针对特定job Or  去掉大括号的内容表示所有的
for:15s 表示持续15s
annotations.summary 表示提示语

上述配置表示job(node-exporter)下线持续15s,则启动告警
 

配置prometheus配置文件,指定告警路由和规则

vim  /opt/ prometheus/prometheus.yml

...

  1. # Altermanager configuration
  2. alerting:
  3.   alertmanagers:
  4.   - static_configs:
  5.     - targets: ["192.168.11.120:9093"]
  6.  
  7. #指定报警规则文件
  8. rule_files:
  9.    - "/usr/local/alertmanager/rules/*.yml"

注意:rule_files 为容器内路径,所以启动promethus时,还需要将rules文件挂载到prometheus容器中

修改prometheus启动参数

docker run  -d \
  --name prometheus \
  -p 9090:9090 \
  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  -v /opt/alertmanager/rules/:/usr/local/alertmanager/rules/ \
  prom/prometheus
 

这里采用Docker的方式启动,并且配置目录都不是在容器内的 , 所以直接停止源容器或者删除 , 重启启动即可

访问prometheus-rules webui界面

http://192.168.11.120: :9090/rules

若出现以下界面则表示prometheus配置alertmanager成功

 

在这里插入图片描述

测试邮件告警

关闭node-exporter节点进行测试

docker stop node-exporter

在prometheus 的WEBUI界面可以看到产品告警信息

http://192.168.11.120:9090/alerts

首先是penging

在这里插入图片描述

稍等一會将出现报警

在这里插入图片描述

稍等刷新邮箱 查看是否有邮件 , 郵件信息如下:

在这里插入图片描述

启动 node_exporter 可发现状态恢复如下

在这里插入图片描述

其他报警设置 :

服务器状态  CPU  磁盘  内存 等   host.yml  参考Hosts.rules

groups:
- name: Linux
  rules:
  - alert: "-内存报警"
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 内存资源利用率大于 90%"
        value: "当前内存占用率{{ $value }}%"

  - alert: "-CPU报警"
    expr: 100 * (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) > 70
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} CPU报警资源利用率大于 70%"
        value: "当前CPU占用率{{ $value }}%"

  - alert: "-磁盘报警"
    expr: 100 * (node_filesystem_size_bytes{fstype=~"xfs|ext4"} - node_filesystem_avail_bytes) / node_filesystem_size_bytes > 90
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 磁盘报警资源利用率大于 90%,请及时扩容!"
        value: "当前磁盘占用率{{ $value }}%"

  - alert: "-磁盘读取报警"
    expr: sum by (instance) (irate(node_disk_read_bytes_total{device=~"dm-*|sda|"}[2m])) > 1024 * 1024 * 100
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 磁盘读取大于 100MB/s"
        value: "当前磁盘读取{{ $value }}MB/s"

  - alert: "-磁盘写入报警"
    expr: sum by (instance) (irate(node_disk_written_bytes_total{device=~"dm-*|sda|"}[2m])) > 1024 * 1024 * 100
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 磁盘写入大于 100MB/s"
        value: "当前磁盘写入{{ $value }}MB/s"

  - alert: "-下载网络流量报警"
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])) by (instance)) / 60 / 1024 / 2) > 200
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 最近1分钟使用下载流量每秒超过200Mb/s"
        value: "最近1分钟使用下载流量每秒{{ $value }}Mb/s"

  - alert: "上传网络流量报警"
    expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])) by (instance)) / 60 / 1024 / 2) > 200
    for: 60s
    labels:
        severity: warning
    annotations:
        description: "{{ $labels.instance }} 最近1分钟使用上传流量每秒超过 200Mb/s"
        value: "最近1分钟使用上传流量每秒{{ $value }}Mb/s"


#- name: Windows
#  rules:
#  - alert: "-内存报警"
#    expr: 100 - ((windows_os_physical_memory_free_bytes / windows_cs_physical_memory_bytes) * 100) > 60
#    for: 60s
#    labels:
#        severity: warning
#    annotations:
#        description: "{{ $labels.instance }} 内存资源利用率大于 60%"
#        value: "当前内存占用率{{ $value }}%"
#
#  - alert: "-CPU报警"
#    expr: 100 - (avg by (instance) (irate(windows_cpu_time_total{mode="idle"}[2m])) * 100) > 60
#    for: 60s
#    labels:
#        severity: warning
#    annotations:
#        description: "{{ $labels.instance }} CPU报警资源利用率大于 60%"
#        value: "当前CPU占用率{{ $value }}%"
#
#  - alert: "-磁盘报警"
#    expr: 100.0 - 100 * ((windows_logical_disk_free_bytes / 1024 / 1024 ) / (windows_logical_disk_size_bytes / 1024 / 1024)) > 85
#    for: 60s
#    labels:
#        severity: warning
#    annotations:
#        description: "{{ $labels.instance }} 磁盘报警资源利用率大于 85%,请及时扩容!"
#        value: "当前磁盘占用率{{ $value }}%"

https://blog.csdn.net/wangshui898/article/details/120321640?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-120321640-blog-117441154.pc_relevant_multi_platform_whitelistv4eslandingctr2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-120321640-blog-117441154.pc_relevant_multi_platform_whitelistv4eslandingctr2&utm_relevant_index=1

 

 

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注