SRE-DevOps不得不懂的:Prometheus的配置工程化
背景 Prometheus有两个最基本的组件:一个是Prometheus程序,一个是Alertmanager程序。 它们的职责分工很明确: Prometheus程序负责:定时拉取监控指标数据、存储指标数据、根据告警规则发起告警通知; Alertmanager程序负责:负责告警通知的路由,即当接收到Prometheus程序的通知后,该将通知以何种方式通知给谁。 Prometheus程序的配置最核心的配置是: # ... # 当指标数据符合什么规则进行告警通知。 # 在其它文件定义,这里只是引用该文件的路径。 rule_files: [ - <filepath_glob> ... ] # 从哪里,该如何拉取指标 scrape_configs: [ - <scrape_config> ... ] # ... Alertmanager程序的配置最核心的配置是: # ... # 告警通知路由规则 route: [- <route_config>-] # 告警通知的接收者列表,部分监控告警平台也称之为channel receivers: [- <receivers>-] # ... 在实际工作中,Prometheus和Alertmanager的配置会非常大。 严谨的软件工程要求我们在真正部署这些配置前,对其进行有效性和正确性的检查。否则SRE/DevOps的工程效率就会很低,因为你需要手工调试庞大的配置。 所以,我们需要有一种高效率的方式来保证配置的有效性和正确性。 保证Prometheus程序配置的有效性和正确性 promtool Prometheus程序提供了一个叫promtool的命令行程序。解压Prometheus的程序包后,你会发现它和Prometheus程序放在一个文件夹中。 promtool提供了一些子命令来保证Prometheus程序配置的有效性和正确性: # 校验Prometheus配置的有效性,它支持--lint="duplicate-rules"参数,用于检查重复的rule配置 check config [<flags>] <config-files>... # 校验rule配置的有效性 check rules [<flags>] <rule-files>... # 执行rules单元测试用例 test rules <test-rule-file>... 至于有效性检查,只需要执行check子命令即可,不需要过多说明。 ...