首页 > 其他分享 >Prometheus钉钉报警配置

Prometheus钉钉报警配置

时间:2022-12-30 16:03:42浏览次数:26  
标签:配置 dingtalk 报警 Prometheus alertmanager 告警 root localhost

Prometheus告警简介

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Prometheus钉钉报警配置_配置文件

在Prometheus中一条告警规则主要由以下几部分组成:

  • 告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容
  • 告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

在Prometheus中,还可以通过Group(告警组)对一组相关的告警进行统一定义。当然这些定义都是通过YAML文件来统一管理的。

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。

例如,目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

Alertmanager特性

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

Prometheus钉钉报警配置_vim_02

分组

分组机制可以将详细的告警信息合并成一个通知。在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。

例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。

而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。

告警分组,告警时间,以及告警的接受方式可以通过Alertmanager的配置文件进行配置。

抑制

抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。

例如,当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。

抑制机制同样通过Alertmanager的配置文件进行设置。

静默

静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。

静默设置需要在Alertmanager的Werb页面上进行设置。

Prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。

Prometheus触发一条告警的过程:

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

Prometheus钉钉报警配置_vim_03

实现钉钉告警---->>准备工作

1、登录钉钉

2、创建机器人

3、获取钉钉token

4、配置钉钉webhook

5、插件下载

安装Alertmanager

1、下载Alertmanager

[root@localhost ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz

[root@localhost ~]# tar xf alertmanager-0.20.0.linux-amd64.tar.gz

[root@localhost ~]# mv alertmanager-0.20.0.linux-amd64 /usr/local/alertmanager

2、创建启动文件

[root@localhost ~]# vim /usr/lib/systemd/system/alertmanager.service

  1. [Unit]
  2. Description=alertmanager
  3. Documentation=https://github.com/prometheus/alertmanager
  4. After=network.target
  5. [Service]
  6. Type=simple
  7. User=root
  8. ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

3、配置alertmanager.yml文件

Alertmanager 安装目录下默认有 alertmanager.yml 配置文件,可以创建新的配置文件,在启动时指定即可。

[root@localhost ~]# cd /usr/local/alertmanager

[root@localhost alertmanager]# vim alertmanager.yml

  1. global:
  2. # 每2分钟检查一次是否恢复
  3. resolve_timeout: 2m
  4. # route用来设置报警的分发策略
  5. route:
  6. # 采用哪个标签来作为分组依据
  7. group_by: ['alertname']
  8. # 组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  9. group_wait: 10s
  10. # 两组告警的间隔时间
  11. group_interval: 10s
  12. # 重复告警的间隔时间,减少相同微信告警的发送频率
  13. repeat_interval: 1h
  14. # 设置默认接收人
  15. receiver: 'webhook'
  16. receivers:
  17. - name: 'webhook'
  18. webhook_configs:
  19. - url: ‘http://localhost:8060/dingtalk/ops_dingding/send’
  20. send_resolved: true

注意:http://localhost:8060/dingtalk/ops_dingding/send,其中ops_dingding是当时运行prometheus-webhook-dingtalk指定钉钉接口参数的变量:ops_dingding,如下:ops_dingding

--ding.profile="ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=xxx"

4、钉钉插件下载

注:需要go环境

# YUM安装

[root@localhost ~]# yum -y install epel-release

[root@localhost ~]# yum -y install go

# 源码安装

[root@localhost ~]# wget https://studygolang.com/dl/golang/go1.14.2.linux-amd64.tar.gz

[root@localhost ~]# tar xf go1.14.2.linux-amd64.tar.gz -C /usr/local

# 配置环境变量

[root@localhost ~]# vim /etc/profile

  1. export GO_HOME=/usr/local/go
  2. export PATH=$PATH:$GO_HOME/bin

[root@localhost ~]# source /etc/profile

[root@localhost ~]# git clone https://github.com/timonwong/prometheus-webhook-dingtalk.git

[root@localhost ~]# mv prometheus-webhook-dingtalk /usr/local/dingtalk

[root@localhost ~]# cd /usr/local/dingtalk

[root@localhost dingtalk]# wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo

[root@localhost dingtalk]# yum -y install yarn

# 自带的版本太低,最低要求8及以上,默认6.17.1

[root@localhost dingtalk]# rpm -e --nodeps nodejs

# 安装nodejs(需指定版本)

[root@localhost ~]# wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz

[root@localhost ~]# tar xf node-v10.9.0-linux-x64.tar.xz

[root@localhost ~]# mv node-v10.13.0-linux-x64 /usr/local/nodejs

# 配置环境变量

[root@localhost ~]# vim /etc/profile

  1. export NODE_HOME=/usr/local/nodejs
  2. export PATH=$PATH:$NODE_HOME/bin

[root@localhost ~]# source /etc/profile

# 编译

[root@localhost dingtalk]# make

5、获取钉钉机器人

1)选择群组--->>群助手

Prometheus钉钉报警配置_vim_04

2)添加机器人

Prometheus钉钉报警配置_linux_05

Prometheus钉钉报警配置_配置文件_06

3)选择自定义

Prometheus钉钉报警配置_linux_07

Prometheus钉钉报警配置_vim_08

4)输入机器人名字、群组、安全设置

Prometheus钉钉报警配置_linux_09Prometheus钉钉报警配置_linux_106、启动dingtalk

注:复制Webhook地址,启动需要

# 测试钉钉告警机器人

[root@localhost dingtalk]# curl -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"prometheus alert test"}}' https://oapi.dingtalk.com/robot/send?access_token=xxx

{"errcode":0,"errmsg":"ok"}

# 配置系统服务

[root@localhost dingtalk]# vim /usr/lib/systemd/system/prometheus-webhook-dingtalk.service 

  1. [Unit]
  2. Description=prometheus-webhook-dingtalk
  3. After=network-online.target
  4. [Service]
  5. Restart=on-failure
  6. ExecStart=/usr/local/dingtalk/prometheus-webhook-dingtalk --ding.profile=ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=此处省略,输入自己的Webhook地址
  7. [Install]
  8. WantedBy=multi-user.target

[root@localhost dingtalk]# systemctl daemon-reload

[root@localhost dingtalk]# systemctl start prometheus-webhook-dingtalk

[root@localhost dingtalk]# netstat -lntup | grep 8060

7、配置告警规则

[root@localhost alertmanager]# mkdir -p /usr/local/prometheus/rules

[root@localhost alertmanager]# cd /usr/local/prometheus/rules

[root@localhost rules]# vim node.yml

  1. groups:
  2. - name: Node_Down
  3. rules:
  4. - alert: Node实例已宕机
  5. expr: up == 0
  6. for: 10s
  7. labels:
  8. user: root
  9. severity: Warning
  10. annotations:
  11. summary: "Instance {{ $labels.instance }} Down"
  12. description: "{{ $labels.instance }} of job {{ $labels.job }} has been Down."

在Prometheus.yml中指定node.yml的路径

[root@localhost rules]# vim /usr/local/prometheus/prometheus.yml

  1. global:
  2. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  3. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  4. # scrape_timeout is set to the global default (10s).

  5. # Alertmanager configuration
  6. alerting:
  7. alertmanagers:
  8. - static_configs:
  9. - targets: ['localhost:9093']
  10. # - localhost:9093

  11. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  12. rule_files:
  13. - 'rules/node.yml'
  14. # - "first_rules.yml"
  15. # - "second_rules.yml"

  16. # A scrape configuration containing exactly one endpoint to scrape:
  17. # Here it's Prometheus itself.
  18. scrape_configs:
  19. # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  20. - job_name: 'prometheus'
  21. static_configs:
  22. - targets: ['localhost:9100']

8、重启Prometheus服务

[root@localhost rules]# systemctl restart prometheus

9、启动Alertmanager

[root@localhost rules]# systemctl daemon-reload

[root@localhost rules]# systemctl start alertmanager

10、验证效果

此时访问prometheus管理界面可以看到如下信息:

Prometheus钉钉报警配置_vim_11

11、然后停止 node_exporter 服务,然后再看效果。

[root@localhost rules]# systemctl stop node_exporter

prometheus界面的alert可以看到告警状态。

  • 绿色表示正常。
  • 红色状态为PENDING表示alerts还没有发送至Alertmanager,因为rules里面配置了for: 10s。
  • 10秒后状态由PENDING变为FIRING,此时Prometheus才将告警发给alertmanager,在Alertmanager中可以看到有一个alert。 

Prometheus钉钉报警配置_配置文件_12

12、接着钉钉会收到告警信息

Prometheus钉钉报警配置_vim_13

13、再次启动node_export

[root@localhost ~]# systemctl start node_exporter

# 钉钉会收到恢复信息

Prometheus钉钉报警配置_vim_14

附:

CPU使用率告警规则:

  1. groups:
  2. - name: CPU
  3. rules:
  4. - alert: CPU使用率过高
  5. expr: (100 - (avg by (instance) (irate(node_cpu{mode="idle"}[5m])) * 100)) > 80
  6. for: 1m
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} CPU使用率过高"
  11. description: "{{ $labels.instance }}: CPU使用率超过80%,当前使用率({{ $value }})."

内存使用率告警规则:

  1. groups:
  2. - name: Memory
  3. rules:
  4. - alert: 内存使用率过高
  5. expr: (node_memory_MemTotal - (node_memory_MemFree+node_memory_Buffers+node_memory_Cached )) / node_memory_MemTotal * 100 > 80
  6. for: 1m #告警持续时间,超过这个时间才会发送给alertmanager
  7. labels:
  8. severity: Warning
  9. annotations:
  10. summary: "{{ $labels.instance }} 内存使用率过高"
  11. description: "{{ $labels.instance }}:内存使用率超过80%,当前使用率({{ $value }})."

标签:配置,dingtalk,报警,Prometheus,alertmanager,告警,root,localhost
From: https://blog.51cto.com/u_12018693/5980577

相关文章

  • 【spring-boot】配置基础目录与启动
    #POM.XML<!--继承父项目spring-boot-starter-parent的依赖管理--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte......
  • Spring MVC的web.xml配置详解
    SpringMVC是创建javaweb项目时比较常用的框架,其中web.xml配置文件是更不可少的,那么首先先了解javaweb中的web.xml文件。一、认识web.xml文件1、web.xml的作用首先java......
  • 传奇开服教程——登录器配置教程
    传奇单机顾名思义就是在本地电脑上架设传奇,限制同一个局域网才能一起玩,我接触到几个朋友不明白外网和单机的区别​外网需要用​​服务器​​(开外网可了解)架设,通过服务器iis......
  • FTP配置多用户多目录多权限
    环境介绍根据开发的需求要求创建FTP服务器,把前端和后端分开用不同的FTP账号系统环境centos7.4防火墙设置systemctlstopfirewalld.service#停止firewall(防火墙)system......
  • Hibernate注解配置一对多双向关联和多对一单向关联
    Hibernate提供了HibernateAnnotations扩展包,使用注解完成映射。在Hibernate3.3之前,需单独下载注解开发包 配置持久化类配置关联关系 下面我们先从多对一单向关联关系讲起......
  • 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试
    一、安装Nginx和fastdfs-nginx-module安装Nginx请看:​​从零开始学Java-CentOS下安装Nginx​​,其实我只想放这一句话。但想想我还是一步一步写详细吧。1.下载Ngi......
  • vim 玩法配置
    编辑vimrc文件,vi~/.vimrc设置F2为打开/关闭行号setnonumber......
  • 简单hibernate5.2.10入门配置
    1、官网下载hibernate5相关jar包​​http://hibernate.org/orm/​​2、解压后,在lib目录中找到required目录下的jar包添加至项目。再添加数据库驱动包,博主用MySQLjar包添加......
  • eclipse下简单配置struts2.5.8
    1.下载structs2.5.8jar包。首先去官方下载structs2.5.8的jar包。下载地址:http://struts.apache.org/download.cgi#struts258点击下载完成之后,将该压缩包进行解压。2.在eclip......
  • 【等保要求】东方通TongWeb中间件配置https访问
    等保整改要求如下:【数据完整性】:采用HTTP协议通信,未采取校验技术或密码技术保证重要数据在传输过程中的完整性。建议采取校验技术或密码技术保证重要数据在传输过程中的......