Managed Service for Prometheus の promtool の ruleup コマンドは、PrometheusRule 設定ファイルを読み取り、検証し、管理します。ローカルディレクトリからルールファイルを読み込み、検証し、Managed Service for Prometheus インスタンスにアップロードします。
このソリューションは、以下の場合に適用されます。
Infrastructure as Code (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_prometheusのみがサポートされています。instance:Managed Service for Prometheus インスタンスの ID を指定します。regionId:Alibaba Cloud リージョン ID を指定します。例:cn-hangzhou、cn-beijing。
ルールレベルのマッピング
ルール内の
labels.severityフィールドは、Managed Service for Prometheus のアラートルールのlevelフィールドにマッピングされます。マッピングは次のとおりです。warning→warningcritical→criticalinfo→infoその他の値 →
warning(デフォルト)
注意事項
セキュリティ
AccessKey ID や AccessKey Secret などの機密情報をコマンドラインに直接入力しないでください。
環境変数または設定ファイルを使用して認証情報を管理してください。
ルールファイルに機密情報が含まれていないことを確認してください。
データソースの設定
アップロードおよび削除操作は、ルールファイルで設定されているすべてのデータソースに影響します。
操作エラーを防ぐために、データソースの設定が正しいことを確認してください。
ルールの上書き
アップロード操作は、ターゲットデータソース内の同じ名前のルールグループを上書きします。
削除操作は、指定されたルールグループ内のすべてのルールを削除します。
ネットワーク要件
アップロードおよび削除操作には、Alibaba Cloud API へのアクセスが必要です。
安定したネットワーク接続と必要なアクセス権限があることを確認してください。
同時操作
同じルールグループに対して、同時にアップロードと削除を行わないでください。
操作が完了したら、次の操作を開始する前に少し待機してください。
終了コード
0:操作は成功しました。1:操作は失敗しました。これは、検証の失敗、アップロードの失敗、または削除の失敗が原因である可能性があります。
ベストプラクティス
ルールのアップロード
ルールファイルの検証:ルールファイルを検証して、その整合性と Prometheus Query Language (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 で終了します。
ルールのアップロード:ルールが検証された後、Managed Service for 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.
Managed Service for Prometheus からのルールの削除
指定されたルールグループを Managed Service for 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 が存在し、アクセス可能であることを確認します。
バッチ操作前の確認:
アップロードまたは削除操作は、複数のデータソースに影響を与える可能性があります。続行する前に、設定情報を注意深く確認してください。
本番環境で操作を実行する前に、ステージング環境で検証してください。
一般的なエラー
ディレクトリ内にルールファイルが見つからない
原因:指定されたディレクトリにルールファイルが見つかりませんでした。
解決策:ディレクトリパスが正しいか確認してください。ディレクトリに有効な YAML ルールファイルが含まれていることを確認してください。
PrometheusRule ファイルが見つからない
原因:ディレクトリ内に PrometheusRule タイプのファイルが見つかりませんでした。
解決策:少なくとも 1 つのファイルに PrometheusRule 設定が含まれていることを確認してください。
PrometheusRule にルールグループが見つからない
原因:PrometheusRule ファイルにルールグループが設定されていません。
解決策:ルールファイルに少なくとも 1 つの
groups設定を追加してください。
PrometheusRule にデータソースが設定されていない
原因:ルールファイルにデータソースが設定されていません。
解決策:ルールファイルの先頭に
datasources設定を追加してください。
データソース [N] に instance フィールドがない
原因:データソース設定で
instanceフィールドがないか、その値が空です。解決策:各データソースに有効な
instance値を設定してください。
データソース [N] に regionId フィールドがない
原因:データソース設定で
regionIdフィールドがないか、その値が空です。解決策:各データソースに有効な
regionId値を設定してください。
ルールの検証に失敗した
原因:ルールの検証に失敗しました。これは、PromQL の構文エラーまたは必須フィールドの欠落が原因である可能性があります。
解決策:
--checkパラメーターを使用して詳細な検証エラーメッセージを確認してください。エラーを修正して再試行してください。
--upload が設定されている場合、--access-key-id は必須
原因:
--uploadを使用したときに AccessKey ID が指定されていませんでした。解決策:
--access-key-idパラメーターを追加してください。
--upload が設定されている場合、--user-id は必須
原因:
--uploadを使用したときにユーザー ID が指定されていませんでした。解決策:
--user-idパラメーターを追加してください。
関連ドキュメント
ruleup コマンドのヘルプ
promtool ruleup --help を実行して、コマンドのヘルプを表示します。次の表にパラメーターを示します。
パラメーター | タイプ | デフォルト値 | 説明 |
| string |
| YAML ルールファイルを含むディレクトリのパス。 |
| bool |
| 設定が有効かどうかをチェックします。エラーが見つかった場合、コマンドはゼロ以外の状態コードで終了します。 |
| bool |
| PrometheusRule を Managed Service for Prometheus インスタンスにアップロードします。 |
| bool |
| Managed Service for Prometheus インスタンスから PrometheusRule を削除します。 |
| string | - | ご利用の Alibaba Cloud アカウントの AccessKey ID。このパラメーターは、アップロードまたは削除に必要です。 |
| string | - | ご利用の Alibaba Cloud アカウントの AccessKey Secret。このパラメーターは、アップロードまたは削除に必要です。 |
| string | - | ご利用の Alibaba Cloud アカウントの ID。このパラメーターは、アップロードまたは削除に必要です。 |