Políticas de muestra en JSON

En este documento, se proporcionan ejemplos de políticas de alertas. Las muestras se escriben en JSON y usan los filtros de Monitoring. Puedes crear políticas en JSON o YAML, sin importar si las defines mediante filtros o el lenguaje de consulta de Monitoring (MQL). Google Cloud CLI puede leer y escribir JSON y YAML, mientras que la API de REST puede leer JSON.

Para ver ejemplos de políticas de alertas que usan MQL, consulta los siguientes documentos:

Si deseas obtener información para configurar los campos de la política de alertas, consulta los siguientes vínculos:

Genera YAML para políticas existentes

Para generar representaciones YAML de tus políticas de alertas existentes, usa el comando gcloud alpha monitoring policies list a fin de enumerar tus políticas y el comando gcloud alpha monitoring policies describe para imprimir la política.

Para generar representaciones YAML de tus canales de notificaciones existentes, usa el comando gcloud alpha monitoring channels list para enumerar tus canales y el comando gcloud alpha monitoring channels describe para imprimir la configuración de los canales.

Si no incluyes la marca --format en los comandos de Google Cloud CLI, el formato predeterminado es YAML para ambos comandos de gcloud ... describe.

Por ejemplo, el siguiente comando de gcloud alpha monitoring policies describe recupera una sola política llamada projects/a-gcp-project/alertPolicies/12669073143329903307 y el redireccionamiento (>) copia el resultado en el archivo test-policy.yaml:

gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml

Genera JSON para las políticas existentes

Para generar representaciones JSON de tus políticas de alertas y canales de notificaciones existentes, realiza una de las siguientes acciones:

Muestras de política

Como se muestra en el ejemplo de copia de seguridad y restablecimiento, puedes usar políticas guardadas para crear copias nuevas de esas políticas.

Puedes usar una política guardada en un proyecto para crear una política nueva o similar en otro proyecto. Sin embargo, primero debes realizar los siguientes cambios en una copia de la política guardada:

  • Quita los siguientes campos de cualquier canal de notificaciones:
    • name
    • verificationStatus
  • Crea canales de notificaciones antes de consultar los canales en las políticas de alertas (necesitas los identificadores de canales nuevos).
  • Quita los siguientes campos de las políticas de alertas que vuelvas a crear:
    • name
    • condition.name
    • creationRecord
    • mutationRecord

Las políticas de este documento se organizan con la misma terminología que Monitoring en la consola de Google Cloud usa, por ejemplo, “política de tasa de cambio”, y hay dos tipos de condiciones:

  • Una condición de umbral; casi todos los tipos de políticas mencionados en la IU son variantes de una condición de umbral
  • Una condición de ausencia

En los siguientes ejemplos, estas condiciones corresponden a conditionThreshold y conditionAbsent. Para obtener más información, consulta la página de referencia de Condition.

Puedes crear muchas de estas políticas de forma manual mediante la consola de Google Cloud, pero algunas solo se pueden crear con la API de Monitoring. Para obtener más información, consulta Crea una política de alertas (IU) o Crea políticas (API).

Política de umbral de métrica

Una política de umbral de métrica es aquella que detecta cuando algún valor cruza un límite predeterminado. Las políticas de umbral te permiten saber que algo se acerca a un punto importante, para que puedas realizar alguna acción. Por ejemplo, cuando el espacio disponible en el disco es inferior al 10 por ciento del espacio total, y tu sistema puede quedarse sin espacio en el disco pronto.

En la siguiente política, se usa el uso promedio de CPU como indicador del estado de un grupo de VM. Crea una alerta cuando el uso promedio de CPU de las VM en un proyecto, medido en intervalos de 60 segundos, supera un umbral de uso del 90 por ciento durante 15 minutos (900 segundos):

{
    "displayName": "Very high CPU usage",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "CPU usage is extremely high",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                            "project"
                        ],
                        "perSeriesAligner": "ALIGN_MAX"
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "900s",
                "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
                          AND resource.type=\"gce_instance\"",
                "thresholdValue": 0.9,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

Política de ausencia de métricas

Una política de ausencia de métricas se activa cuando no se escribe ningún dato en una métrica para la duración especificada.

Una forma de demostrarlo es crear una métrica personalizada.

Aquí hay un descriptor de muestra para una métrica personalizada. Puedes crear la métrica con el Explorador de API.

{
  "description": "Number of times the pipeline has run",
  "displayName": "Pipeline runs",
  "metricKind": "GAUGE",
  "type": "custom.googleapis.com/pipeline_runs",
  "labels": [
    {
      "description": "The name of the pipeline",
      "key": "pipeline_name",
      "valueType": "STRING"
    },
  ],
  "unit": "1",
  "valueType": "INT64"
}

Consulta Descripción general de las métricas definidas por el usuario para obtener más información.

La siguiente política de alertas se activa cuando los datos dejan de escribirse en esta métrica durante un período de aproximadamente una hora; en otras palabras, no se pudo ejecutar la canalización por hora. Ten en cuenta que la condición que se usa aquí es conditionAbsent.

{
    "displayName": "Data ingestion functioning",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Hourly pipeline is up",
            "conditionAbsent": {
                "duration": "3900s",
                "filter": "resource.type=\"global\"
                          AND metric.type=\"custom.googleapis.com/pipeline_runs\"
                          AND metric.label.pipeline_name=\"hourly\"",
            }
        }
    ],
}

Política de previsión

Una condición de previsión se activa cuando todas las previsiones realizadas para una serie temporal en un período de duración son iguales y predicen que la serie temporal infringirá el umbral dentro del horizonte de previsión.

Una condición de previsión es una condición de umbral de métrica que se configura para usar la previsión. Como se ilustra en el siguiente ejemplo, estas condiciones incluyen un campo forecastOptions que habilita la previsión y especifica el horizonte de previsión. En la siguiente muestra, el horizonte de previsión se establece en una hora, que es el valor mínimo:

{
    "displayName": "NFS free bytes alert",
    "combiner": "OR",
    "conditions": [
      {
        "displayName": "Filestore Instance - Free disk space percent",
        "conditionThreshold": {
          "aggregations": [
            {
              "alignmentPeriod": "300s",
              "perSeriesAligner": "ALIGN_MEAN"
            }
          ],
          "comparison": "COMPARISON_LT",
          "duration": "900s",
          "filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
          "forecastOptions": {
            "forecastHorizon": "3600s"
          },
          "thresholdValue": 20,
          "trigger": {
            "count": 1
          }
        }
      }
    ],
}

Política de tasa de cambio

Las condiciones de tasa de cambio se activan cuando los valores de una serie temporal aumentan o disminuyen al menos en el porcentaje especificado por el umbral. Cuando creas este tipo de condición, se aplica un cálculo de porcentaje de cambio a la serie temporal antes de la comparación con el umbral.

La condición calcula el promedio de los valores de la métrica de los últimos 10 minutos y, luego, compara el resultado con el promedio de 10 minutos que se midió justo antes del período de duración. La ventana de visualización de 10 minutos que usa una condición de tasa de cambio de métrica es un valor fijo, no puedes cambiarlo. Sin embargo, sí especificas el período de duración cuando creas una condición.

Esta política te alerta cuando la tasa de uso de CPU aumenta rápidamente:

{
  "displayName": "High CPU rate of change",
  "combiner": "OR",
  "conditions": [
    {
      "displayName": "CPU usage is increasing at a high rate",
      "conditionThreshold": {
         "aggregations": [
           {
             "alignmentPeriod": "900s",
             "perSeriesAligner": "ALIGN_PERCENT_CHANGE",
           }],
        "comparison": "COMPARISON_GT",
        "duration": "180s",
        "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
        "thresholdValue": 0.5,
        "trigger": {
          "count": 1
         }
      }
    }
  ],
}

Política de grupo agregado

Esta política te alerta cuando el uso de CPU promedio supera un umbral a través de un clúster de Google Kubernetes Engine:

{
    "displayName": "CPU utilization across GKE cluster exceeds 10 percent",
    "combiner": "OR",
    "conditions": [
         {
            "displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
            "conditionThreshold": {
                "filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.1,
                "duration": "300s",
                "trigger": {
                    "count": 1
                },
                "aggregations": [
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_MEAN",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [
                              "project"
                        ]
                    },
                    {
                        "alignmentPeriod": "60s",
                        "perSeriesAligner": "ALIGN_SUM",
                        "crossSeriesReducer": "REDUCE_MEAN"
                    }
                ]
            },
        }
    ],
}

Esta política supone la existencia del siguiente grupo:

    {
        "name": "projects/a-gcp-project/groups/3691870619975147604",
        "displayName": "GKE cluster",
        "filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
    }

A fin de identificar los campos equivalentes para tus grupos, haz una lista de los detalles de tu grupo con el Explorador de API en la página de referencia project.groups.list.

Política de verificaciones de tiempo de actividad

El estado de las verificaciones de tiempo de actividad aparece en la página Descripción general de Monitoring, pero puedes usar una política de alertas que te notifique directamente si falla la verificación de tiempo de actividad.

Por ejemplo, el siguiente JSON describe una verificación de tiempo de actividad de HTTPS en el sitio de Google Cloud. Se verifica la disponibilidad cada 5 minutos.

La verificación de tiempo de actividad se creó con la consola de Google Cloud. La representación JSON en este caso se creó mediante la enumeración de las verificaciones de tiempo de actividad en el proyecto con la API de Monitoring. Consulta uptimeCheckConfigs.list. También puedes crear verificaciones de tiempo de actividad con la API de Monitoring.

{
    "name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
    "displayName": "Uptime check for Google Cloud site",
    "monitoredResource": {
        "type": "uptime_url",
        "labels": {
            "host": "cloud.google.com"
      }
    },
    "httpCheck": {
        "path": "/index.html",
        "useSsl": true,
        "port": 443,
        "authInfo": {}
    },
    "period": "300s",
    "timeout": "10s",
    "contentMatchers": [
        {}
    ]
}

Si deseas crear una política de alertas para una verificación de tiempo de actividad, consulta la verificación con su UPTIME_CHECK_ID. Este ID se establece cuando se crea la verificación. Aparece como el último componente del campo name y en la IU aparece como Check ID en el resumen de la configuración. Si usas la API de Monitoring, el método uptimeCheckConfigs.create muestra el ID.

El ID se deriva del displayName, que se estableció en la IU en este caso. Se puede verificar si enumeras las verificaciones de tiempo de actividad y observas el valor de name.

El ID de la verificación de tiempo de actividad que se describió antes es uptime-check-for-google-cloud-site.

La siguiente política de alertas se activa si falla la verificación de tiempo de actividad o si faltan menos de 15 días para que caduque el certificado SSL del sitio de Google Cloud. Si alguna de estas condiciones ocurre, la política de alertas envía una notificación al canal de notificaciones especificado:

{
    "displayName": "Google Cloud site uptime failure",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_COUNT_FALSE",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_GT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 1,
                "trigger": {
                    "count": 1
                }
            }
        },
        {
            "displayName": "SSL Certificate for google-cloud-site expiring soon",
            "conditionThreshold": {
                "aggregations": [
                    {
                        "alignmentPeriod": "1200s",
                        "perSeriesAligner": "ALIGN_NEXT_OLDER",
                        "crossSeriesReducer": "REDUCE_MEAN",
                        "groupByFields": [ "resource.label.*" ]
                    }
                ],
                "comparison": "COMPARISON_LT",
                "duration": "600s",
                "filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
                          AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
                          AND resource.type=\"uptime_url\"",
                "thresholdValue": 15,
                "trigger": {
                    "count": 1
                }
            }
        }
    ],
}

El filtro en la política de alertas especifica la métrica que se supervisa por su tipo y etiqueta. Los tipos de métricas son monitoring.googleapis.com/uptime_check/check_passed y monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires. La etiqueta de métrica identifica la verificación de tiempo de actividad específica que se supervisa. En este ejemplo, el campo de etiqueta check_id contiene el ID de la verificación de tiempo de actividad.

AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"

Consulta Filtros de supervisión para obtener más información.

Política de estado del proceso

Una política de estado del proceso puede notificarte si la cantidad de procesos que coinciden con un patrón supera un umbral. Esto se puede usar para notificarte, por ejemplo, que un proceso se dejó de ejecutar.

Esta política envía una notificación al canal de notificaciones especificado cuando ningún proceso que coincida con la string nginx, que se ejecute como usuario www, estuvo disponible durante más de 5 minutos:

{
    "displayName": "Server health",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Process 'nginx' is not running",
            "conditionThreshold": {
                "filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
                "comparison": "COMPARISON_LT",
                "thresholdValue": 1,
                "duration": "300s"
            }
        }
    ],
}

Para obtener más información, consulta el Estado del proceso.

Proporción de métrica

Te recomendamos que uses el lenguaje de consulta de Monitoring (MQL) para crear políticas de alertas basadas en la proporción. Aunque la API de Cloud Monitoring admite la creación de algunas proporciones basadas en filtros, MQL proporciona una solución más flexible y sólida:

En esta sección, se describe una proporción basada en filtros. Con la API, puedes crear y ver una política que calcule la proporción de dos métricas relacionadas y que se active cuando esa proporción traspase un límite. Las métricas relacionadas deben tener la misma MetricKind. Por ejemplo, puedes crear una política de alertas basada en la proporción si ambas métricas son métricas de indicador. Para determinar el MetricKind de un tipo de métrica, consulta la Lista de métricas.

Una condición de proporción es una variante de una condición de umbral simple, en la que la condición en una política de proporción usa dos filtros: el filter habitual, que actúa como numerador de la proporción, y un denominatorFilter, que actúa como denominador de la proporción.

Las series temporales de ambos filtros deben agregarse de la misma manera, de modo que el cálculo de la proporción de los valores sea significativo. La política de alertas se activa si la proporción de los dos filtros infringe un valor del umbral de la duración especificada.

En la siguiente sección, se describe cómo configurar una política de alertas que supervise la proporción de respuestas de error HTTP en todas las respuestas HTTP.

Proporción de errores HTTP

La siguiente política crea una condición de umbral basada en la proporción entre el recuento de respuestas de errores HTTP y el recuento de todas las respuestas HTTP.

{
    "displayName": "HTTP error count exceeds 50 percent for App Engine apps",
    "combiner": "OR",
    "conditions": [
        {
            "displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
            "conditionThreshold": {
                 "filter": "metric.label.response_code>=\"500\" AND
                            metric.label.response_code<\"600\" AND
                            metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                            project=\"a-gcp-project\" AND
                            resource.type=\"gae_app\"",
                 "aggregations": [
                    {
                        "alignmentPeriod": "300s",
                        "crossSeriesReducer": "REDUCE_SUM",
                        "groupByFields": [
                          "project",
                          "resource.label.module_id",
                          "resource.label.version_id"
                        ],
                        "perSeriesAligner": "ALIGN_DELTA"
                    }
                ],
                "denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
                                      project=\"a-gcp-project\" AND
                                      resource.type=\"gae_app\"",
                "denominatorAggregations": [
                   {
                      "alignmentPeriod": "300s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "project",
                        "resource.label.module_id",
                        "resource.label.version_id"
                       ],
                      "perSeriesAligner": "ALIGN_DELTA",
                    }
                ],
                "comparison": "COMPARISON_GT",
                "thresholdValue": 0.5,
                "duration": "0s",
                "trigger": {
                    "count": 1
                }
            }
        }
    ]
}

Tipos de recursos y métricas

El tipo de métrica para esta política es appengine.googleapis.com/http/server/response_count, que tiene dos etiquetas:

  • response_code, un número entero de 64 bits que representa el código de estado HTTP de la solicitud. Esta política filtra los datos de series temporales de esta etiqueta para que pueda determinar lo siguiente:
    • La cantidad de respuestas recibidas
    • La cantidad de respuestas de error recibidas
    • La proporción entre respuestas de error y todas las respuestas
  • loading, un valor booleano que indica si la solicitud se estaba cargando. La etiqueta loading es irrelevante en esta política de alertas

La política de alertas se relaciona con los datos de respuesta de las apps de App Engine, es decir, los datos que se originan del tipo de recurso supervisado gae_app. Este recurso supervisado tiene estas tres etiquetas:

  • project_id, el ID del proyecto de Google Cloud
  • module_id, el nombre del servicio o módulo en la app
  • version_id, la versión de la app

Para obtener información de referencia sobre estos tipos de métricas y recursos supervisados, consulta las métricas de App Engine en la lista de métricas y la entrada gae_app en la lista de recursos supervisados.

¿Qué hace esta política?

Esta política calcula la proporción de las respuestas de error con el total de respuestas. La política activa una notificación de alerta si la proporción supera el 50% (es decir, la proporción es superior a 0.5) durante el período de alineación de 5 minutos.

Esta política captura el módulo y la versión de la app que infringe la condición. Para ello, agrupa la serie temporal de cada filtro por los valores de esas etiquetas.

  • El filtro en la condición analiza las respuestas HTTP de una app de App Engine y selecciona esas respuestas en el rango de error de 5xx. Este es el numerador en la proporción.
  • El filtro de denominador en la condición analiza todas las respuestas HTTP de una app de App Engine.

La política activa la notificación de alerta de inmediato; la duración permitida para la condición es de 0 segundos. Esta política usa un recuento de activación de 1, que es la cantidad de series temporales que deben infringir la condición para que se active la notificación de alertas. Para una app de App Engine con un único servicio, solo es necesario un activador de 1. Si tienes una app con 20 servicios y quieres activar una alerta si 3 o más servicios infringen la condición, usa un recuento de activación de 3.

Configura una proporción

Los filtros de numerador y denominador son idénticos, excepto que el filtro de condición en el numerador coincide con los códigos de respuesta en el rango de error, y el filtro de condición en el denominador coincide con todos los códigos de respuesta. Las siguientes cláusulas aparecen solo en la condición del numerador:

      metric.label.response_code>=\"500\" AND
      metric.label.response_code<\"600\"

De lo contrario, los filtros de numerador y denominador son los mismos.

Las series temporales que selecciona cada filtro deben agregarse de la misma manera para que el cálculo de la proporción sea válido. Cada filtro puede recopilar varias series temporales, ya que habrá una serie temporal diferente para cada combinación de valores de las etiquetas. Esta política agrupa el conjunto de series temporales por etiquetas de recursos especificadas, que particionan el conjunto de series temporales en un conjunto de grupos. Algunas de las series temporales de cada grupo coinciden con el filtro de numerador; el resto coincide con el filtro de denominador.

Para calcular una proporción, se debe agregar el conjunto de series temporales que coincide con cada filtro a una sola serie temporal. Esto deja a cada grupo con dos series temporales: una para el numerador y otra para el denominador. Luego, se puede calcular la proporción de puntos en las series temporales del numerador y denominador de cada grupo.

En esta política, las series temporales de ambos filtros se agregan de la siguiente manera:

  • Cada filtro crea una cantidad de series temporales alineadas en intervalos de 5 minutos, con valores que se representan con cálculos de ALIGN_DELTA en los valores en ese intervalo de alineación de 5 minutos. Este alineador muestra la cantidad de respuestas coincidentes en ese intervalo como un número entero de 64 bits.

  • Las series temporales de cada filtro también se agrupan según los valores de las etiquetas de recursos del módulo y la versión, de modo que cada grupo contenga dos conjuntos de series temporales alineadas, las que coincidan con el filtro de numerador y las que coincidan con el filtro de denominador.

  • Las series temporales dentro de cada grupo que coincidan con el filtro de numerador o denominador se agregan a una sola serie mediante la suma de los valores en la serie temporal individual con el reductor de series cruzadas REDUCER_SUM. Esto da como resultado una serie temporal para el numerador y otra para el denominador; cada una indica la cantidad de respuestas en todas las series temporales coincidentes en el intervalo de alineación.

Luego la política calcula la proporción de los valores para las series temporales del numerador y denominador que representan cada grupo. Una vez que la proporción está disponible, esta política es de umbral de métricas simple.