Esta página descreve como criar uma política de alertas com uma condição baseada em PromQL usando a API Cloud Monitoring. É possível usar consultas PromQL nas políticas de alerta para criar condições complexas com recursos como proporções, limites dinâmicos e avaliação de métricas.
Para informações gerais, consulte Políticas de alertas com o PromQL.
Se você trabalha em um ambiente do Prometheus fora do Cloud Monitoring e tiver regras de alerta do Prometheus, use a CLI do Google Cloud para migrá-las para políticas de alerta do Monitoring com uma consulta PromQL. Para mais informações, consulte Migrar regras de alerta e receptores do Prometheus.
Criar políticas de alertas com consultas PromQL
Use o método alertPolicies.create
para
criar políticas de alerta programaticamente.
A única diferença entre a criação de políticas de alertas
Condições baseadas em PromQL
e outras políticas de alertas é que seu Condition
tipo precisa ser PrometheusQueryLanguageCondition
.
Esse tipo de condição permite que as políticas de alerta sejam definidas com PromQL.
Veja a seguir uma consulta PromQL para uma política de alertas
condição que usa uma métrica do exportador kube-state
para encontrar o número
de vezes que um contêiner foi reiniciado nos últimos 30 minutos:
rate(kube_pod_container_status_restarts[30m]) * 1800 > 1
Como criar a política de alertas
Para criar uma política de alertas com uma condição baseada em PromQL, use o tipo de condição
AlertPolicy
PrometheusQueryLanguageCondition
.
O PrometheusQueryLanguageCondition
tem a seguinte estrutura:
{ "query": string, "duration": string, "evaluationInterval": string, "labels": {string: string}, "ruleGroup": string, "alertRule": string }
Os campos PrometheusQueryLanguageCondition
têm as seguintes definições:
query
: a expressão PromQL a ser avaliada. Equivalenteexpr
de uma regra de alertas padrão do Prometheus.duration
: especifica o período em que cada avaliação da consulta precisa gerar um valortrue
antes que a política de alertas seja acionada. O valor precisa ser um número de minutos, expresso em segundos. Por exemplo,600s
para uma duração de 10 minutos. Para mais informações, consulte Comportamento de políticas de alertas baseadas em métricas.evaluationInterval
: o intervalo de tempo, em segundos, entre as avaliações do PromQL da consulta. O valor padrão é de 30 segundos. Se oPrometheusQueryLanguageCondition
foi criado migrando uma regra de alerta do Prometheus, esse valor vem do grupo de regras do Prometheus que continha a regra de alerta do Prometheus.labels
: uma maneira opcional de adicionar ou substituir rótulos no resultado da expressão do PromQL.ruleGroup
: se a política de alerta foi migrada de um arquivo de configuração do Prometheus, esse campo contém o valor do camponame
do grupo de regras no arquivo de configuração do Prometheus. Esse campo não é necessário quando você cria uma política de alertas do PromQL na API Cloud Monitoring.alertRule
: se a política de alertas foi migrada de um Prometheus arquivo de configuração, esse campo conterá o valor do campoalert
da regra de alerta no Prometheus arquivo de configuração. Esse campo não é necessário quando você cria uma política de alertas do PromQL na API Cloud Monitoring.
Por exemplo, a condição a seguir usa uma consulta PromQL para encontrar o número de vezes que um contêiner foi reiniciado nos últimos 30 minutos:
"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"} }
Use essa estrutura como o valor de um campo conditionPrometheusQueryLanguage
em
uma condição que, por sua vez, é incorporada em uma estrutura de política de alertas.
Para mais informações sobre essas estruturas, consulte
AlertPolicy
Confira a seguir uma política completa com uma condição
PrometheusQueryLanguageCondition
em JSON:
{ "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 }
Criar uma política de alertas
Para criar a política de alertas, coloque o JSON da política de alertas em um arquivo chamado POLICY_NAME.json e execute o seguinte comando:
curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies
Para mais informações sobre a API Monitoring para políticas de alertas, consulte Como gerenciar políticas de alertas por API.
Para ver mais informações sobre o uso de curl
, consulte Como invocar curl
.
Como usar o Terraform
Para instruções sobre como configurar políticas de alerta baseadas em PromQL usando o Terraform, consulte a seção condition_prometheus_query_language
do registro do Terraform google_monitoring_alert_policy
.
Para informações gerais sobre como usar o Google Cloud com o Terraform, consulte Terraform com o Google Cloud.
Como invocar o curl
Cada invocação curl
inclui um conjunto de argumentos, seguido pelo URL de um recurso da API. Os argumentos comuns incluem um código de projeto do Google Cloud e um token de autenticação. Esses valores são representados aqui pelas variáveis de ambiente PROJECT_ID
e TOKEN
.
Talvez você também precise especificar outros argumentos para elementos diferentes, como o tipo da solicitação HTTP. Por exemplo, -X DELETE
. Como a solicitação padrão é GET
, os exemplos não fazem essa especificação.
Cada invocação do curl
tem esta estrutura geral:
curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
Para usar curl
, especifique o código do projeto e um token de acesso. Para reduzir a digitação e os erros, é possível colocá-los em variáveis de ambiente e passá-los para curl
dessa maneira.
Para definir essas variáveis, faça o seguinte:
Crie uma variável de ambiente para manter o ID do projeto de escopo de um escopo de métricas. Estas etapas chamam a variável
PROJECT_ID
:PROJECT_ID=a-sample-project
Faça a autenticação na Google Cloud CLI:
gcloud auth login
Opcional. Para evitar a necessidade de especificar o ID do projeto com cada comando
gcloud
, defina o ID do projeto como padrão usando a CLI gcloud:gcloud config set project ${PROJECT_ID}
Crie um token de autorização e colete-o em uma variável de ambiente. Estas etapas chamam a variável
TOKEN
:TOKEN=`gcloud auth print-access-token`
É necessário atualizar o token de acesso periodicamente. Se algum comando parar de funcionar com um erro de falta de autenticação, será necessário emiti-lo novamente.
Para verificar se você recebeu um token de acesso, faça o echo da variável
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....