作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


07-15:花了几个小时仍然是没走通这个流程,把中间结果记录一下。

07-16:嗨森,调通了!

1.部署了alert manager

部署的架构主要参考这篇文章:Alertmanager高可用

架构图如下:



为了方便prometheus访问alert manager,在alert manager前面还部署了CLB,可以通过VIP访问alert manager集群。

配置的细节如下:

  • --cluster.advertise-address="${POD_IP}:9094": 这个配置是告诉alertmanager它自己的地址是多少,便于gossip协议广播时排除自己。

  • --cluster.peer这个参数填写群集中的其他alertmanager的地址。
    • 一般第一个启动的节点不填这个参数,第二个启动的节点填第一个节点的ip:port,其他节点陆续链上去就行了。
    • 多个容器启动的时候是同时进行的,为了保障其中有一个节点一定是其他所有节点之前启动起来,我用了etctctl lock来保障启动顺序:如何用etcdctl产生分布式环境中的递增ID
    • 最终,gossip协议让所有节点都知道其他的所有节点的存在。
  • alertmanager.yaml配置文件中:
    • 配置webhook来进行告警的投递
    • webhook的链接可以点开任意微信群,然后加个机器人,就得到了链接。
  • 也可以使用amtool命令行工具来查询这些信息:
# 安装amtool
go install github.com/prometheus/alertmanager/cmd/amtool@latest # 查看服务器端配置
amtool --alertmanager.url=http://9.220.xxx.xxx/ config show # 查看群集状态
amtool --alertmanager.url=http://9.220.xxx.xxx/ cluster show

2.模拟告警

可以用命令行工具模拟告警:

curl -X POST "http://9.220.xxx.xxx/api/v2/alerts" -H "Content-type: application/json" -d '[{"status": "firing","labels": {"alertname": "name","service": "my-service","severity":"warning","instance": "name.example.net"},"annotations": {"summary": "High latency is high!"},"generatorURL": "http://prometheus.int.example.net/<generating_expression>"}]' -v

打开alert manager的页面,可以看见有这条告警。

3.alertmanager发给webhook的数据是什么格式?

这篇帖子里面有例子:prometheus+alertmanager+webhook实现自定义监控报警系统

json格式如下:

{
"receiver":"webhook",
"status":"resolved",
"alerts":[
{
"status":"resolved",
"labels":{
"alertname":"hostCpuUsageAlert",
"instance":"192.168.199.24:9100",
"severity":"page"
},
"annotations":{
"description":"192.168.199.24:9100 CPU 使用率超过 85% (当前值为: 0.9973333333333395)",
"summary":"机器 192.168.199.24:9100 CPU 使用率过高"
},
"startsAt":"2020-02-29T19:45:21.799548092+08:00",
"endsAt":"2020-02-29T19:49:21.799548092+08:00",
"generatorURL":"http://localhost.localdomain:9090/graph?g0.expr=sum+by%28instance%29+%28avg+without%28cpu%29+%28irate%28node_cpu_seconds_total%7Bmode%21%3D%22idle%22%7D%5B5m%5D%29%29%29+%3E+0.85&g0.tab=1",
"fingerprint":"368e9616d542ab48"
}
],
"groupLabels":{
"alertname":"hostCpuUsageAlert"
},
"commonLabels":{
"alertname":"hostCpuUsageAlert",
"instance":"192.168.199.24:9100",
"severity":"page"
},
"commonAnnotations":{
"description":"192.168.199.24:9100 CPU 使用率超过 85% (当前值为: 0.9973333333333395)",
"summary":"机器 192.168.199.24:9100 CPU 使用率过高"
},
"externalURL":"http://localhost.localdomain:9093",
"version":"4"
}
//版权声明:本文为CSDN博主「昵称2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/bluuusea/article/details/104619235

然而,企业微信的webhook收的可不是这个格式:消息类型及数据格式

{
"chatid": "wrkSFfCgAAtMQKg4xqDatM5C9IDHFpTw|@all_subscriber|zhangsan",
"post_id" : "bpkSFfCgAAWeiHNo2p6lJbG3_F2xxxxx",
"visible_to_user": "zhangsan|lisi",
"msgtype": "text",
"text": {
"content": "<@zhangsan>广州今日天气:29度,大部分多云,降雨概率:60%",
"mentioned_list":["wangqing","@all"],
"mentioned_mobile_list":["13800001111","@all"]
}
}

很明显,直接把webhook地址配置到alertmanager肯定是发不出去的

4.注册企业微信的开发者

alertmanager里面有很多wechat的配置:

5.使用开源组件来把alert manager webhook 转换为 wechat webhook

还真有,地址在:https://github.com/k8stech/alertmanager-wechatrobot-webhook

我fork了作者的这个项目,并使其可以在容器环境跑起来,代码在:https://github.com/ahfuzhang/alertmanager-wechatrobot-webhook

启动命令行为:

./wechat-webhook -RobotKey=xxxxx -addr=:8999

部署后用命令行来测试一下是否能发到企业微信:

curl -X POST "http://9.220.xxx.xxx/webhook" -H "Content-type: application/json" -d '{"receiver":"webhook","status":"resolved","alerts":[{"status":"resolved","labels":{"alertname":"hostCpuUsageAlert","instance":"192.168.199.24:9100","severity":"page"},"annotations":{"description":"192.168.199.24:9100 CPU 使用率超过 85% (当前值为: 0.9973333333333395)","summary":"机器 192.168.199.24:9100 CPU 使用率过高"},"startsAt":"2020-02-29T19:45:21.799548092+08:00","endsAt":"2020-02-29T19:49:21.799548092+08:00","generatorURL":"http://localhost.localdomain:9090/graph?g0.expr=sum+by%28instance%29+%28avg+without%28cpu%29+%28irate%28node_cpu_seconds_total%7Bmode%21%3D%22idle%22%7D%5B5m%5D%29%29%29+%3E+0.85&g0.tab=1","fingerprint":"368e9616d542ab48"}],"groupLabels":{"alertname":"hostCpuUsageAlert"},"commonLabels":{"alertname":"hostCpuUsageAlert","instance":"192.168.199.24:9100","severity":"page"},"commonAnnotations":{"description":"192.168.199.24:9100 CPU 使用率超过 85% (当前值为: 0.9973333333333395)","summary":"机器 192.168.199.24:9100 CPU 使用率过高"},"externalURL":"http://localhost.localdomain:9093","version":"4"}'

在企业微信群里可以看见如上的信息。

然后,修改alertmanager的yaml文件:

global:
resolve_timeout: 10m
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://9.220.xxx.xxx/webhook'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 1m
repeat_interval: 1m
receiver: 'webhook'

最后用命令行测试一下发送到alertmanager的告警,能否最终发到企业微信上:

curl -X POST "http://9.220.xxx.xx/api/v2/alerts" -H "Content-type: application/json" -d '[{"status": "firing","labels": {"alertname": "name","service": "my-service","severity":"warning","instance": "name.example.net"},"annotations": {"summary": "High latency is high!"},	"generatorURL": "http://prometheus.int.example.net/<generating_expression>"}]'



触发了多次告警,成功!

【解决了一个小问题】alert manager要怎么样才能触发告警到企业微信上?的更多相关文章

  1. 【解决了一个小问题】alert manager中的cluster.advertise-address参数是什么意思?

    如果在启动 alert manager的时候,不填写参数: /usr/bin/alertmanager --config.file=/etc/alert_manager/alertmanager.ya ...

  2. 【解决了一个小问题】go.mod文件中引用另一个库,总会自动拉取新版本

    我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx. ...

  3. 【解决了一个小问题】golang protocol buffers 3中去掉json标签中的omitempty

    参考了这篇帖子:golang protobuf从生成的json标记中删除omitempty标记 由于是在windows上开发,因此写了一个python脚本来解决: remove_tag.py impo ...

  4. 【解决了一个小问题】golang gin框架中的模板,让模板中的参数不要做HTML转义

    代码中使用了类似的方式来向模板填充参数: c.HTML(200, "list.html", gin.H{"data":builder.String()}) 模板 ...

  5. 【解决了一个小问题】如何展示VictoriaMetrics组件上报的bucket数据

    VM体系还真的是不一(he)样(qun), 它上报的监控数据长这样: vmagent_remotewrite_block_size_rows_bucket{vmrange="2.448e+0 ...

  6. 【解决了一个小问题】golang build中因为缓存文件损坏导致的编译错误

    编译的过程中出现了一个吓人的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhang\go #gosetup C:\Go\bin\go.exe mod t ...

  7. 【解决了一个小问题】golang中引用一个路径较长的库,导致goland中出现"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"

    在项目中的go.mod文件中有这样一句: require ( github.com/xxx-devops/xx1/sdk/go v2.2.3 ) 项目的编译没有问题,但是goland中出现如下提示: ...

  8. 【解决了一个小问题】alpine镜像中,busybox的date命令获取昨天的日期

    直接上答案: date -d@"$(( `date +%s`-86400))" +"%Y-%m-%d"

  9. 【解决了一个小问题】vmselect对应的vmstorage端口配置错误导致的问题

    从vmselect查询的时候,出现如下错误: error when executing query="up" on the time range (start=1639388706 ...

  10. 【解决了一个小问题】golang的go.mod中出现版本错误

    代码中的这一句使用prometheus2.28.0版本的代码: import "github.com/prometheus/prometheus/prompb" 我把require ...

随机推荐

  1. 聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core

    前言 如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle.AspectCore和DoraInterception, 我将从我当时研究的经历,以及我遇到的场景,为大家展示下 ...

  2. MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行

    一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺出错及漏执行SQL SQL Server 项目中 SQL 脚本更新方式 Oracle 项目中 SQL 脚本更新 ...

  3. windows使用rclone挂载alist为本地磁盘,设置开机自启

    前言 实现在windows下将alist挂载为本地磁盘,并设置开机自启,使得重启后依然生效. 教程 下载软件 Rclone: Rclone downloads WinFsp: https://winf ...

  4. 彻底干掉了Windows的cmd,一个字:爽!

    彻底干掉了Windows的cmd,一个字:爽! 先说一句:Windows下的 cmd 就是垃圾! 习惯了Ubuntu和Mac的Terminal,再去用Windows的 cmd 简直难以忍受. 今天就向 ...

  5. 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~!

    全球最大同性交友网站 GitHub 是所有程序员的最爱,但是国内开发者访问Github 很不稳定,克隆开源项目也慢的离谱,常常clone失败. 之前大家或绕道码云(GitLab)或修改host文件,但 ...

  6. 最火前端Web组态软件(可视化)

    ​ 友情提示:本文为原创文章,转载请注明出处,商务合作请私信!!! 前言: 随着物联网.大数据等技术高速发展,我们逐步向数字化.可视化的人工智能(AI)时代的方向不断迈进.智能时代是工业 4.0 时代 ...

  7. <vue 基础知识 5、事件监听>

    代码结构 一.     v-on基本使用 1.效果 按钮点击一下数字增加1 2.代码 01-v-on基本使用.html <!DOCTYPE html> <html lang=&quo ...

  8. 从0开发3D引擎(十三):使用领域驱动设计,从最小3D程序中提炼引擎(第四部分)

    目录 上一篇博文 下一篇博文 本文流程 回顾上文 解释基本的操作 如何在浏览器上运行index.html 开始实现 准备 建立代码的文件夹结构,约定模块文件的命名规则 模块文件的命名原则 一级和二级文 ...

  9. Power Designer建模之餐饮在线点评系统——概念数据模型

    企业信息管理 局部概念模型 企业 餐饮企业 食材提供商 食材 特色菜 团购活动 优惠券 促销活动 会员团购订单 优惠券下载和浏览记录表 会员信息管理 局部概念模型 会员 会员扩展信息 会员积分记录 餐 ...

  10. 第七届蓝桥杯大赛个人赛省赛(软件类)B组

    3.凑算式     B      DEFA + --- + ------- = 10     C      GHI     (如果显示有问题,可以参见[图1.jpg])   这个算式中A~I代表1~9 ...