首页 > 其他分享 >prometheus 结合 Alertmanager 实现告警通知

prometheus 结合 Alertmanager 实现告警通知

时间:2023-01-08 23:46:56浏览次数:63  
标签:alertmanager name smtp prometheus Alertmanager usr 告警

  Alertmanager

   prometheus-server 触发一条告警的过程:

   prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

 

  分组(group): 将类似性质的警报合并为单个通知,比如网络通知、主机通知、服务通知。

  静默(silences): 是一种简单的特定时间静音的机制,例如:服务器要升级维护可以先设置这个时间段告警静默。

  抑制(inhibition): 当警报发出后,停止重复发送由此警报引发的其他警报即合并一个故障引起的多个报警事件,可以消除冗余告警

 

  安装 alertermanager:

  prometheus官网:https://prometheus.io/download/#alertmanager

  Github地址:https://github.com/prometheus/alertmanager

root@haproxyB:/usr/local# tar xf alertmanager-0.24.0.linux-amd64.tar.gz
root@haproxyB:/usr/local# ln -s alertmanager-0.24.0.linux-amd64 alertmanager

 

  创建service启动文件

root@haproxyB:/usr/local/alertmanager\# vim /etc/systemd/system/alertmanager.service
[Unit]
Description=Prometheus alertmanager
After=network.target

[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file="/usr/local/alertmanager/alertmanager.yml"

[Install]
WantedBy=multi-user.target

 

  启动alertmanager

systemctl daemon-reload && systemctl enable alertmanager.service && systemctl start alertmanager.service 

 

  alertermanager.yaml 配置文件解析:

global:
  smtp_from: #发件人邮箱地址
  smtp_smarthost: #邮箱 smtp 地址。
  smtp_auth_username: #发件人的登陆用户名,默认和发件人地址一致。
  smtp_auth_password: #发件人的登陆密码,有时候是授权码。
  smtp_require_tls: #是否需要 tls 协议。默认是 true。
  
  wechart_api_url: #企业微信 API 地址。
  wechart_api_secret: #企业微信 API secret
  wechat_api_corp_id: #企业微信 corp id 信息。
  resolve_timeout: 60s #当一个告警在 Alertmanager 持续多长时间未接收到新告警后就标记告警状态为resolved(已解决/已恢复)。

 

   具体配置详解:

vim /usr/local/alertmanager/alertmanager.yml 
global:
  resolve_timeout: 1m
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: '[email protected]'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'ptiizujqboiydejf'
  smtp_hello: '@qq.com'
  smtp_require_tls: false
  
route:
  group_by: [alertname] #通过 alertname 的值对告警进行分类,- alert: 物理节点 cpu 使用率
  group_wait: 10s #一组告警第一次发送之前等待的延迟时间,即产生告警后延迟 10 秒钟将组内新产生的消息一起合并发送(一般设置为 0 秒 ~ 几分钟)。
  group_interval: 2m #一组已发送过初始通知的告警接收到新告警后,下次发送通知前等待的延迟时间(一般设置为 5 分钟或更多)。
  repeat_interval: 2m #一条成功发送的告警,在最终发送通知之前等待的时间(通常设置为 3 小时或更长时间)。
#间隔示例:
  #group_wait: 10s #第一次产生告警,等待 10s,组内有告警就一起发出,没有其它告警就单独发出。
  #group_interval: 2m #第二次产生告警,先等待 2 分钟,2 分钟后还没有恢复就进入 repeat_interval。
  #repeat_interval: 5m #在最终发送消息前再等待 5 分钟,5 分钟后还没有恢复就发送第二次告警。
  
  receiver: default-receiver #其它的告警发送给 default-receiver
  routes:     #将 critical 的报警发送给 myalertname
  - receiver: myalertname
  group_wait: 10s
  match_re:
    severity: critical
  
receivers: #定义多接收者
- name: 'default-receiver'
  email_configs:
  - to: '[email protected]'
    send_resolved: true #通知已经恢复的告警
- name: myalertname
  webhook_configs:
  - url: 'http://172.30.7.101:8060/dingtalk/alertname/send'
    send_resolved: true #通知已经恢复的告警

 

 

  配置 prometheus-server 报警规则

  说明:

  “description: 容器 {{ $labels.name }} CPU 资源利用率大于 10% , (current value is {{ $value }})”,中$labels.name指的是promql查询结果的label标签名称key,$value为promql查询结果的value

 

root@prometheus:~# cd /usr/local/prometheus
root@prometheus:/usr/local/prometheus# mkdir rules
root@prometheus:/usr/local/prometheus# vim rules/rule1.yaml
groups:
  - name: alertmanager_pod.rules
    rules:
    - alert: Pod_all_cpu_usage
      expr: (sum by(container_label_io_kubernetes_pod_name)(rate(container_cpu_usage_seconds_total{image!=""}[5m]))*100) > 10
      for: 2m
      labels:
        severity: critical
        service: pods
      annotations:
        description: 容器 {{ $labels.container_label_io_kubernetes_pod_name }} CPU 资源利用率大于 10% , (current value is {{ $value }})
        summary: Dev CPU 负载告警

    - alert: Pod_all_memory_usage
      #expr: sort_desc(avg by(name)(irate(container_memory_usage_bytes{name!=""}[5m]))*100) > 10
      #内存大于 10%
      expr: sort_desc(avg by(name)(irate(node_memory_MemFree_bytes {name!=""}[5m]))) > 2*1024*1024*1024 #内存大于 2G
      for: 2m
      labels:
        severity: critical
      annotations:
        description: 容 器 {{ $labels.name }} Memory 资 源 利 用 率 大 于 2G , (current value is {{ $value }})
        summary: Dev Memory 负载告警
    - alert: Pod_all_network_receive_usage
      expr: sum by (name)(irate(container_network_receive_bytes_total{container_name="POD"}[1m])) > 50*1024*1024
      for: 2m
      labels:
        severity: critical
      annotations:
        description: 容器 {{ $labels.name }} network_receive 资源利用率大于 50M , (current value is {{ $value }})
 
    - alert: pod 内存可用大小
      expr: node_memory_MemFree_bytes > 1 #故意写错的
      #expr: node_memory_MemFree_bytes < 512*1024*1024 (512 *1024兆*1024字节) 小于500兆
      for: 2m
      labels:
        severity: critical
      annotations:
        description: 容器可用内存小于 100k

 

  prometheus-server配置添加告警规则配置

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.100.21:9093    #填写alertmanager服务地址

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/usr/local/prometheus/rules/rule1.yaml"  #填写告警规则文件

 

  访问prometheus-server告警界面

 

  邮箱接受告警邮件

 

 

  邮件通知

  官方配置文档:https://prometheus.io/docs/alerting/configuration/ 

  配置并重启alertmanager

root@haproxyB:/usr/local/alertmanager# cat alertmanager.yml 
global:
  resolve_timeout: 1m
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: '[email protected]'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'yytlspogrrutbbdj'
  smtp_hello: '@qq.com'
  smtp_require_tls: false
  
route:		#route 用来设置报警的分发策略
  group_by: [alertname] #通过 alertname 的值对告警进行分类,- alert: 物理节点 cpu 使用率
  group_wait: 10s #一组告警第一次发送之前等待的延迟时间,即产生告警后延迟 10 秒钟将组内新产生的消息一起合并发送(一般设置为 0 秒 ~ 几分钟)。
  group_interval: 2m #一组已发送过初始通知的告警接收到新告警后,下次发送通知前等待的延迟时间(一般设置为 5 分钟或更多)。
  repeat_interval: 2m #一条成功发送的告警,在最终发送通知之前等待的时间(通常设置为 3 小时或更长时间)。
  receiver: "qqmail"  #设置接收人
  
receivers: #定义接收者
- name: 'qqmail'
  email_configs:
  - to: '[email protected]'
    send_resolved: true #通知已经恢复的告警

inhibit_rules: #抑制的规则
  - source_match:  #源匹配级别,当匹配成功发出通知,但是其它'alertname', 'dev', 'instance'产生的warning 级别的告警通知将被抑制
      severity: 'critical'    #报警的事件级别
    target_match:
      severity: 'warning'   #调用 source_match 的 severity 即如果已经有'critical' 级别的报警,那么将匹配目标为新产生的告警级别为'warning' 的将被抑制
    equal: ['alertname', 'dev', 'instance']  #匹配哪些对象的告警
    
    
systemctl restart alertmanager

 

  访问alertmanager dashboard

 

 

   未完待续....

 

标签:alertmanager,name,smtp,prometheus,Alertmanager,usr,告警
From: https://www.cnblogs.com/punchlinux/p/17035742.html

相关文章

  • Prometheus基于blackbox_exporter监控
    blackbox_exporter监控组件  blackbox_exporter是Prometheus官方提供的一个exporter,可以监控HTTP、HTTPS,、DNS、TCP、ICMP等目标实例,从而实现对被监控节点进......
  • 关于服务端反爬虫的限制及告警方案
     前言    当前对于一些大型网站的开放式服务,有相当一部分流量都是爬虫程序导致,大概占比在20%左右,爬虫程序会增加服务端数据及流量开销、内部资料外泄等很多问题......
  • 自定义prometheus exporter
    packagemainimport( "flag" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/......
  • 高级性能01-prometheus常⽤exporter下载地址⼤全
    1.node_exporter下载​​​https://github.com/prometheus/node_exporter/releases​​​2.blackbox_exporter下载​​https://github.com/prometheus/blackbox_exporter/r......
  • 4路开关量输入设备S274可短信电话告警
    本设备支持4路继电器输出,额定范围:5A/30VDC,5A/250VAC。既可以设置为权限号码呼入进行控制,也可以用短信远程控制,或者通过定时器、事件关联自动控制、或者远程通过监控中心......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢?......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢......
  • windows下gradle下使用windows版普罗米修斯prometheus和metrics简单的制作一个监控jav
    1.引入依赖(如果是maven可以自行翻译):例如:compile'io.prometheus:simpleclient_hotspot:0.5.0'groupid为io.prometheusartifactid为......
  • 【运维有小邓】实时告警通知
    当网络上发生特定事件时,EventLogAnalyzer可以通过多种方式进行响应。EventLogAnalyzer可以实时生成告警-发送电子邮件或短信通知给指定的接收者-或运行由管理员提供的......
  • Prometheus监控MySQL--保姆级
    1背景​​MySQLExporter​​是社区专门为采集​​MySQL/MariaDB​​数据库监控指标而设计开发,通过​​Exporter​​上报核心的数据库指标,用于异常报警和监控大盘展示,......