【背景】关于在使用StarRocks企业版,由于license过期时间没有对应的提醒机制,导致发生一次生产事故,用户使用manager登陆不上,而历史SQL语句是保留在manager的,从而引发生产业务临时时间,虽然新的license在未来24小时内已经到位,于是目前先做一块介于license获取过期时间的监控工具。
【业务影响】 生产
【StarRocks版本】例如:2.2.12
【集群规模】例如:3fe + 19be(fe与be独立)
-
开发思路
通过首次登陆拿到response Cookies,再次根据时间戳提交旧Cookies以拿到manager页面信息 -
语言
Go -
配置文件
支持多个集群
yaml配置文件 starrocks: #集群名称: [manager登录地址,登录账号,登录密码] cluster1: [http://ip:port:19321,user,password] cluster2: [http://ip:port:19321,user,password] cluster3: [http://ip:port:19321,user,password] cluster4: [http://ip:port:19321,user,password]
- 支持使用crontab模式挂在后台,把注释放开重新封装
go func() {
crontab := cron.New()
// 添加定时任务, * * * * * 是 crontab,表示每分钟执行一次
_, err := crontab.AddFunc(util.Config.GetString(“starrocks.license.crontab”), license)
if err != nil {
util.Logger.Error(err.Error())
return
}
// 启动定时器
crontab.Start()
// 定时任务是另起协程执行的,这里使用 select 简答阻塞.实际开发中需要
// 根据实际情况进行控制
select {}
}()
- 运行结果
根据配置文件信息,获取license过期时间 2023-08-21T23:52:30.129+0800 info log format is success. 2023-08-21T23:52:30.129+0800 info license 检测 2023-08-21T23:52:30.372+0800 info {"code":20000,"data":{"roles":["Node_priv","Admin_priv","","(false)"]}} 2023-08-21T23:52:30.401+0800 info {"code":20000,"data":{"roles":["NODE","ADMIN"]}} 2023-08-21T23:52:30.475+0800 info {"code":20000,"data":{"roles":["Node_priv","Admin_priv","","(false)"]}} 2023-08-21T23:52:30.541+0800 info {"code":20000,"data":{"roles":["Node_priv","Admin_priv"]}} 2023-08-21T23:52:30.611+0800 info {"code":20000,"list":[{"cores":288,"expire_at":1694102400000,"hosts":9}],"total":1} 2023-08-21T23:52:30.611+0800 info 现在日期:1692633150611,到期日期:1694102400000 2023-08-21T23:52:30.612+0800 info 集群:cluster5,核数:288,license过期时间:2023-09-08 00:00:00,节点数:9, license 18天后将过期! 2023-08-21T23:52:30.612+0800 info cluster5 现在day的值是:18 2023-08-21T23:52:30.661+0800 info {"code":20000,"list":[{"cores":120,"expire_at":1694102400000,"hosts":9}],"total":1} 2023-08-21T23:52:30.661+0800 info 现在日期:1692633150661,到期日期:1694102400000 2023-08-21T23:52:30.661+0800 info 集群:cluster6,核数:120,license过期时间:2023-09-08 00:00:00,节点数:9, license 18天后将过期! 2023-08-21T23:52:30.661+0800 info cluster6 现在day的值是:18 2023-08-21T23:52:30.737+0800 info {"code":20000,"data":{"roles":["Node_priv","Admin_priv","","(false)"]}} 2023-08-21T23:52:30.822+0800 info {"code":20000,"list":[{"cores":304,"expire_at":1694102400000,"hosts":11}],"total":1} 2023-08-21T23:52:30.822+0800 info 现在日期:1692633150822,到期日期:1694102400000 2023-08-21T23:52:30.822+0800 info 集群:cluster3,核数:304,license过期时间:2023-09-08 00:00:00,节点数:11, license 18天后将过期! 2023-08-21T23:52:30.822+0800 info cluster3 现在day的值是:18 2023-08-21T23:52:30.938+0800 info {"code":20000,"list":[{"cores":480,"expire_at":1694102400000,"hosts":15}],"total":1} 2023-08-21T23:52:30.938+0800 info 现在日期:1692633150938,到期日期:1694102400000 2023-08-21T23:52:30.938+0800 info 集群:cluster4,核数:480,license过期时间:2023-09-08 00:00:00,节点数:15, license 18天后将过期! 2023-08-21T23:52:30.939+0800 info cluster4 现在day的值是:18 2023-08-21T23:52:31.220+0800 info {"code":20000,"list":[{"cores":576,"expire_at":1694102400000,"hosts":9}],"total":1} 2023-08-21T23:52:31.220+0800 info 现在日期:1692633151220,到期日期:1694102400000 2023-08-21T23:52:31.220+0800 info 集群:cluster2,核数:576,license过期时间:2023-09-08 00:00:00,节点数:9, license 18天后将过期! 2023-08-21T23:52:31.220+0800 info cluster2 现在day的值是:18 2023-08-21T23:52:31.365+0800 info {"code":20000,"data":{"roles":["Node_priv","Admin_priv","","(false)"]}} 2023-08-21T23:52:32.537+0800 info {"code":20000,"list":[{"cores":1336,"expire_at":1694102400000,"hosts":22},{"cores":1336,"expire_at":1694102400000,"hosts":22}],"total":2} 2023-08-21T23:52:32.537+0800 info 现在日期:1692633152537,到期日期:1694102400000 2023-08-21T23:52:32.537+0800 info 集群:cluster1,核数:1336,license过期时间:2023-09-08 00:00:00,节点数:22, license 18天后将过期! 2023-08-21T23:52:32.537+0800 info cluster1 现在day的值是:18 2023-08-21T23:52:32.537+0800 info done!