阿里云 Prometheus Promtoolruleup 命令用于读取、验证和管理 PrometheusRule 配置文件。它支持从本地目录加载规则文件,验证规则的有效性,以及将规则上传到阿里云 Prometheus 实例。
本方案适用于:
希望通过 IaC 方式管理所有告警规则的用户。
希望搭建 CI 流水线来发布告警规则的用户。
准备工作
下载 promtool 工具
curl -fsSL "https://o11y-addon-hangzhou-public.oss-cn-hangzhou.aliyuncs.com/share/promtool/install.sh" | bash了解规则文件格式
PrometheusRule规则文件必须符合以下格式:
# 扩展字段,数据源配置(必需) datasources: - type: aliyun_prometheus # instance: <prometheus-instance-id> regionId: <region-id> # 规则组 groups: - name: <group-name> interval: <evaluation-interval> # 可选,如 "30s" rules: - alert: <alert-name> expr: <promql-expression> for: <duration> # 可选,如 "5m" labels: severity: <severity-level> # warning, critical, info 等 # 其他标签... annotations: summary: <summary-text> description: <description-text> # 其他注解...数据源配置说明
type: 数据源类型,目前支持aliyun_prometheusinstance: 阿里云 Prometheus 实例 IDregionId: 阿里云区域 ID,如cn-hangzhou、cn-beijing等
规则级别映射
规则中的
labels.severity字段会被映射到阿里云 Prometheus 告警规则的level字段,映射规则如下:warning→warningcritical→criticalinfo→info其他值 →
warning(默认)
注意事项
安全性
不要在命令行中直接输入敏感信息(Access Key、Secret)。
建议使用环境变量或配置文件管理凭证。
确保规则文件不包含敏感信息。
数据源配置
上传和删除操作会作用于规则文件中配置的所有数据源。
确保数据源配置正确,避免误操作。
规则覆盖
上传操作会覆盖目标数据源中同名的规则组。
删除操作会删除指定规则组中的所有规则。
网络要求
上传和删除操作需要能够访问阿里云 API。
确保网络连接正常,且有相应的访问权限。
并发操作
避免同时对同一规则组进行上传和删除操作。
建议在操作完成后等待一段时间再进行下一次操作。
退出码
0: 成功执行。1: 执行失败(验证失败、上传失败、删除失败等)。
最佳实践
上传规则
验证规则文件:检查规则文件的有效性,包括 PromQL 表达式语法、规则配置完整性等。
promtool ruleup --dir /path/to/rules --check输出示例(验证通过):
Found 1 rule file(s) in directory: /path/to/rules File: /path/to/rules/prometheus-rules.yml Type: prometheus Validation: OK输出示例(验证失败):
Found 1 rule file(s) in directory: /path/to/rules File: /path/to/rules/prometheus-rules.yml Type: prometheus Validation errors: - group "system_resources": rule "HighCPUUsage": invalid PromQL expression: syntax error - group "application_services": rule "HighHTTPErrorRate": missing 'for' duration如果验证失败,命令会以退出码 1 退出。
上传规则:验证通过后再上传规则到阿里云 Prometheus。
promtool ruleup --dir /path/to/rules --upload --access-key-id YOUR_ACCESS_KEY_ID --access-key-secret YOUR_ACCESS_KEY_SECRET --user-id YOUR_USER_ID交互式确认:命令会显示上传配置信息并要求确认:
=== Upload Configuration === User ID: 123456789 Rule groups to upload: 5 [1] system_resources (4 rules) [2] application_services (4 rules) [3] database (3 rules) [4] kubernetes (3 rules) [5] business_metrics (2 rules) Total rules to upload: 16 Datasources: 2 [1] Region: cn-hangzhou, Instance: rw-dfaa8e87409285b4b422b3c862ee [2] Region: cn-beijing, Instance: rw-abc123456789 Workspace: will be automatically retrieved from instance Do you want to proceed with the upload? (yes/no):输入
yes或y继续,其他任何输入将取消上传。上传结果示例:
=== Upload Result === Total uploads: 10 (rule groups × datasources) Success: 10, Failed: 0 Datasource [1]: Region=cn-hangzhou, Instance=rw-dfaa8e87409285b4b422b3c862ee Group: system_resources, Request ID: 12345678-1234-1234-1234-123456789abc Uploaded rules: 4 - HighCPUUsage (ID: rule-001, Status: enabled, Level: warning) - HighMemoryUsage (ID: rule-002, Status: enabled, Level: warning) - HighDiskUsage (ID: rule-003, Status: enabled, Level: critical) - HighDiskIO (ID: rule-004, Status: enabled, Level: warning) Upload completed! 10 datasource(s) succeeded.
删除阿里云 Prometheus 中的规则
从阿里云 Prometheus 实例中删除指定的规则组。删除前会进行与上传相同的验证。
promtool ruleup \
--dir /path/to/rules \
--delete \
--access-key-id YOUR_ACCESS_KEY_ID \
--access-key-secret YOUR_ACCESS_KEY_SECRET \
--user-id YOUR_USER_ID交互式确认:命令会显示删除配置信息并要求确认。
=== Delete Configuration ===
User ID: 123456789
Rule groups to delete: 5
[1] system_resources
[2] application_services
[3] database
[4] kubernetes
[5] business_metrics
Datasources: 2
[1] Region: cn-hangzhou, Instance: rw-dfaa8e87409285b4b422b3c862ee
[2] Region: cn-beijing, Instance: rw-abc123456789
WARNING: This will delete all rules in the specified groups from the datasources!
Do you want to proceed with the deletion? (yes/no): 删除结果示例:
=== Delete Result ===
Total deletions: 10 (rule groups × datasources)
Success: 10, Failed: 0
Datasource [1]: Region=cn-hangzhou, Instance=rw-dfaa8e87409285b4b422b3c862ee
Group: system_resources deleted, Request ID: 12345678-1234-1234-1234-123456789abc
All rules in group deleted successfully
Deletion completed! 10 deletion(s) succeeded.查看规则文件基本信息
显示指定目录中所有规则文件的基本信息,包括文件类型、规则组数量、数据源数量等。
promtool ruleup --dir /path/to/rules输出示例:
Found 2 rule file(s) in directory: /path/to/rules
File: /path/to/rules/prometheus-rules.yml
Type: prometheus
PrometheusRule: 5 group(s), 2 datasource(s)
Total rules: 15
File: /path/to/rules/alertmanager.yml
Type: alertmanager
AlertManagerRule: 3 receiver(s)
Route configured: yes完整工作流程示例
先验证规则再上传。
使用版本控制:
将规则文件纳入版本控制系统(如 Git)。
在修改规则前先备份现有配置。
分环境管理:
为不同环境(开发、测试、生产)使用不同的规则文件目录。
使用不同的数据源配置区分环境。
规则命名规范:
使用有意义的规则组名称,如
system_resources、application_services。告警名称应清晰描述告警内容,如
HighCPUUsage、ServiceInstanceDown。
数据源配置:
确保数据源配置中的
instance和regionId准确无误。验证实例 ID 是否存在且可访问。
批量操作前确认:
上传或删除操作会影响多个数据源,操作前仔细检查配置信息。
在生产环境操作前,先在测试环境验证。
常见错误
No rule files found in directory
原因:指定目录中没有找到规则文件。
解决:检查目录路径是否正确,确保目录中包含有效的 YAML 规则文件。
No PrometheusRule file found
原因:目录中没有找到 PrometheusRule 类型的文件。
解决:确保至少有一个文件包含 PrometheusRule 配置。
No rule groups found in PrometheusRule
原因:PrometheusRule 文件中没有配置规则组。
解决:在规则文件中添加至少一个
groups配置。
No datasources configured in PrometheusRule
原因:规则文件中没有配置数据源。
解决:在规则文件顶部添加
datasources配置。
Datasource [N] missing 'instance' field
原因:数据源配置中缺少
instance字段或值为空。解决:为每个数据源配置有效的
instance值。
Datasource [N] missing 'regionId' field
原因:数据源配置中缺少
regionId字段或值为空。解决:为每个数据源配置有效的
regionId值。
Rule validation failed
原因:规则验证失败,可能是 PromQL 表达式语法错误、缺少必需字段等。
解决:使用
--check参数查看详细的验证错误信息,修复后重试。
--access-key-id is required when --upload is set
原因:使用
--upload时未提供 Access Key ID。解决:添加
--access-key-id参数。
--user-id is required when --upload is set
原因:使用
--upload时未提供 User ID。解决:添加
--user-id参数。
相关参考
ruleup 命令帮助
执行promtool ruleup --help,返回的参数说明如下:
参数 | 类型 | 默认值 | 说明 |
| string |
| 包含规则 YAML 文件的目录路径 |
| bool |
| 检查配置是否有效,如果发现错误会以非零状态码退出 |
| bool |
| 上传 PrometheusRule 到阿里云 Prometheus 实例 |
| bool |
| 从阿里云 Prometheus 实例删除 PrometheusRule |
| string | - | 阿里云 Access Key ID(上传或删除时必需) |
| string | - | 阿里云 Access Key Secret(上传或删除时必需) |
| string | - | 阿里云 User ID(上传或删除时必需) |