如何使用Python导出/获取Prometheus中的告警规则
Prometheus告警规则批量导出自动化方案
下面是3种可直接落地的实现方式,按落地成本从低到高排序,都支持全量拉取数百条规则、自动逐条拆分保存为txt文件:
方案1:调用Prometheus原生API实现(优先推荐,零额外部署)
Prometheus本身内置了规则查询的HTTP接口,不需要装任何额外服务,几行shell脚本就能搞定全流程,适合绝大多数部署场景。
- 核心接口为
/api/v1/rules,会返回Prometheus当前已加载的所有规则组、规则的完整配置,包含告警表达式、持续时长、标签、注解全量字段 - 直接用curl拉取接口数据,搭配jq做字段过滤和格式化,就能直接输出成可读性强的txt文件,示例脚本:
# 替换为实际环境的Prometheus访问地址 PROM_URL="http://127.0.0.1:9090" # 拉取全量告警规则,逐条格式化后写入txt curl -s -k "${PROM_URL}/api/v1/rules" | jq -r ' .data.groups[] as $group | $group.rules[] | select(.type == "alerting") | "====================================", "告警名称: " + .name, "所属规则组: " + $group.name, "所属配置文件: " + $group.file, "触发表达式: " + .query, "触发等待时长: " + (.duration // "未设置"), "关联标签: " + ((.labels // {}) | to_entries | map("\(.key)=\(.value)") | join("; ")), "告警注解: " + ((.annotations // {}) | to_entries | map("\(.key)=\(.value)") | join("; ")), "" ' > ./prometheus_all_alert_rules.txt
- 脚本执行完直接生成目标txt文件,200条规则的拉取处理过程一般不超过3秒,可以直接加到crontab定时任务里做定期自动备份,完全不需要人工干预。如果Prometheus开启了Basic Auth或者Token鉴权,在curl命令里加上
-u user:pass或者-H "Authorization: Bearer xxxx"参数即可。
方案2:从本地规则配置文件直接解析导出
如果你的Prometheus是通过本地静态YAML文件加载规则的(也就是启动参数里rule_files指定本地目录的部署模式),且你有服务器的文件访问权限,可以直接扫描规则文件解析导出,不需要依赖Prometheus服务处于运行状态。
- 实现逻辑是用yq(YAML格式处理工具,和jq用法一致)批量扫描所有规则YAML文件,提取告警类规则的字段拼接成目标格式写入txt,示例命令:
# 替换为实际的规则文件存放目录 RULE_PATH="/opt/prometheus/rules" find ${RULE_PATH} -name "*.yaml" -o -name "*.yml" | xargs -I {} yq e ' .groups[] as $group | $group.rules[] | select(.alert != null) | "====================================", "告警名称: " + .alert, "所属规则组: " + $group.name, "触发表达式: " + .expr, "触发等待时长: " + (.for // "未设置"), "关联标签: " + ((.labels // {}) | to_entries | map("\(.key)=\(.value)") | join("; ")), "告警注解: " + ((.annotations // {}) | to_entries | map("\(.key)=\(.value)") | join("; ")), "" ' {} > ./prometheus_all_alert_rules.txt
- 这个方案导出的规则顺序和本地配置文件的书写顺序完全一致,适合需要和人工维护的配置做逐行核对的场景。
方案3:基于Promtool工具导出+规则校验
如果导出规则的同时需要做规则合法性检查,可以用Prometheus官方自带的promtool命令行工具实现。
- 操作方式是先通过API拉取全量规则,或者直接指向本地规则目录,用promtool输出规则的结构化检查结果,过滤掉记录规则只保留告警规则后重定向到txt即可。
- 额外优势是导出过程会自动识别语法错误、重复告警、不合理的阈值配置,导出的同时完成规则巡检,适合对规则稳定性要求高的生产环境使用。
落地提示:
- 如果需要保留原始配置做二次处理,可以先把API返回的JSON原始结果单独存一份,后续按需调整txt的输出格式即可
- 规则里如果存在特殊字符、正则表达式,jq和yq默认会做正确转义,不会出现导出内容截断、乱码的问题
内容的提问来源于stack exchange,提问作者Oscar
相关产品推荐
相关产品推荐

