Políticas de ejemplo en JSON

En este documento se proporcionan ejemplos de políticas de alertas. Los ejemplos están escritos en JSON y usan filtros de monitorización. Puedes crear políticas en formato JSON o YAML, independientemente de si las defines mediante filtros de Monitoring o con el lenguaje de consulta de Monitoring (MQL). La CLI de Google Cloud puede leer y escribir JSON y YAML, mientras que la API REST puede leer JSON.

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

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

Generar YAML para políticas actuales

Para generar representaciones YAML de tus políticas de alertas, usa el comando gcloud alpha monitoring policies list para 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, 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 del canal.

Si no incluyes la marca --format en los comandos de la CLI de Google Cloud, 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 la redirección (>) copia la salida en el archivo test-policy.yaml:

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

Generar JSON para las políticas actuales

Para generar representaciones JSON de tus políticas de alertas y canales de notificación, haz lo siguiente:

Ejemplos de políticas

Como se muestra en el ejemplo de copia de seguridad y restauración, puedes usar las políticas guardadas para crear copias 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 hacer los siguientes cambios en una copia de la política guardada:

  • Elimina los siguientes campos de los canales de notificaciones:
    • name
    • verificationStatus
  • Crea canales de notificaciones antes de hacer referencia a ellos en las políticas de alertas (necesitas los nuevos identificadores de canal).
  • Elimine los siguientes campos de las políticas de alertas que esté recreando:
    • name
    • condition.name
    • creationRecord
    • mutationRecord

Las políticas de este documento se organizan con la misma terminología que se usa en la consola de monitorización. Por ejemplo, "política de tasa de cambio". Hay dos tipos de condiciones: Google Cloud

  • Una condición de umbral. Casi todos los tipos de políticas mencionados en la interfaz de usuario son variantes de una condición de umbral.
  • Una condición de ausencia

En los ejemplos que se muestran a continuación, 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 manualmente mediante la consola de Google Cloud , pero algunas solo se pueden crear mediante la API Monitoring. Para obtener más información, consulta Crear una política de alertas (interfaz de usuario) o Crear políticas de alertas mediante la API.

Política de umbral de métrica

Una política de umbral de métrica detecta cuándo un valor supera un límite predeterminado. Las políticas de umbral te avisan de que algo se acerca a un punto importante para que puedas tomar medidas. Por ejemplo, la condición de una política de umbral de métrica se cumple cuando el espacio en disco disponible es inferior al 10 % del espacio total en disco.

La siguiente política de alertas usa el uso medio de la CPU como indicador del estado de un grupo de VMs. La condición de la política se cumple cuando la utilización media de la CPU de las VMs de un proyecto, medida en intervalos de 60 segundos, supera un umbral del 90 % 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 en el intervalo definido por el campo duration.

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

A continuación, se muestra un descriptor de ejemplo de una métrica personalizada. Puedes crear la métrica con el Explorador de APIs.

{
  "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 Información general sobre 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 dejan de escribirse datos en la métrica durante aproximadamente una hora. En otras palabras, tu canalización por horas no se ha ejecutado. 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 previsión cuando ocurre lo siguiente:

  • Todas las previsiones de una serie temporal son las mismas dentro del periodo definido por el campo duration.
  • Cloud Monitoring prevé que la serie temporal superará el umbral en el horizonte de previsión.

Una condición de previsión es una condición de umbral de métrica que se configura para usar previsiones. Como se muestra en el siguiente ejemplo, estas condiciones incluyen un campo forecastOptions que habilita las previsiones y especifica el horizonte de previsión. En el siguiente ejemplo, el horizonte de previsión se ha definido 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 tipo de cambio

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

La condición calcula la media de los valores de la métrica de los últimos 10 minutos y, a continuación, compara el resultado con la media de 10 minutos que se midió justo antes de que empezara el periodo de alineación. No puedes cambiar el periodo de 10 minutos que se usa para las comparaciones en una política de alertas de tasa de cambio. Sin embargo, sí que especifica el periodo de alineación al crear la condición.

Esta política de alertas monitoriza si la utilización de la 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 agregación de grupos

Esta política de alertas monitoriza si la utilización media de la CPU de 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 da por hecho que existe el siguiente grupo:

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

Para identificar los campos equivalentes de tus grupos, consulta los detalles de tus grupos mediante el Explorador de APIs en la página de referencia project.groups.list.

Política de comprobación de disponibilidad

El estado de las comprobaciones de disponibilidad del servicio aparece en la página Comprobaciones de disponibilidad del servicio, pero puedes configurar una política de alertas para que Cloud Monitoring te envíe una notificación si se produce un error en la comprobación de disponibilidad del servicio.

Por ejemplo, el siguiente JSON describe una comprobación de tiempo de actividad HTTPS en el sitio Google Cloud . La política de alertas comprueba la disponibilidad cada 5 minutos.

La comprobación de disponibilidad se ha creado con la consola Google Cloud . La representación JSON que se muestra aquí se ha creado enumerando las comprobaciones de disponibilidad del servicio del proyecto mediante la API Monitoring. Consulta uptimeCheckConfigs.list. También puedes crear comprobaciones de disponibilidad con la API 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": [
        {}
    ]
}

Para crear una política de alertas para una comprobación de disponibilidad del servicio, consulta la comprobación de disponibilidad del servicio por su UPTIME_CHECK_ID. Este ID se asigna cuando se crea la comprobación. Aparece como el último componente del campo name y se muestra en la interfaz de usuario como Check ID en el resumen de la configuración. Si usas la API Monitoring, el método uptimeCheckConfigs.create devuelve el ID.

El ID se deriva del displayName, que se ha definido en la interfaz de usuario en este caso. Para verificarlo, puede consultar la lista de comprobaciones de disponibilidad y buscar el valor name.

El ID de la comprobación de disponibilidad que se ha descrito anteriormente es uptime-check-for-google-cloud-site.

La condición de la siguiente política de alertas se cumple si la comprobación de disponibilidad del servicio falla o si el certificado SSL del sitio Google Cloud caducará en menos de 15 días. Si se cumple alguna de las condiciones, Monitoring envía una notificación al canal de notificación 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 de la condición especifica la métrica que se está monitorizando 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 la métrica identifica la comprobación de disponibilidad específica que se está monitorizando. En este ejemplo, el campo de la etiqueta check_id contiene el ID de la comprobación de disponibilidad.

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

Para obtener más información, consulte Monitorizar filtros.

Política de estado del proceso

Una política de estado de los procesos puede notificarte si el número de procesos que coinciden con un patrón supera un umbral. Se puede usar para informarte, por ejemplo, de que un proceso ha dejado de ejecutarse.

Esta política de alertas hace que Monitoring envíe una notificación al canal de notificación especificado cuando no haya ningún proceso que coincida con la cadena nginx y que se ejecute como usuario www 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.

Relación de métricas

Te recomendamos que uses Monitoring Query Language (MQL) para crear políticas de alertas basadas en ratios. Aunque la API Cloud Monitoring admite la creación de algunas ratios basadas en filtros, MQL ofrece una solución más flexible y robusta:

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

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

Las series temporales de ambos filtros deben agregarse de la misma forma para 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 supera un valor de umbral en el periodo definido por el campo duration.

En la siguiente sección se describe cómo configurar una política de alertas que monitorice la proporción de respuestas de error HTTP con respecto a todas las respuestas HTTP.

Ratio de errores HTTP

La siguiente política de alertas tiene una condición de umbral basada en la proporción del número de respuestas de error HTTP con respecto al número total de 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 métricas y de recursos

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

  • response_code, un entero de 64 bits que representa el código de estado HTTP de la solicitud. Esta política filtra los datos de serie temporal de esta etiqueta, por lo que puede determinar lo siguiente:
    • Número de respuestas recibidas.
    • Número de respuestas de error recibidas.
    • La proporción de respuestas de error con respecto al total de respuestas.
  • loading, un valor booleano que indica si se estaba cargando la solicitud. La etiqueta loading no es relevante en esta política de alertas.

La política de alertas evalúa los datos de respuesta de las aplicaciones de App Engine, es decir, los datos procedentes del tipo de recurso monitorizado gae_app. Este recurso monitorizado tiene tres etiquetas:

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

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 de respuestas de error con respecto al total de respuestas. La condición se cumple si la proporción es superior al 50 % (es decir, superior a 0,5) durante el periodo de alineación de 5 minutos.

Esta política registra el módulo y la versión de la aplicación que infringe la condición agrupando las series temporales de cada filtro por los valores de esas etiquetas.

  • El filtro de la condición analiza las respuestas HTTP de una aplicación App Engine y selecciona las que están en el intervalo de errores 5xx. Es el numerador de la relación.
  • El filtro de denominador de la condición analiza todas las respuestas HTTP de una aplicación App Engine.

Se cumple la condición y Monitoring envía una notificación del nuevo incidente inmediatamente. El intervalo de tiempo permitido del campo duration de la condición es de cero segundos. Esta condición usa un trigger recuento de uno, que es el número de series temporales que deben incumplir la condición para provocar el incidente. En el caso de una aplicación de App Engine con un solo servicio, un recuento de trigger es suficiente. Si tienes una aplicación con 20 servicios y quieres que se produzca un incidente si 3 o más servicios infringen la condición, usa un recuento de trigger de 3.

Configurar una proporción

Los filtros de numerador y denominador son exactamente iguales, excepto que el filtro de condición del numerador coincide con los códigos de respuesta del intervalo de errores, y el filtro de condición del denominador coincide con todos los códigos de respuesta. Las siguientes cláusulas solo aparecen 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 seleccionadas por cada filtro deben agregarse de la misma forma para que el cálculo de la proporción sea válido. Cada filtro puede recoger 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, lo que divide el conjunto de series temporales en varios grupos. Algunas de las series temporales de cada grupo coinciden con el filtro del numerador, mientras que el resto coincide con el filtro del denominador.

Para calcular una proporción, el conjunto de series temporales que coincida con cada filtro debe agregarse en una sola serie temporal. De esta forma, cada grupo tendrá dos series temporales: una para el numerador y otra para el denominador. A continuación, se puede calcular la proporción de puntos de las series temporales del numerador y del denominador de cada grupo.

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

  • Cada filtro crea una serie temporal alineada en intervalos de 5 minutos, con valores representados mediante el cálculo de ALIGN_DELTA en los valores de ese periodo de alineación de 5 minutos. Este alineador devuelve el número de respuestas coincidentes de ese periodo de alineación como un entero de 64 bits.

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

  • Las series temporales de cada grupo que coinciden con el filtro del numerador o del denominador se agregan en una sola serie temporal sumando los valores de las series temporales individuales mediante el reductor entre series REDUCER_SUM. De este modo, se obtiene una serie temporal para el numerador y otra para el denominador, y cada una de ellas indica el número de respuestas de todas las series temporales coincidentes del periodo de alineación.

A continuación, la política calcula la proporción de los valores de las series temporales del numerador y del denominador que representan a cada grupo. La condición de la política de alertas se cumple cuando la proporción es superior al 50 %.