阿里雲 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(上傳或刪除時必需) |