このページでは、Cloud Monitoring API を使用して PromQL ベースのアラート ポリシーを作成する方法について説明します。アラート ポリシーで PromQL クエリを使用すると、比率、動的しきい値、指標評価などの機能を設定した複雑な条件を作成できます。
一般的な情報については、PromQL ベースのアラートの概要をご覧ください。
Cloud Monitoring 外部の Prometheus 環境で作業しており、Prometheus アラートルールを設定している場合は、Google Cloud CLI を使用して、アラートルールを Monitoring の PromQL ベースのアラート ポリシーに移行できます。詳細については、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 の呼び出しをご覧ください。
指標の存在チェックを無効にする
PromQL ベースのアラート ポリシーを作成すると、 Google Cloudは検証を実行し、条件で参照されている指標が Monitoring にすでに存在するかどうか確認します。ただし、指標が存在する前にアラート ポリシーを作成する必要がある場合は、この検証をオーバーライドできます。たとえば、自動化を使用して、事前定義されたアラート ポリシーの標準セットが割り当てられた新しいプロジェクトを作成する場合は、この方法が適しています。検証を無効にしないと、基盤となる指標が作成されるまでアラート ポリシーの作成が失敗します。
指標の存在チェックを無効にするには、PrometheusQueryLanguageCondition に "disableMetricValidation": true フィールドを追加します。
{
"query": string,
"duration": string,
"evaluationInterval": string,
"labels": {string: string},
"ruleGroup": string,
"disableMetricValidation": true,
"alertRule": string
}
アラート ポリシーの条件が存在しない指標を参照している場合、条件は評価間隔に従って実行されます。ただし、クエリ結果は常に空になります。基になる指標が存在すると、クエリはデータを返します。
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-projectGoogle 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....