Nesta página, descrevemos como criar uma política de alertas com uma API usando a API Cloud Monitoring. É possível usar o PromQL consultas nas políticas de alertas para criar condições complexas com como proporções, limites dinâmicos e avaliação de métricas.
Para informações gerais, consulte Políticas de alertas com PromQL.
Se você trabalha em um ambiente do Prometheus fora do Cloud Monitoring e tem regras de alerta do Prometheus, será possível usar a Google Cloud CLI para migrá-los para políticas de alertas do Monitoring com um PromQL consulta. Para mais informações, consulte Migre regras e receptores de alertas 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 definir políticas de alertas com o 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
AlertPolicy
tipo de condição 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 de quais cada avaliação da consulta precisa gerar um valortrue
antes que o a política de alertas é acionada. O valor precisa ser um número de minutos expresso em segundos. por exemplo,600s
por 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 PromQL da consulta. O valor padrão é de 30 segundos. Se oPrometheusQueryLanguageCondition
foi criado migrando um Prometheus regra de alerta, 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 PromQL resultado da expressão.ruleGroup
: se a política de alertas foi migrada de um Prometheus arquivo de configuração, esse campo conterá o valor do camponame
do grupo de regras no Prometheus de configuração do Terraform. Esse campo não é obrigatório quando você faz 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 de configuração do Terraform. Esse campo não é obrigatório quando você faz 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 no(a) último(a) 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 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 dela em um arquivo chamado POLICY_NAME.json e execute este 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 alertas baseadas em PromQL usando
Terraform, consulte a seção condition_prometheus_query_language
do
google_monitoring_alert_policy
Terraform
registro.
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
gcloud
, defina o ID do projeto como padrão usando 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....