全部產品
Search
文件中心

Managed Service for Prometheus:通過 Prometheus Rule 代碼化管理警示規則

更新時間:Dec 11, 2025

阿里雲 Prometheus Promtoolruleup 命令用於讀取、驗證和管理 PrometheusRule 設定檔。它支援從本地目錄載入規則檔案,驗證規則的有效性,以及將規則上傳到阿里雲 Prometheus 執行個體。

本方案適用於:

  • 希望通過 IaC 方式管理所有警示規則的使用者。

  • 希望搭建 CI 流水線來發布警示規則的使用者。

準備工作

  1. 下載 promtool 工具

    curl -fsSL "https://o11y-addon-hangzhou-public.oss-cn-hangzhou.aliyuncs.com/share/promtool/install.sh" | bash
  2. 瞭解規則檔案格式

    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_prometheus

    • instance: 阿里雲 Prometheus 執行個體 ID

    • regionId: 阿里雲地區 ID,如 cn-hangzhoucn-beijing

    規則層級映射

    規則中的 labels.severity 欄位會被映射到阿里雲 Prometheus 警示規則的 level 欄位,映射規則如下:

    • warningwarning

    • criticalcritical

    • infoinfo

    • 其他值 → warning(預設)

注意事項

  1. 安全性

    • 不要在命令列中直接輸入敏感資訊(Access Key、Secret)。

    • 建議使用環境變數或設定檔管理憑證。

    • 確保規則檔案不包含敏感資訊。

  2. 資料來源配置

    • 上傳和刪除操作會作用於規則檔案中配置的所有資料來源。

    • 確保資料來源配置正確,避免誤操作。

  3. 規則覆蓋

    • 上傳操作會覆蓋目標資料來源中同名的規則群組。

    • 刪除操作會刪除指定規則群組中的所有規則。

  4. 網路要求

    • 上傳和刪除操作需要能夠訪問阿里雲 API。

    • 確保網路連接正常,且有相應的存取權限。

  5. 並行作業

    • 避免同時對同一規則群組進行上傳和刪除操作。

    • 建議在操作完成後等待一段時間再進行下一次操作。

  6. 退出碼

    • 0: 成功執行。

    • 1: 執行失敗(驗證失敗、上傳失敗、刪除失敗等)。

最佳實務

上傳規則

  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 退出。

  2. 上傳規則:驗證通過後再上傳規則到阿里雲 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): 

    輸入 yesy 繼續,其他任何輸入將取消上傳。

    上傳結果樣本:

    === 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

完整工作流程樣本

  1. 先驗證規則再上傳。

  2. 使用版本控制:

    • 將規則檔案納入版本控制系統(如 Git)。

    • 在修改規則前先備份現有配置。

  3. 分環境管理:

    • 為不同環境(開發、測試、生產)使用不同的規則檔案目錄。

    • 使用不同的資料來源配置區分環境。

  4. 規則命名規範:

    • 使用有意義的規則群組名稱,如 system_resourcesapplication_services

    • 警示名稱應清晰描述警示內容,如 HighCPUUsageServiceInstanceDown

  5. 資料來源配置:

    • 確保資料來源配置中的 instanceregionId 準確無誤。

    • 驗證執行個體 ID 是否存在且可訪問。

  6. 大量操作前確認:

    • 上傳或刪除操作會影響多個資料來源,操作前仔細檢查配置資訊。

    • 在生產環境操作前,先在測試環境驗證。

完整工作流程樣本

# 1. 查看規則檔案基本資料
promtool ruleup --dir ./example/rule

# 2. 驗證規則檔案
promtool ruleup --dir ./example/rule --check

# 3. 上傳規則到阿里雲(需要互動確認)
promtool ruleup \
  --dir ./example/rule \
  --upload \
  --access-key-id $ALIYUN_ACCESS_KEY_ID \
  --access-key-secret $ALIYUN_ACCESS_KEY_SECRET \
  --user-id $ALIYUN_USER_ID

# 4. 刪除規則(需要互動確認)
promtool ruleup \
  --dir ./example/rule \
  --delete \
  --access-key-id $ALIYUN_ACCESS_KEY_ID \
  --access-key-secret $ALIYUN_ACCESS_KEY_SECRET \
  --user-id $ALIYUN_USER_ID
環境變數
export ALIYUN_ACCESS_KEY_ID="your-access-key-id"
export ALIYUN_ACCESS_KEY_SECRET="your-access-key-secret"
export ALIYUN_USER_ID="your-user-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,返回的參數說明如下:

參數

類型

預設值

說明

--dir

string

""

包含規則 YAML 檔案的目錄路徑

--check

bool

false

檢查配置是否有效,如果發現錯誤會以非零狀態代碼退出

--upload

bool

false

上傳 PrometheusRule 到阿里雲 Prometheus 執行個體

--delete

bool

false

從阿里雲 Prometheus 執行個體刪除 PrometheusRule

--access-key-id

string

-

阿里雲 Access Key ID(上傳或刪除時必需)

--access-key-secret

string

-

阿里雲 Access Key Secret(上傳或刪除時必需)

--user-id

string

-

阿里雲 User ID(上傳或刪除時必需)