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 filtros de supervisión. Puedes crear políticas en JSON o YAML, sin importar si defines la política con los filtros de Monitoring o el Lenguaje de consulta de Monitoring (MQL). Google Cloud CLI puede leer y escribir tanto JSON como YAML, mientras que la API de REST puede pueden leer JSON.

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

Para obtener información sobre cómo configurar los campos de la política de alertas, consulta la lo siguiente:

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 para mostrar tu políticas y la 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 mostrar tu canales y la gcloud alpha monitoring channels describe para imprimir la configuración del canal.

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

Por ejemplo, el siguiente comando 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 políticas existentes

Generar representaciones JSON de tus políticas de alertas existentes y canales de notificaciones, realiza cualquiera 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 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

Las políticas de este documento se organizan usando 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 con 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 de alertas con la API.

Política de umbral de métrica

Una política de umbral de métrica 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, la condición de una política de límite de métricas se cumple cuando el espacio disponible en el disco es inferior al 10% del espacio total.

La siguiente política de alertas utiliza el uso promedio de la CPU como un indicador del del estado de un grupo de VMs. La condición de la política se cumple cuando el uso de CPU promedio la utilización de VMs en un proyecto, medida en intervalos de 60 segundos, supera un umbral del 90% de uso 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 condición de ausencia de métrica se cumple cuando no se escriben datos en una métrica dentro del período definido por el campo duration.

Una forma de demostrar esto 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 condición de la siguiente política de alertas se cumple cuando los datos dejan de escribirse en la métrica durante un período de aproximadamente una hora, es decir, si la 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 previsión

Se cumple una condición de pronóstico cuando ocurre lo siguiente:

  • Todas las previsiones de una serie temporal son las mismas dentro del período definido por el campo duration.
  • Cloud Monitoring prevé que la serie temporal incumplirá 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 incluir un campo forecastOptions que habilite la previsión y especifique la horizonte de previsión. En el siguiente ejemplo, el horizonte de pronóstico 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 cumplen 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, un cálculo de porcentaje de cambio se aplica a las series temporales 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ó antes de que comenzara el período de alineación. No puedes cambiar el período de 10 minutos que se usa para hacer comparaciones en una política de alertas de tasa de cambio. Sin embargo, sí puedes especificar el período de alineación cuando creas la condición.

Esta política de alertas supervisa si el uso de CPU aumenta con rapidez:

{
  "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 de alertas supervisa si el uso de CPU promedio un clúster de Google Kubernetes Engine supera un umbral:

{
    "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 aparece en la página Verificaciones de tiempo de actividad, pero puede configurar una política de alertas para que Cloud Monitoring si la verificación de tiempo de actividad falla.

Por ejemplo, el siguiente JSON describe una verificación de tiempo de actividad de HTTPS en el sitio de Google Cloud. La política de alertas 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 condición de la siguiente política de alertas se cumple 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 se cumple, Monitoring 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 condición especifica la métrica que se supervisa según 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 de alertas hace que Monitoring envíe una notificación a el canal de notificaciones especificado cuando no se ha verificado ningún proceso que coincida con la cadena nginx, que se ejecute como usuario www 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 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 proporciones. Si bien la API de Cloud Monitoring admite la compilació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 de métrica, 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 condición de la política de alertas se cumple cuando la proporción de los filtros infringe un valor de umbral para el intervalo de tiempo definido por duration.

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 de alertas tiene 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 evalúa 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 condición calcula la proporción entre las respuestas de error y el total de respuestas. La condición se cumple si la proporción es superior al 50%. (es decir, la proporción es mayor que 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.

Se cumple la condición y Monitoring envía una notificación del incidente nuevo de inmediato. El intervalo de tiempo permitido del campo duration en la condición es de cero segundos. Esta condición usa un recuento de trigger de uno, que es la cantidad de series temporales que deben infringir la condición para causar el incidente. Para una aplicación de App Engine con un solo servicio, está bien un recuento de trigger de uno. Si tienes una app con 20 servicios y quieres provocar un incidente si 3 o más servicios infringen la condición, usa un recuento de trigger 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 según etiquetas de recursos, que particiona 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 representados que se calculan ALIGN_DELTA en los valores en el período de alineación de 5 minutos. Este alineador devuelve la cantidad de que coinciden con las respuestas en ese período de alineación 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 período 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. La condición para la alerta se cumple la política cuando la proporción es superior al 50%.