Redian新闻
>
docker-compose部署Prometheus+Alertmanager并配置企业微信告警

docker-compose部署Prometheus+Alertmanager并配置企业微信告警

公众号新闻


一、Prometheus告警简介

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

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

告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容

告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

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

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

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

二、Alertmanager特性

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

1、分组

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

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

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

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

2抑制

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

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

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

3静默

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

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

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

Prometheus触发一条告警的过程:

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

三、实现企业微信告警

1、创建企业微信应用

1)访问企业微信官网(https://work.weixin.qq.com/),注册企业微信账号(不需要企业认证)。

2)登录企业微信后台

操作步骤:应用管理 ---> 创建第三方应用,点击创建应用按钮 -> 填写应用信息

3)填写应用信息

# 部门ID:to_party需要发送的组

2、安装Docker

1)获取阿里Docker源

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2)安装Docker

[root@localhost ~]# yum -y install docker-ce docker-ce-cli containerd.io

3)启动Docker

[root@localhost ~]# systemctl enable docker

[root@localhost ~]# systemctl start docker

3安装Docker-compose

Linux上我们可以从Github上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。

1)运行以下命令以下载Docker Compose的v2.16.0版本

[root@localhost ~]# wget -O /usr/bin/docker-compose https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64

2)授权可执行权限

[root@localhost ~]# chmod +x /usr/bin/docker-compose

3)测试是否安装成功

[root@localhost ~]# docker-compose -v

Docker Compose version v2.16.0

4创建相关服务配置文件

1)创建Prometheus配置文件

[root@localhost ~]# mkdir -p /opt/monitor/conf

[root@localhost ~]# vim /opt/monitor/conf/prometheus.yml

  1. global:

  2. scrape_interval: 15s

  3. evaluation_interval: 15s

  4. alerting:

  5. alertmanagers:

  6. - static_configs:

  7. - targets:

  8. - alertmanager:9093

  9. rule_files:

  10. - "/opt/prometheus/rules/node.yml"

  11. scrape_configs:

  12. - job_name: 'prometheus'

  13. static_configs:

  14. - targets: ['prometheus:9090']

  15. - job_name: 'node'

  16. static_configs:

  17. - targets: ['node-exporter:9100']

  18. - job_name: 'alertmanager'

  19. static_configs:

  20. - targets: ['alertmanager:9093']

2)配置Prometheus告警规则

[root@localhost ~]# vim /opt/monitor/conf/node.yml

  1. groups:

  2. - name: Node Resource Monitoring

  3. rules:

  4. - alert: Node实例已宕机

  5. expr: up{instance =~ ".*:9100"} == 0

  6. for: 30s

  7. labels:

  8. user: root

  9. severity: Emergency

  10. annotations:

  11. summary: "{{ $labels.instance }} 客户端已停止运行,请尽快处理!"

  12. description: "Node_Exporter客户端已停止运行,当前状态:{{ $value }} "

3)创建Alertmanager配置文件

[root@localhost ~]# vim /opt/monitor/conf/alertmanager.yml

  1. global:

  2. # 每5分钟检查一次是否恢复

  3. resolve_timeout: 5m

  4. # 微信告警通知模板

  5. templates:

  6. - '/opt/alertmanager/template/wechat.tmpl'

  7. # route用来设置报警的分发策略

  8. route:

  9. # 采用哪个标签来作为分组依据

  10. group_by: ['alertname']

  11. # 组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出

  12. group_wait: 10s

  13. # 两组告警的间隔时间

  14. group_interval: 10s

  15. # 重复告警的间隔时间,减少相同告警的发送频率

  16. repeat_interval: 1h

  17. # 设置默认接收人

  18. receiver: 'wechat'

  19. routes: # 可以指定哪些组接收消息

  20. - receiver: 'wechat'

  21. continue: true

  22. group_wait: 10s

  23. receivers:

  24. - name: 'wechat'

  25. wechat_configs:

  26. - corp_id: 'xxxx'

  27. to_party: '2'

  28. agent_id: '1000001'

  29. api_secret: 'xxx'

  30. send_resolved: true

参数说明:

corp_id: 企业微信账号唯一ID,可以在我的企业中查看。

to_party: 需要发送的组。

agent_id: 自建企业应用的AgentId,可以在企业应用里创建的自建应用详情页面查看。

api_secret: 自建企业应用的Secret,可以在企业应用里创建的自建应用详情页面查看。

4)配置企业微信告警模板

[root@localhost ~]# vim /opt/monitor/conf/wechat.tmpl

  1. {{ define "wechat.default.message" }}

  2. {{- if gt (len .Alerts.Firing) 0 -}}

  3. {{- range $index, $alert := .Alerts -}}

  4. {{- if eq $index 0 }}

  5. 告警程序:Prometheus_Alertmanager

  6. 告警状态:{{ .Status }}

  7. 告警级别:{{ $alert.Labels.severity }}

  8. 告警类型:{{ $alert.Labels.alertname }}

  9. 故障主机:{{ $alert.Labels.instance }}

  10. 告警详情:{{ $alert.Annotations.description }}

  11. 触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

  12. {{- end }}

  13. {{- end }}

  14. {{- end }}

  15. {{- if gt (len .Alerts.Resolved) 0 -}}

  16. {{- range $index, $alert := .Alerts -}}

  17. {{- if eq $index 0 }}

  18. 告警程序:Prometheus_Alertmanager

  19. 告警状态:{{ .Status }}

  20. 告警级别:{{ $alert.Labels.severity }}

  21. 告警类型:{{ $alert.Labels.alertname }}

  22. 故障主机:{{ $alert.Labels.instance }}

  23. 告警详情:{{ $alert.Annotations.description }}

  24. 触发时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

  25. 恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

  26. {{- end }}

  27. {{- end }}

  28. {{- end }}

  29. {{- end }}

5)创建docker-compose.yml

[root@localhost ~]# vim /opt/monitor/docker-compose.yml

  1. version: '3.3'

  2. services:

  3. prometheus:

  4. image: bitnami/prometheus:2.37.0

  5. container_name: prometheus

  6. hostname: prometheus

  7. restart: always

  8. volumes:

  9. - /opt/monitor/conf/prometheus.yml:/etc/prometheus/prometheus.yml

  10. - /opt/monitor/conf/node.yml:/opt/prometheus/rules/node.yml

  11. ports:

  12. - "9090:9090"

  13. environment:

  14. - TZ=Asia/Shanghai

  15. networks:

  16. - monitor

  17. alertmanager:

  18. image: bitnami/alertmanager:0.25.0

  19. container_name: alertmanager

  20. hostname: alertmanager

  21. restart: always

  22. volumes:

  23. - /opt/monitor/conf/alertmanager.yml:/etc/alertmanager/config.yml

  24. - /opt/monitor/conf/wechat.tmpl:/opt/alertmanager/template/wechat.tmpl

  25. ports:

  26. - "9093:9093"

  27. environment:

  28. - TZ=Asia/Shanghai

  29. networks:

  30. - monitor

  31. node-exporter:

  32. image: bitnami/node-exporter:1.5.0

  33. container_name: node-exporter

  34. hostname: node-exporter

  35. restart: always

  36. ports:

  37. - "9100:9100"

  38. environment:

  39. - TZ=Asia/Shanghai

  40. networks:

  41. - monitor

  42. networks:

  43. monitor:

  44. driver: bridge

6)启动容器

[root@localhost ~]# cd /opt/monitor

[root@localhost monitor]# docker-compose up -d

7)查看容器运行状态

[root@localhost monitor]# docker-compose ps -a

NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS

alertmanager bitnami/alertmanager:0.25.0 "/opt/bitnami/alertm…" alertmanager 4 minutes ago Up 4 minutes 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp

node-exporter bitnami/node-exporter:1.5.0 "/opt/bitnami/node-e…" node-exporter 4 minutes ago Up 4 minutes 0.0.0.0:9100->9100/tcp, :::9100->9100/tcp

prometheus bitnami/prometheus:2.37.0 "/opt/bitnami/promet…" prometheus 4 minutes ago Up 4 minutes 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp

5验证企业微信告警

# 浏览器访问Prometheus管理界面可以看到如下信息:


1)模拟停止node_exporter服务,触发企业微信告警

[root@localhost monitor]# docker-compose stop node-exporter

2)再次查看Prometheus界面的Alerts可以看到告警状态。

绿色表示正常。

黄色状态为PENDING表示Alerts还没有发送至Alertmanager,因为rules里面配置了for: 30s。

30秒后状态由PENDING变为FIRING,此时Prometheus才将告警发给alertmanager,在Alertmanager中可以看到有一个alert。

3)查看Alertmanager

4)查看企业微信告警信息

5)启动node_exporter

[root@localhost monitor]# docker-compose start node-exporter

6)查看企业微信会收到恢复信息

附:

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 }})."


链接:https://www.yangxingzhen.com/9138.html

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
《尘封档案》拾遗之059:“乞丐命案”的背后China’s Colleges Are Locked in a Heated Debate … About CurtainsThe Lowly Chinese Go Player Who Conquered the SportHer Boyfriend Killed Himself. The Internet Blamed Her.Shanghai Study Unlocks Key to Better Pancreatic Cancer Treatment蒲松龄自画像:“青衫白帢久飘零”They Hitched a Ride Home From Work. Then, Tragedy Struck.Kubernetes部署PostgreSQL集群SEC又又又起诉Consensys了?这次还带上了Lido和Rocket Pool?堪称最优秀的Docker可视化管理工具——Portainer你真的会用吗?外企社招丨Dräger德尔格,行业全球领导者,15薪,六险一金,多样福利,偏爱留学生长篇小说《谷雨立夏间》82 立夏的夏天突发!2024 John Locke部分赛题新变化!The 75-Year-Old Mother Creating a Green Miracle in the DesertDocker三剑客之Docker Swarm小红书内测跳转企业微信功能;威富集团有意出售Supreme;蔚来发布新品牌ONVO乐道... | 刀法品牌热讯In Henan, a Vicious Heat Wave Strikes at Worst Possible TimeThe Artist Monkeying Around With China’s Monkey King[评测]ASUS ProArt GeForce RTX 4080 Super OC Edition 16GB GDDR6X 评测德国马克思城堡(Marksburg castle),街头看景In China, Starbucks Feels the Heat From Homegrown Coffee ChainsAlbertsons&Kroger并购, 出售全美579家门店! 德州28家…Chase UR 点数“Pay Yourself Back” (PYB)【去掉Grocery类别,新增Wholesale类别】How a Student’s Fake Exercise Book Broke the Chinese Internet如何使用DOCKER部署一个GO WEB应用程序Albertsons&Kroger并购, 将出售全美579家门店!From Hire Me to Better Call Tang, the Quirky World of Metro AdsChinese Soccer Has a New Hero: Singapore’s Veteran Goalkeeper上岸笔记 | 恭喜 美本 Aggie同学 成功斩获 Bellwether Asset Management,全职offerPrometheus发送告警机制最新 Amex Offers 汇总【Secrets & Impression by Secrets 度假村 $750返$200】30 Years of Chinese Pro Soccer: Can Clubs Make a Comeback?2023年后院里看见的野生动物资管一哥|BlackRock 2025 Full-Time Analyst Program已开云原生消息流系统 Apache RocketMQ 在腾讯云的大规模生产实践
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。