之前做了RDS监控,由于 RDS 实例数量增多,手动添加的方式已经不够效率,故改为 LLD(Low-level discovery) 方式做监控。

什么是 LLD

LLD(Low-level discovery),即低级发现,提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。例如,Zabbix 可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。此外,可以配置 Zabbix 根据定期执行发现后的得到实际结果,来移除不需要的监控。

用户可以自己定义发现类型,只要它们遵循特定的 JSON 协议。

采集数据脚本

调用阿里云 Api,采集 RDS 相关数据,相关配置可参考之前的文章,采集脚本略。

需要将 Api 返回的数据处理,将字段修改为 {#MACRO} 形式的 LLD 宏,最后生成 json 格式的数据:

例如:

1
2
3
4
5
6
7
8
9
10
[{
"{#DBINSTANCEID}": "rr-XXX",
"{#DBNAME}": "XXX"
}, {
"{#DBINSTANCEID}": "rm-XXX",
"{#DBNAME}": "XXX"
}, {
"{#DBINSTANCEID}": "rm-XXX",
"{#DBNAME}": "XXX"
}]

说明:

  • {#DBINSTANCEID}:RDS 实例 ID
  • {#DBNAME}:RDS 实例名称

💡Tips:LLD 宏必须大写,否则会报错。

配置模板

新建模板,创建自动发现规则:

image-20220706153747443

说明:

参数 说明
名称 规则名称
类型 发现的检查类型
键值 可以是内置键值,也可以是自定义
更新间隔 执行发现的时间间隔
自定义时间间隔 非必选, 灵活:允许重定义默认更新间隔,调度:可以使监控项在特定时间或时间序列生效
资源周期不足 资源失效时间,若资源失效则删除,如果设置为“0”,将立即删除实体。不建议使用“0”

创建监控原型:

image-20220706161720897

创建触发器原型:

image-20220706161842672

创建图形原型:

image-20220706161936662

以此类推,把需要监控的项目都加上去。

查看效果:

image-20220706162706844

总结

LLD 方式,大大减轻了人为添加监控告警的负担,RDS 实例的变更也不需要人为去增删监控,真正做到自动化监控。

但也带来一些问题,比如性能问题,实例越多,监控原型越多,同时执行的监控采集脚本进程就越多,服务器的负载压力越大,而且频繁调用阿里云Api也会带来一些费用成本。