告警自愈

告警自愈是夜莺的一个高级功能,可以在告警事件产生之后,自动执行一些命令,比如重启服务、清理磁盘、清理无用镜像、抓取现场、自动拉群等。

前提

需要使用 categraf 作为单机采集器,并且在 categraf 的配置中 enable ibex 功能。其次,要在服务端部署 ibex 模块,并且告诉夜莺 ibex 的地址,菜单入口:告警自愈 - 配置,后面我们计划升级把 ibex 的功能揉到夜莺里,这样就不用额外部署这个 ibex 模块了。

更新:如果你看到夜莺的 config.toml 中已经有如下配置,说明 ibex 模块已经揉进夜莺二进制了,无需额外部署 ibex 模块了:

  1. [Ibex]
  2. Enable = true
  3. RPCListen = "0.0.0.0:20090"

脚本

配置自定义脚本。相当于一个任务模板,基于脚本创建任务时会自动填充相关字段。告警规则中可以配置回调地址为 ${ibex}/345,其中 345 这个数字表示脚本的 ID,告警事件产生之后,会把告警事件的信息传给脚本,脚本去做一些自动化的动作。去哪个机器执行?就是去告警的机器执行,告警自愈场景下,会忽略脚本中默认配置的机器列表。下图是一个脚本的详情页面:

20240227162422

自愈脚本里是不用写机器列表的,告警之后夜莺会自动把告警的那个机器的标识填充到任务的机器列表里。

任务(执行历史)

历史执行的任务列表,包括夜莺告警自愈自动创建的任务以及手工创建的任务。有了这个手工创建任务的功能,实际就可以把这个功能作为一个命令执行通道来使用。比如我创建一个这样的任务:

20240227163401

这里是对两台机器执行 ps -xf 命令,并发度 1,就是一台一台执行,如果并发度是 2,就是最多同时有两台机器执行,如果并发度是 0,就是所有机器一起执行。执行完成之后,点击任务详情每台机器后面的 stdout、stderr,可以看到脚本的标准输出和标准错误输出,点击表格最上面的 stdouts、stderrs,可以看到所有机器的输出。比如我的输出如下:

20240227163710

权限问题

既然能够去机器上执行脚本,这个就对安全有很高的要求。对于临时创建任务,就看创建人对哪些业务组的机器有权限,只能对有权限的机器执行任务。对于告警规则里配置自愈回调的场景,就看告警规则的最后一个更新人的权限,如果最后一个更新人对告警的那个机器有操作权限,才能执行任务。

机器和人是如何关联的?机器是属于业务组的,业务组上又配置了团队,团队里包含了用户,所以机器和用户是通过业务组和团队关联起来的。

另外,如果告警事件里没有 ident 标签,即夜莺无法知道当前是哪个机器触发了告警,那么就不会执行自愈任务。

Windows 支持情况

Windows 也可以支持,不过现在只支持 bat 脚本。

更多资料