监控binlog日志监控表变化进行消息通知
前言
由于我们做项目的时候有项目任务管理工具,目前用的最多的是禅道,而我们用的是redmine,而redmine是使用ruby写的,刚好我们这边没有会用ruby的人,所以就有了这样一个小工具,用于监控binlog日志通过钉钉进行任务通知。
Github项目地址
功能介绍
这款小工具通过钉钉的机器人实现群发消息,当有数据写入mysql我们监控的表中的时候,就会有一条binlog日志生成,这个时候我们通过监控到这个日志,就可以根据这条日志的数据进行消息通知。
它主要基于钉钉实现,与你的项目没有耦合,完全独立于你的项目之外。
效果
任务提醒,同时支持通过钉钉和浏览器两种方式查看你的这个任务
这个是一个定时任务,用于统计bug情况,会在每晚九点发送,但是这里面的表格在手机端的支持并不是很好,我目前没有很好的办法,大家有建议可以在评论区进行评论,我会采纳大家的建议。
使用
1、通过配置config目录下的conf文件来配置数据库、要监控的表,这里可以监控多个表
2、配置好配置文件后,你需要在redmine项目中加入自定义字段,用于存储钉钉的一个webhook和加签使用的密钥,存储格式:webhook@密钥
3、由于本项目是通过手机号通知的,所以需要大家在创建用户的时候,有一个自定义字段用于存储手机号
4、可以通过项目里面编写的Dockerfile文件两阶段构建出docker镜像,然后通过docker部署即可
技术实现
监控日志
我们通过go-mysql这个包来进行binlog日志的监控,它里面有个回调事件OnRow,在这个回调里面,会返回是什么操作,以及新旧两个版本的数据(已经解析好的)
go-mysql这个包可以做的事情有很多,例如:数据备份、数据迁移、主从同步等,是一个很方便的工具,go-mysql地址,有兴趣大家可以了解一下。
消息通知
这个使用的是钉钉的机器人进行的消息通知,具体调用的API可参考钉钉这篇文档文档地址,这里面提供了丰富的消息格式,就是对markdown语法的支持不是很好,这里发送消息安全设置是通过一个加签的方式,所以你需要按照上面使用的第二步存储密钥及webhook。