Blog:博客园个人
之前做了RDS监控,由于 RDS 实例梳理增多,手动添加的方式已经不够效率,故改为LLD(Low-level discovery)方式做监控。
什么是LLD
LLD(Low-level discovery),即低级发现,提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。此外,可以配置Zabbix根据定期执行发现后的得到实际结果,来移除不需要的监控。
用户可以自己定义发现类型,只要它们遵循特定的JSON协议。
采集数据脚本
调用阿里云Api,采集RDS相关数据,相关配置可参考之前的文章,采集脚本略。
需要将Api返回的数据处理,将字段修改为{#MACRO}
形式的LLD宏,最后生成json格式的数据:
例如:
[{
"{#DBINSTANCEID}": "rr-XXX",
"{#DBNAME}": "XXX"
}, {
"{#DBINSTANCEID}": "rm-XXX",
"{#DBNAME}": "XXX"
}, {
"{#DBINSTANCEID}": "rm-XXX",
"{#DBNAME}": "XXX"
}]
说明:
{#DBINSTANCEID}
:RDS实例ID{#DBNAME}
:RDS实例名称
Tips:LLD宏必须大写,否则会报错。
配置模板
新建模板,创建自动发现规则:
说明:
参数 | 说明 |
---|---|
名称 | 规则名称 |
类型 | 发现的检查类型 |
键值 | 可以是内置键值,也可以是自定义 |
更新间隔 | 执行发现的时间间隔 |
自定义时间间隔 | 非必选, 灵活:允许重定义默认更新间隔,调度:可以使监控项在特定时间或时间序列生效 |
资源周期不足 | 资源失效时间,若资源失效则删除,如果设置为“0”,将立即删除实体。不建议使用“0” |
创建监控原型:
创建触发器原型:
创建图形原型:
以此类推,把需要监控的项目都加上去。
查看效果:
总结
LLD方式,大大减轻了人为添加监控的负担,RDS实例的变更也不需要人为去增删监控,真正做到自动化监控。
但也带来一些问题,比如性能问题,实例越多,监控原型越多,同时执行的监控采集脚本进程就越多,服务器的负载压力越大,而且频繁调用阿里云Api也会带来一些费用成本。
因此,这个监控方案仅限于阿里云RDS实例数量不太多的场景。若实例数量很多,可以考虑增加缓存,一次性读取数据,将数据存于缓存,然后监控客户端从缓存中读取数据,减少调用采集脚本的频率。