前言
prometheus 没有动态新增修改rule_files(告警规则),scrape_configs(抓取规则)的接口,只是提供了相应的xxx_sd_config,服务发现模块,可以动态配置targets(抓取节点)。
参考文档
官方配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/。
支持discovery列表文档:https://github.com/prometheus/prometheus/blob/main/plugins.yml。
需求
需要支持动态配置,实时更新scrape_configs+rule_files配置文件。现考虑以下几种方案。
prometheus架构
动态配置方案
方案1(推荐)
prometheus+confd+(redis/zookeeper)+reload interface
当前方式是业内比较推荐的动态配置修改方案,不过成本在于需要在引入一个confd组件。不过开发效率会大点。
组件
confd:文档,起更新动态功能的作用。一般情况下建议自己定制开发一个。本人的业务便是自己定制开发的,灵活性更高。
redis/zookeeper:配置存储和配置中心作用。
操作流程
1,运维中心发布配置服务模板到配置中心,包括reload命令
2,运维中心发布配置信息
3,confd感知配置文件变化,生成新的文件,调用reload命令。
方案2
prometheus+crontab shell +HTTP SD+reload interface
组件
crontab:linux定时任务。
shell:配置文件更新脚本。
hdfs:配置文件存储。
HTTP SD:文档,使用HTTP Service Discovery的方式提供targets发现,不过也是机器级别的,这样的话,需要固定一个job name,同时scrape_interval抓取时间也固定,然后使用不同的label来区分不同的业务指标。
操作流程
此方案和方案1差不多,方案简单没依赖啥东西,不需要做什么特殊业务定制或者复杂逻辑的推荐使用,只是把confd+config server改成了 hdfs+crontab+shell,使用shell定时去拉去配置替换文件,并reload服务。