Crie políticas de alerta baseadas em PromQL (API)

Esta página descreve como criar uma política de alerta baseada em PromQL através da API Cloud Monitoring. Pode usar consultas PromQL nas suas políticas de alerta para criar condições complexas com funcionalidades como rácios, limites dinâmicos e avaliação de métricas.

Para obter informações gerais, consulte a Vista geral dos alertas baseados em PromQL.

Se trabalhar num ambiente do Prometheus fora do Cloud Monitoring e tiver regras de alerta do Prometheus, pode usar a CLI Google Cloud para migrá-las para políticas de alerta baseadas em PromQL no Monitoring. Para mais informações, consulte o artigo Migre regras de alerta e destinatários do Prometheus.

Crie políticas de alerta com consultas PromQL

Usa o método alertPolicies.create para criar políticas de alerta de forma programática.

A única diferença entre criar políticas de alerta baseadas em PromQL e outras políticas de alerta é que o tipo Condition tem de ser PrometheusQueryLanguageCondition. Este tipo de condição permite que as políticas de alerta sejam definidas com PromQL.

O exemplo seguinte mostra uma consulta PromQL para uma condição de política de alerta que usa uma métrica do exportador kube-state para encontrar o número de vezes que um contentor foi reiniciado nos últimos 30 minutos:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

Construir a política de alerta

Para criar uma política de alerta 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 avaliar. Equivalente ao campo expr de uma regra de alerta padrão do Prometheus.
  • duration: especifica o período durante o qual cada avaliação da consulta tem de gerar um valor true antes de a condição da política de alertas ser cumprida. O valor tem de ser um número de minutos, expresso em segundos; por exemplo, 600s para uma duração de 10 minutos. Para mais informações, consulte o artigo Comportamento das políticas de alerta baseadas em métricas.
  • evaluationInterval: o intervalo de tempo, em segundos, entre as avaliações da consulta PromQL. O valor predefinido é 30 segundos. Se o PrometheusQueryLanguageCondition foi criado através da migração de uma regra de alerta do Prometheus, este valor provém do grupo de regras do Prometheus que continha a regra de alerta do Prometheus.

  • labels: uma forma opcional de adicionar ou substituir etiquetas no resultado da expressão PromQL.

  • ruleGroup: se a política de alerta foi migrada de um ficheiro de configuração do Prometheus, este campo contém o valor do campo name do grupo de regras no ficheiro de configuração do Prometheus. Este campo não é obrigatório quando cria uma política de alerta do PromQL na API Cloud Monitoring.

  • alertRule: se a política de alerta tiver sido migrada de um ficheiro de configuração do Prometheus, este campo contém o valor do campo alert da regra de alerta no ficheiro de configuração do Prometheus. Este campo não é obrigatório quando cria uma política de alerta do PromQL na API Cloud Monitoring.

Por exemplo, a seguinte condição usa uma consulta PromQL para encontrar o número de vezes que um contentor 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 esta estrutura como o valor de um campo conditionPrometheusQueryLanguage numa condição, que, por sua vez, está incorporada numa estrutura de política de alerta. Para mais informações sobre estas estruturas, consulte AlertPolicy.

O exemplo seguinte mostra uma política completa com uma condição em 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
}

Crie uma política de alerta

Para criar a política de alertas, coloque o JSON da política de alertas num ficheiro denominado POLICY_NAME.json e, em seguida, 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 alerta, consulte o artigo Gerir políticas de alerta por API.

Para mais informações sobre a utilização da funcionalidade curl, consulte o artigo Invocar curl.

Desative a verificação da existência de métricas

Quando cria uma política de alerta baseada em PromQL, Google Cloud executa uma validação para garantir que as métricas referenciadas na condição já existem no Monitoring. No entanto, pode substituir esta validação se precisar de criar uma política de alerta antes de as métricas existirem. Por exemplo, pode querer fazê-lo quando usar a automatização para criar novos projetos com um conjunto padrão de políticas de alerta predefinidas. Se não desativar a validação, a criação da política de alerta falha até que as métricas subjacentes sejam criadas.

Para desativar a verificação da existência de métricas, adicione o campo "disableMetricValidation": true ao seu PrometheusQueryLanguageCondition:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "disableMetricValidation": true,
  "alertRule": string
}

Se a condição de uma política de alerta fizer referência a uma métrica que não existe, a condição continua a ser executada de acordo com o respetivo intervalo de avaliação. No entanto, o resultado da consulta está sempre vazio. Depois de a métrica subjacente existir, a consulta devolve dados.

Use o Terraform

Para obter instruções sobre como configurar políticas de alerta baseadas em PromQL com o Terraform, consulte a secção condition_prometheus_query_language do registo do google_monitoring_alert_policy Terraform.

Para informações gerais sobre a utilização do Google Cloud com o Terraform, consulte Terraform com o Google Cloud.

A invocar curl

Cada invocação curl inclui um conjunto de argumentos, seguido do URL de um recurso da API. Os argumentos comuns incluem um ID do projeto e um token de autenticação. Google Cloud Estes valores são representados aqui pelas variáveis de ambiente PROJECT_ID e TOKEN.

Também pode ter de especificar outros argumentos, por exemplo, para especificar o tipo de pedido HTTP (por exemplo, -X DELETE). O pedido predefinido é GET, pelo que os exemplos não o especificam.

Cada invocação de 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, tem de especificar o ID do projeto e um token de acesso. Para reduzir a introdução de texto e os erros, pode colocar estas informações em variáveis de ambiente e transmiti-las ao curl dessa forma.

Para definir estas variáveis, faça o seguinte:

  1. Crie uma variável de ambiente para guardar o ID do seu projeto de âmbito de um âmbito de métricas. Estes passos chamam a variável PROJECT_ID:

    PROJECT_ID=a-sample-project
    
  2. Autentique-se na CLI do Google Cloud:

    gcloud auth login
    
  3. Opcional. Para evitar ter de especificar o ID do projeto com cada comando, defina o ID do projeto como predefinição através da CLI gcloud:gcloud

    gcloud config set project ${PROJECT_ID}
    
  4. Crie um token de autorização e capture-o numa variável de ambiente. Estes passos chamam a variável TOKEN:

    TOKEN=`gcloud auth print-access-token`
    

    Tem de atualizar periodicamente o token de acesso. Se os comandos que funcionavam indicarem subitamente que não tem autenticação, reemita este comando.

  5. Para verificar se recebeu um token de acesso, repita a variável TOKEN:

    echo ${TOKEN}
    ya29.GluiBj8o....