golang接收alertmanager的告警并发送钉钉

news/2024/11/14 0:09:57/文章来源:https://www.cnblogs.com/yinzhengjie/p/18545112

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.配置钉钉

1.钉钉自定义机器人接入参考文档

参考链接:https://open.dingtalk.com/document/orgapp/custom-robot-access

2.配置钉钉机器人

如上图所示,注册钉钉拉群聊,然后添加“自定义机器人”,并配置自定义关键词,该关键字的作用就是当消息发送到钉钉群前,会检查该消息是否包含关键字,若包含则会在群里显示,若不包含关键字则不会发送消息到群里,这意味着群成员无法查看。这相当于一个"口令",一定要确保你的消息确保有该关键词。

二.alertmanager实现告警并发送钉钉

1.编写源代码接收告警处理

package mainimport ("bytes""encoding/json""errors""flag""fmt""log""net/http""time""github.com/gin-gonic/gin""github.com/prometheus/alertmanager/notify/webhook""github.com/prometheus/alertmanager/template"
)// DingMessage 定义消息结构体,最终字段结构需要符合官方的定义,参考链接:
//
//	https://open.dingtalk.com/document/orgapp/custom-robot-access#title-72m-8ag-pqw
type DingMessage struct {Msgtype string `json:"msgtype"`Text struct {Content string `json:"content"`} `json:"text"`At struct {AtMobiles []string `json:"atMobiles"`} `json:"at"`
}// buildDingDingContent 拼接钉钉消息的函数
func buildDingDingContent(msg template.Alert) ([]byte, error) {recM := map[string]string{"firing": "已触发", "resolved": "已恢复"}msgTpl := fmt.Sprintf("规则名称: %s\n"+"是否已经恢复: %s\n"+"告警级别: %s\n"+"触发时间: %s\n"+"看图连接: %s\n"+"当前值: %s\n"+"标签组: %s",msg.Labels["alertname"],recM[msg.Status],msg.Labels["severity"],msg.StartsAt.In(time.Local).Format("2006-01-02 15:04:05"),msg.GeneratorURL,msg.Annotations["value"],msg.Labels.SortedPairs(),)dm := DingMessage{Msgtype: "text"}dm.Text.Content = msgTplbs, err := json.Marshal(dm)return bs, err}// SendToDing 发送消息到钉钉
func SendToDing(jsonByte []byte) {// 注意哈,这个口令换成你的钉钉群机器人的webhook即可。dingDingUrl := "https://oapi.dingtalk.com/robot/send?access_token=7cd79af7b9a29f1877438f53f4be10e6f744bb0dae39bb256eee518bebe46cd5"req, err := http.NewRequest("POST", dingDingUrl, bytes.NewBuffer(jsonByte))if err != nil {log.Printf("err = %v\n", err)return}req.Header.Set("Content-Type", "application/json")client := &http.Client{}resp, err := client.Do(req)log.Printf("钉钉发送完成")if err != nil {log.Printf("http.post.request.err|url:%v|err:%v", dingDingUrl, err)return}defer resp.Body.Close()
}func AlertReceiveFunc(c *gin.Context) {var msg webhook.Messageif err := c.BindJSON(&msg); err != nil {c.JSON(400, errors.New("invalid args"))return}baseMsg := fmt.Sprintf("状态: %s|报警条数: %d", msg.Status, len(msg.Alerts))log.Printf("alertReceive|baseMsg:%+v", baseMsg)for i := 0; i < len(msg.Alerts); i++ {alert := msg.Alerts[i]bs, _ := buildDingDingContent(alert)log.Printf("detail|%d/%d|alert:%+v", i+1, len(msg.Alerts), alert)SendToDing(bs)}c.JSON(http.StatusOK, "ok")
}func main() {listenAddr := flag.String("addr", ":8888", "WebUI expose port")flag.Parse()r := gin.Default()r.POST("/alert", AlertReceiveFunc)r.Run(*listenAddr)
}

2.修改alertmanager配置文件

[root@prometheus-server31 ~]# cat /yinzhengjie/softwares/alertmanager-0.27.0.linux-amd64/alertmanager.yml 
route:group_by: ['alertname']group_wait: 1sgroup_interval: 3srepeat_interval: 10sreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:- url: 'http://10.0.0.1:8888/alert'http_config: {}max_alerts: 0send_resolved: true
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
[root@prometheus-server31 ~]# 

3.配置Prometheus的规则文件

[root@prometheus-server31 ~]# cat /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/yinzhengjie_rules.yml 
groups:
- name: xixirules:- alert: yinzhengjie_mysqld_exporter-alertexpr: node_boot_time_seconds{instance="10.0.0.42:9100", job="yinzhengjie_mysqld_exporter"} > 0labels:severity: criticalblog: "https://www.cnblogs.com/yinzhengjie"annotations:summary: DBA机器异常- name: haharules:- alert: yinzhengjie_bigdata_exporter-alertexpr: node_boot_time_seconds{instance="10.0.0.41:9100", job="yinzhengjie_bigdata_exporter"} > 0labels:severity: warningauther: 尹正杰annotations:summary: 大数据集群机器异常
[root@prometheus-server31 ~]# 

4.重启服务,观察配置是否触发告警

	1.修改Prometheus的启动脚本并添加如下的启动参数
--web.external-url=http://10.0.0.31:9090/[root@prometheus-server31 ~]# systemctl daemon-reload 2.重启服务
[root@prometheus-server31 ~]# systemctl restart prometheus-server.service alertmanager.service 如上图所示,我的测试代码已经成功发送告警啦。

5.验证钉钉配置是否生效

如上图所示,我们的配置告警信息成功啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python第八章课后习题

8.4 求微分方程组的数值解 x=-x3-y,x(0)=1,y=x-y3,y(0)=0.5,0<=t<=30,要求画出x(t)和y(t)的解曲线图形,再相平面上画出轨线点击查看代码 import matplotlib.pyplot as plt from scipy.integrate import solve_ivpdef system(t, state):x, y = statedxdt = -x**3 - …

手动安装ROS2

手动安装ROS2本文以ROS2-jazzy作为示例版本,默认已经安装好ubuntu24.04设置区域 确保你的语言环境支持UTF-8。只要系统是UTF-8语言环境,基本没有问题,可以不设置。 sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-loc…

第七章

7.1 在区间[0,10]上等间距取1000个点Xi(i为下标,i=1,2,3,...,1000),并计算在这些点Xi处函数g(x)=((3x2+4x+6)sinx)/(x2+8x+6)的函数值yi(i为下标),利用观测点(Xi,Yi)(i=1,2,3,...,1000),求三次样条插值函数h(x),并求积分g(x)从0到10和h(x)从0到10。点击查看代码 impor…

识海社区打卡-4

今天打卡大模拟 Problem - 1365D - Codeforces大模拟确实恶心人,但作为最臭的屎平时还是得多吃点,大模拟的特点是思路不算很难但代码真的很长很长,一个不小心哪里写得有问题查错就是半天,各种细节都要很注意,对于提升自己查错能力和快速写题能力还是很有帮助的,这种屎虽然…

《Django 5 By Example》阅读笔记:p54-p75

《Django 5 By Example》学习第3天,p54-p75总结,总计22页。 一、技术总结 1.分页 (1)分页:Paginator (2)页数不存在处理: EmptyPage, PageNotAnInteger 2.class-based views(类视图) (1)为什么使用类视图? 1)Organize code related to HTTP methods, such as GET, POST, o…

11.18

实验17:解释器模式(选作) 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构; 2、能够利用解释器模式解决实际问题。[实验任务一]:解释器模式 某机器人控制程序包含一些简单的英文指令,其文法规则如下: expression…

项目冲刺11.13

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第五篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Z-Library电子图书馆官方地址入口 国内最新可用镜像网址入口 客户端(持续更新)

Z-Library:自由获取知识的电子图书馆Z-Library(简称Z-Lib)。曾用名BookFinder。是一个提供广泛学术资源的影子图书馆网站。用户可以在此下载期刊、文章以及各类书籍。 其藏书量超过1000万本书籍和8000万篇文章。尽管因版权问题。Z-Library在2022年11月3日遭到封S。但它通过新…

智能驱动下的客户运营与知识管理整合策略

在数字化转型的浪潮中,智能技术的应用正深刻改变着企业的运营模式和客户服务方式。智能驱动下的客户运营与知识管理整合策略,旨在通过智能化手段,优化客户体验,提升运营效率,同时实现知识的有效管理和利用。本文将深入探讨这一策略的核心价值、实施路径及实践案例,为企业…

黑神话吉吉国王版搞笑版总共4关(附下载链接)

话不多说,上图吉吉国王版黑神话点击下载

在Clion中快速生成函数中形参注释及添加函数说明

快速生成函数中形参注释 只需要在函数前输入/**,然后按回车,这样即可快速生成如下函数形参注释。 新增函数描述 在设置界面中的搜索框中输入Code Generation,然后勾选 如下选择框,这样就可以在如上生成的代码快中新增函数描述栏 说明:有些版本可能找不到,按如下位置查找…

痞子衡嵌入式:在i.MXRT启动头FDCB里配置串行NOR Flash多个寄存器的注意事项

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是在FDCB里配置串行NOR Flash多个寄存器的注意事项。关于使用 i.MXRT 启动头 FDCB 来设置 Flash 内部寄存器,痞子衡写过如下两篇文章,在进入本文之前,建议大家先阅读下这两篇文章,有个初步了解。《在FDCB里…