このページでは、Cloud Monitoring API を使用して PromQL ベースのアラート ポリシーを作成する方法について説明します。アラート ポリシーで PromQL クエリを使用すると、比率、動的しきい値、指標評価などの機能を設定した複雑な条件を作成できます。
一般的な情報については、PromQL を使用したアラート ポリシーをご覧ください。
Cloud Monitoring 外部の Prometheus 環境で作業しており、Prometheus アラートルールを設定している場合は、Google Cloud CLI を使用して、アラートルールを PromQL クエリによる Monitoring アラート ポリシーに移行できます。詳細については、Prometheus からアラートのルールとレシーバーを移行するをご覧ください。
PromQL クエリを使用してアラート ポリシーを作成する
alertPolicies.create
メソッドを使用して、アラート ポリシーをプログラムで作成します。
PromQL ベースのアラート ポリシーの作成と他のアラート ポリシーの作成の唯一の違いは、Condition
タイプが PrometheusQueryLanguageCondition
でなければならないことです。この条件タイプを使用すると、PromQL でアラート ポリシーを定義できます。
kube-state
エクスポータの指標を使用して、過去 30 分間にコンテナが再起動された回数を確認するアラート ポリシー条件に対する PromQL クエリを次に示します。
rate(kube_pod_container_status_restarts[30m]) * 1800 > 1
アラート ポリシーの作成
PromQL ベースのアラート ポリシーを作成するには、AlertPolicy
条件タイプ PrometheusQueryLanguageCondition
を使用します。PrometheusQueryLanguageCondition
の構造は次のとおりです。
{ "query": string, "duration": string, "evaluationInterval": string, "labels": {string: string}, "ruleGroup": string, "alertRule": string }
PrometheusQueryLanguageCondition
フィールドの定義は次のとおりです。
query
: 評価する PromQL 式。標準の Prometheus アラートルールのexpr
フィールドと同等です。duration
: アラート ポリシーの条件が満たされるまでに、クエリの各評価でtrue
値が生成されるまでの時間を指定します。値は時間(分)で、秒単位で表されます。たとえば、600s
は 10 分の期間です。詳細については、指標ベースのアラート ポリシーの動作をご覧ください。evaluationInterval
: クエリの PromQL 評価の間隔(秒単位)。デフォルト値は 30 秒です。もしPrometheusQueryLanguageCondition
は Prometheus アラートルールを移行して作成された場合、 この値は Prometheus アラートルールが含まれた Prometheus ルールグループから取得されます。labels
: PromQL 式の結果にラベルを追加または上書きする方法(省略可)。ruleGroup
: アラート ポリシーが Prometheus 構成ファイルから移行された場合、このフィールドには Prometheus のルールグループのname
フィールドの値が含まれます。Cloud Monitoring API で PromQL アラート ポリシーを作成する場合は、このフィールドは必要ありません。alertRule
: アラート ポリシーが Prometheus 構成ファイルから移行された場合、このフィールドには Prometheus のアラートルールのalert
フィールドの値が含まれます。Cloud Monitoring API で PromQL アラート ポリシーを作成する場合は、このフィールドは必要ありません。
たとえば、次の条件では PromQL クエリを使用して、過去 30 分間にコンテナが再起動された回数を確認します。
"conditionPrometheusQueryLanguage": { "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1", "duration": "600s", evaluationInterval: "60s", "alertRule": "ContainerRestartCount", "labels": { "action_required":"true", "severity":"critical/warning/info"} }
この構造を条件内の conditionPrometheusQueryLanguage
フィールドの値として使用します。この値は、アラート ポリシー構造に埋め込まれます。これらの構造について詳しくは、AlertPolicy
をご覧ください。
JSON 内で PrometheusQueryLanguageCondition
条件を使用する完全なポリシーを以下に示します。
{ "displayName": "Container Restarts", "documentation": { "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.", "mimeType": "text/markdown", "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes." }, "userLabels": {}, "conditions": [ { "displayName": "Container has restarted", "conditionPrometheusQueryLanguage": { "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800", "duration": "600s", evaluationInterval: "60s", "alertRule": "ContainerRestart", "labels": { "action_required":"true", "severity":"critical/warning/info"} } } ], "combiner": "OR", "enabled": true }
アラート ポリシーを作成する
アラート ポリシーを作成するには、アラート ポリシー JSON を POLICY_NAME.json と呼ばれるファイルに追加し、次のコマンドを実行します。
curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies
アラート ポリシー用の Monitoring API の詳細については、API によるアラート ポリシーの管理をご覧ください。
curl
の使用の詳細については、curl
の呼び出しをご覧ください。
Terraform を使用する
以下を使用して PromQL ベースのアラート ポリシーを構成する手順については、
詳細については、google_monitoring_alert_policy
Terraform
レジストリのcondition_prometheus_query_language
セクションをご覧ください。
Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。
curl
の呼び出し
各 curl
呼び出しには一連の引数が含まれ、API リソースの URL がそれに続きます。一般的な引数には、Google Cloud プロジェクト ID と認証トークンが含まれます。これらの値は、ここでは PROJECT_ID
および TOKEN
環境変数で表されます。
HTTP リクエストのタイプ(たとえば、-X DELETE
)を指定する場合など、他の引数を指定する必要がある場合もあります。デフォルトのリクエストは GET
であるため、例では指定していません。
各 curl
呼び出しは、次の一般的な構造をしています。
curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
curl
を使用するには、プロジェクト ID とアクセス トークンを指定する必要があります。入力とエラーを減らすために、これらを環境変数に入れて curl
に渡すことができます。
これらの変数を設定するには、次のことを行います。
指標スコープのスコープ プロジェクト ID を保持する環境変数を作成します。次の手順では、変数
PROJECT_ID
を呼び出します。PROJECT_ID=a-sample-project
Google Cloud CLI に対して認証を行います。
gcloud auth login
省略可。各
gcloud
コマンドでのプロジェクト ID の指定を不要にするには、gcloud CLI を使用してプロジェクト ID をデフォルトとして設定します。gcloud config set project ${PROJECT_ID}
認証トークンを作成し、環境変数にキャプチャします。次の手順では、変数
TOKEN
を呼び出します。TOKEN=`gcloud auth print-access-token`
アクセス トークンは定期的に更新する必要があります。動作していたコマンドに急に未認証と報告された場合は、このコマンドを再発行します。
アクセス トークンがあることを確認するには、
TOKEN
変数をエコーします。echo ${TOKEN} ya29.GluiBj8o....