Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)
在之前博文中,已经成功的实现了邮件推送。目前主流的办公终端,就是企业微信、钉钉、飞书。今天来分享下微信推送,我们具体来看。
企业微信
在配置企业微信推送时,需要有微信企业,具体如何注册、使用,另外百度就好,在这里就不多说了。
添加机器人
登录企业微信管理后台,获取配置项基础信息。
- 创建应用
点击应用管理>应用>创建应用,如下所示:

填写对应信息,配置应该logo、名称、以及应用的可见范围,如下所示:

- 获取AgentId和Secret
应用创建成功后,可以查看应用详情,如下所示:

我们从图中可以看到,有AgentId,AgentId先复制保存下,后续会用到;还有Secret,获取Secret,点击查看后,Secret是发送到企业微信中的,自己到微信终端中查看即可。
- 获取corp_id
在我的企业中查看,有个企业id字段,以xx开头。
- 获取部门id
在通讯录中查看,查看部门信息,如下所示:

配置文件
基础信息拿到后,可能会有疑问,拿这些基础信息有什么用。不要急,接下来的配置就需要,我们来细看。
在之前原有的邮件配置基础上,再来进一步修改,添加 wechat_configs 内容,如下所示:
global:
resolve_timeout: 5m
smtp_from: '{{ template "email.from" . }}'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '{{ template "email.from" . }}'
smtp_auth_password: ''
smtp_hello: 'qq.com'
smtp_require_tls: false
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_secret: ''
wechat_api_corp_id: ''
templates:
- '/etc/alertmanager/*.tmpl'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.html" . }}'
send_resolved: true
headers: { Subject: "{{ .CommonAnnotations.summary }}" }
wechat_configs:
- send_resolved: true
to_party: '8'
to_user: '@all'
agent_id: ''
corp_id: ''
api_secret: ''
api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
参数解析:
- to_party 部门id
- agent_id 应用id
- api_secret 应用Secret
- corp_id 企业id
- api_url 企业微信固定写法
- to_user 接收人
配置后,需要重启alter manager服务,使配置生效。
消息推送
配置好后,我们来触发个条件,而使消息推送,来验证下配置是否有效。
触发条件一样,将node服务停止,使其触发,具体可查看上一篇博文,有详细介绍。Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)
服务停止后,通过 Prometheus 消息中心推送消息,如下所示:

消息内容多,模板不精简,但收到消息,说明配置是没问题的,功能已实现。
引用模板
在之前修改过邮件模板,在这里,我们也修改下微信推送的模板,使其简明扼要一些。
创建模板文件,同样在 alertmanager 目录下,使用命令vim wecaht.tmpl,添加如下内容:
{{ define "wechat.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
@警报
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
详情: {{ .Annotations.description }}
时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
@恢复
实例: {{ .Labels.instance }}
信息: {{ .Annotations.summary }}
时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end }}{{ end -}}
{{- end }}
由于之前出现过日期问题,所以这里就先加上,避免再出现日期那样的错误了,不能一直往里跳。
配置好模板后,需要在altermanager配置文件中引用该模板,wechat_configs中增加如下内容,引用模板:
message: '{{ template "wechat.html" . }}'
如果模板跟altermanager配置文件不在同一个目录下,则需要挂载,由于我配置在一个目录下,就不需要重新挂载了,只需要重启服务即可,使其生效。
再次停用node服务,查看消息推送,告警消息如下所示:

恢复消息如下所示:

引用了模板后,内容是不是要精简很多。
内存监控
一直关注我的朋友,可能会吐槽了,怎么老是拿node服务来写demo,能不能来个实际案例。我想着也是,学了就要用起来。服务器中有很多指标都可以监控,比如:内存、CPU、I/O、网络等。今天来个内存监控,具体来看。
其实监控不难,通过两篇博文,也已知道是怎么回事了,主要是配置规则而已。那规则怎么配置呢,来看如下内容:
groups:
- name: hostStatsAlert
rules:
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} MEM usgae high"
description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"
- alert: node-up
expr: up{job="linux"} == 0
for: 15s
labels:
severity: page
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
description: "{{ $labels.instance }} 检测到异常停止!请重点关注!!!"
上述示例 hostMemUsageAlert 规则,添加到/prometheus/rules目录下的规则中,并重启Prometheus服务,使配置生效。
重启后,通过Prometheus服务查看规则,如下所示:

注意:规则配置内存使用率超过85%则会出发警报,如果大家的服务器内存够大,目前使用率不高,但又想检测下规则是否能正常触发,将85降低即可。
我这里配置的85,我们来看下最终效果图,如下所示:
告警信息

恢复信息

内存监控,按上述步骤就实现了,是不是就是一个规则的事情,其他指标监控也同理。
好了,今天分享就到这了,下期再会。
Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)的更多相关文章
- Docker系列——Grafana+Prometheus+Node-exporter钉钉推送(四)
近期搭建的服务器监控平台,来进行一个总结.主要分为监控平台的搭建.告警中心的配置以及消息的推送.推送的话,支持多种终端.具体详细可查看之前的博文,在这里罗列下,方便查看. Docker系列--Graf ...
- Docker系列——Grafana+Prometheus+Node-exporter服务器监控平台(一)
在最近的博文中,都是介绍监控平台的搭建,其实并不难,主要是需要自己动手操作,实践一番就会了. 有天在想,云上的服务器,是不是也可以搭建一个监控平台,所以就捣鼓了一下,不过遗憾的是,使用阿里云开源的插件 ...
- Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)
在前一篇博文中介绍,服务器监控已经部署成功.如果每天都需要人去盯着服务情况,那也不太现实.既然监控平台已经部署好了,是不是可以自动触发报警呢? 在上一篇Prometheus架构中有讲到,核心组件之一: ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式
1.概述 通过前两篇 史上最全面的SignalR系列教程-1.认识SignalR 史上最全面的SignalR系列教程-2.SignalR 实现推送功能-永久连接类实现方式 文章对SignalR的介绍, ...
- day93之微信推送
python之微信推送详解 用什么推送 -邮件 -微信推送 -短信推送微信推送 -公众号(不能主动给用户发消息) -认证的公众号:需要营业执照,需要交钱,可以发多篇文章 - ...
- Django day 36 支付宝支付,微信推送
一:支付宝支付, 二:微信推送
- 让微信推送Jenkins构建消息
Jenkins作为开发必备之神器,各家大小公司都在使用.Jenkins自身内置了基于邮件推送构建结果的功能.但是随着移动互联网的发展,邮件这玩意已经越来越少使用了,是否有一种办法能把jenkins构建 ...
- 免注册公众号的三种微信推送消息服务的C#代码实现
有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...
随机推荐
- POJ3687拓扑排序+贪心
题意: 给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小. 思路 ...
- PHP Proxy 负载均衡技术
<?php $whitelistPatterns = array( ); $forceCORS = false; $anonymize = true; $startURL = "&qu ...
- 每天一道面试题LeetCode 80--删除排序数组中的重复项 II(python实现)
LeetCode 80--删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输 ...
- Git(2)多人协同操作冲突
一:多人协同操作冲突 拉取远程dev并在本地创建dev开发库,执行命令git checkout -b dev origin/dev 这里以同台机器不同窗口来模拟俩个用户操作同一分支同一文件(实际 ...
- dependencyManagement 版本管理
帮别人解决bug的时候碰到,随便记录一下. 使用<dependencyManagement>标签, 做版本管理的时候,需要父子项目关联,就需要子模块中利用<parent> 否则 ...
- python 读写 HDFS
pandas dataframe写入hdfs csv文件的两种方式: 1. from hdfs.client import Client cleint.write(hdfs_url, df.to_cs ...
- 使用TK框架中updateByPrimaryKey与updateByPrimaryKeySelective区别
int updateByPrimaryKey(T var1); int updateByPrimaryKeySelective(T var1); updateByPrimaryKeySelective ...
- Python数模笔记-Sklearn(4)线性回归
1.什么是线性回归? 回归分析(Regression analysis)是一种统计分析方法,研究自变量和因变量之间的定量关系.回归分析不仅包括建立数学模型并估计模型参数,检验数学模型的可信度,也包括利 ...
- ImageIo.read 返回null
一.问题描述 今天收到一个bug就是imageio读取图片会返回null,具体如下 但是其他的图片就没有问题 二.问题分析 结合百度发现这张图片原本的后缀并非是jpg,使用notpard++打开就可以 ...
- Pytorch系列:(五)CNN
卷积 Conv2d 2D卷积函数和参数如下 nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilati ...