Políticas de muestra

En esta página, se proporciona una recopilación de políticas de alertas específicas que se pueden usar como inspiración y para el arranque de las políticas que diseñes.

Representa políticas en formato JSON o YAML

Puedes representar las políticas de alertas en dos formatos de datos: JSON y YAML. El SDK de Cloud puede leer y escribir en ambos formatos. La API de REST puede leer JSON.

Para generar representaciones YAML (el formato predeterminado) de tus políticas de alertas y canales de notificaciones existentes, usa los comandos gcloud alpha monitoring policies list y describe, o los comandos gcloud alpha monitoring channels list y describe, respectivamente.

Por ejemplo, con este comando, se recupera una sola política y se captura el resultado en el archivo test-policy.yaml:

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

Para generar representaciones JSON de tus políticas de alertas y canales de notificaciones existentes, sigue estos pasos:

Copia políticas

Como se ilustra en el ejemplo de copia de seguridad y restablecimiento, puedes usar políticas guardadas para crear copias nuevas de esas políticas. También puedes usarlas como punto de partida para crear políticas similares.

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 los canales 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

Muestras de política

Aquí, las políticas están organizadas con la misma terminología que Monitoring en Google Cloud Console, por ejemplo, “política de tasa de cambio”, pero en realidad solo hay dos tipos de condiciones que subyacen a todas estas clasificaciones, y son las siguientes:

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

En este caso, en las muestras, estas se indican mediante las condiciones 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 con Google Cloud Console, 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.

La siguiente política emplea el uso de CPU promedio como un indicador del estado de un grupo de VM. Esta genera una alerta cuando el uso promedio de CPU de un grupo de VM en una instancia y zona, 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",
                            "resource.label.instance_id",
                            "resource.label.zone"
                        ],
                        "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 demostrar esto es crear una métrica personalizada en la que nunca se escriba nada. No necesitas una métrica personalizada para este tipo de política, pero con fines de demostración, es fácil garantizar que nada la use realmente.

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 Usa métricas personalizadas para obtener más información.

La siguiente política de alertas se activa si no se escriben datos en esta métrica durante un período de aproximadamente una hora, en otras palabras, tu canalización por hora no se ejecutó. 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 tasa de cambio

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",
                              "resource.label.instance_id",
                              "resource.label.zone"
                        ]
                    },
                    {
                        "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 Google Cloud Console. 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 ver otro ejemplo, consulta el Estado del proceso.

Proporción de métrica

Con la API, puedes crear y ver una política que calcula la proporción de dos métricas relacionadas y que se activa cuando esa proporción supera un umbral. Las métricas relacionadas deben tener el mismo MetricKind. Por ejemplo, puedes crear una política de alertas basada en proporciones si ambas son métricas. 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. Para ver otro ejemplo de una política de alertas basada en la proporción, consulta Alertas sobre la proporción entre el uso de la cuota y el límite de la cuota.

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 este conjunto de series temporales por etiquetas de recursos específicas, 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.