Migrar reglas de alertas y receptores de Prometheus

En esta página se describe cómo migrar reglas de alertas de Prometheus a políticas de alertas basadas en PromQL en Cloud Monitoring. El proceso de migración es útil si usas PromQL en entornos ajenos a Google Cloud. Si migras tus reglas de alertas de Prometheus a Cloud Monitoring, podrás gestionar todas tus políticas de alertas en un solo entorno.

Para obtener información general sobre las políticas de alertas basadas en PromQL, consulta el resumen de las alertas de PromQL.

También puedes importar paneles de Grafana. Para obtener más información, consulta Importar paneles de Grafana a Cloud Monitoring.

Cómo funciona la migración

En la CLI de gcloud, puedes migrar tus reglas de alertas y receptores para crear políticas de alertas y canales de notificación de Cloud Monitoring. La CLI de gcloud puede realizar los siguientes tipos de migración:

  • Si proporcionas un archivo de configuración de Prometheus con una regla de alerta, la CLI de gcloud crea una política de alertas basada en PromQL.

    Puede proporcionar varios archivos de configuración de Prometheus al mismo tiempo para crear varias políticas de alertas basadas en PromQL.

  • Si proporcionas un archivo de Prometheus Alertmanager con al menos un receptor, la CLI de gcloud convertirá cada receptor en un canal de notificaciones equivalente en Monitoring.

  • Si proporciona un archivo de Alertmanager de Prometheus y un archivo de configuración de Prometheus al mismo tiempo, la CLI de gcloud creará la política de alertas y los canales de notificación, y, a continuación, asociará cada canal de notificación nuevo con la nueva política de alertas.

    Si proporcionas varios archivos de configuración con reglas de alertas, la CLI de gcloud asignará cada canal de notificaciones del archivo Alertmanager a cada nueva política de alertas.

Si tu regla de alerta de Prometheus hace referencia a una métrica personalizada, la CLI de gcloud requiere un descriptor de métrica equivalente para crear la política de alertas.

Los archivos de configuración de Prometheus y los archivos de Prometheus Alertmanager deben tener el formato de archivos de reglas de Prometheus válidos en YAML o JSON.

Configurar la asignación de campos

La CLI de gcloud asigna los campos entre una regla de alerta de Prometheus y una política de alertas de Cloud Monitoring de la siguiente manera:

Regla de alerta de Prometheus Política de alertas de Cloud Monitoring
alert conditionPrometheusQueryLanguage.alertRule
expr conditionPrometheusQueryLanguage.query
for conditionPrometheusQueryLanguage.duration
labels conditionPrometheusQueryLanguage.labels
annotations: "summary" documentation.subject
annotations: "description" documentation.content

Google Cloud variables de documentación en reglas de alertas de Prometheus migradas

Prometheus usa plantillas de campos de alerta para configurar variables en anotaciones y etiquetas de reglas de alerta. Cuando migras reglas de alertas de Prometheus que tienen plantillas de campos de alertas, Cloud Monitoring convierte las plantillas en variables de documentación de Cloud Monitoring de la siguiente manera:

Plantilla de campo de alerta de Prometheus Variable de documentación de Cloud Monitoring
{{$value}}

${metric.label.value}

Esta variable es una implementación de ${metric.label.KEY}, donde value contiene el valor de la consulta de PromQL.

{{humanize $value}}

${metric.label.value}

Esta variable es una implementación de ${metric.label.KEY}, donde value contiene el valor de la consulta de PromQL.

{{$labels}} ${metric_or_resource.labels}
{{humanize $labels}} ${metric_or_resource.labels}
{{$labels.key}}

Aparece como ${metric_or_resource.label.KEY} en la configuración de la documentación de la política de alertas.

  • Si KEY es una etiqueta válida, esta variable se muestra en la notificación como el valor de ${metric.label.KEY}.
  • Si KEY es un recurso válido, esta variable se muestra en la notificación como el valor de ${resource.label.KEY}.
  • Si KEY no es una etiqueta ni un recurso válidos, esta variable se mostrará en la notificación como una cadena vacía.
{{humanize $labels.<key>}}

Aparece como ${metric_or_resource.label.KEY} en la configuración de la documentación de la política de alertas.

  • Si KEY es una etiqueta válida, esta variable se muestra en la notificación como el valor de ${metric.label.KEY}.
  • Si KEY es un recurso válido, esta variable se muestra en la notificación como el valor de ${resource.label.KEY}.
  • Si KEY no es una etiqueta ni un recurso válidos, esta variable se mostrará en la notificación como una cadena vacía.

Migrar reglas de alertas y receptores de Prometheus

Para migrar tus reglas de alertas de Prometheus a políticas de alertas basadas en PromQL de Cloud Monitoring, usa el comando gcloud alpha monitoring policies migrate. Este comando también te permite migrar tus receptores de Prometheus a los canales de notificación de Cloud Monitoring.

  • Para migrar una regla de alerta, debes tener un archivo de reglas de Prometheus en formato YAML o JSON que contenga la regla de alerta.
  • Para migrar un receptor, debes tener un archivo YAML o JSON de Prometheus Alertmanager que contenga el receptor.

Google Cloud no admite la migración de reglas de registro de Prometheus. Para usar reglas de registro, te recomendamos que uses un evaluador de reglas autodesplegado.

Crear una política de alertas a partir de un archivo de configuración de Prometheus

Para crear una política de alertas a partir de un archivo de configuración de Prometheus, ejecuta el siguiente comando. Puedes crear varias políticas de alertas proporcionando varias rutas de archivo:

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2

Crear canales de notificaciones a partir de un archivo de configuración de Alertmanager de Prometheus

Para crear canales de notificación a partir de un archivo de configuración de Alertmanager de Prometheus, ejecuta el siguiente comando:

gcloud alpha monitoring policies migrate \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

Crear políticas de alertas y canales de notificación al mismo tiempo

Para crear políticas de alertas a partir de archivos de configuración de Prometheus y, al mismo tiempo, crear canales de notificación a partir de un archivo de configuración de Alertmanager de Prometheus, ejecuta el siguiente comando:

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2 \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

Ejemplo

Tienes un archivo de configuración de Prometheus con una regla de alerta que envía una alerta cuando la utilización de la CPU se mantiene por encima del 75% durante un minuto. La regla de alerta se configura de la siguiente manera:

groups:
- name: Utilization_Alerts
  interval: 30s
  rules:
  - alert: CPU_Utilization_Over_75
    expr: compute_googleapis_com:instance_cpu_utilization > 75
    for: 60s
    labels:
      severity: page
    annotations:
      subject: "Subject: ${metric.label.value}"
      description: "CPU utilization is over 75%"

También tienes un archivo AlertManager de Prometheus que contiene receptores de correo electrónico, PagerDuty y webhook.

receivers:
- name: 'team-emails'
  email_configs:
  - to: EMAIL_ADDRESS
- name: 'team-pager'
  pagerduty_configs:
  - service_key: SERVICE_KEY
- name: 'team-webhook'
  webhook_configs:
  - url: WEBHOOK_ADDRESS

Para crear la política de alertas y el canal de notificaciones, ejecuta el siguiente comando:

gcloud alpha monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_CONFIG_FILE \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_ALERTMANAGER_FILE

La CLI de gcloud crea una política de alertas como la del siguiente ejemplo:

  {
  "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID",
  "displayName": "Utilization_Alerts/CPU_Utilization_Over_75",
  "documentation": {
    "content": "CPU utilization is over 75%",
    "mimeType": "text/markdown",
    "subject": "Subject: ${metric.label.value}"
  },
  "userLabels": {},
  "conditions": [
    {
      "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID/conditions/CONDITION_ID",
      "displayName": "CPU_Utilization_Over_75"
      "conditionPrometheusQueryLanguage": {
        "alertRule": "CPU_Utilization_Over_75",
        "duration": "60s",
        "evaluationInterval": "30s",
        "labels": {
          "severity": "page"
        },
        "query": "compute_googleapis_com:instance_cpu_utilization > 75",
        "ruleGroup": "Utilization_Alerts"
      }
    }
  ],
  "alertStrategy": {},
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": [
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_1",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_2",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_3"
  ]
}

Migrar reglas de alertas de Managed Service para Prometheus

Google Cloud configura la evaluación de reglas gestionadas de Managed Service para Prometheus mediante los recursos personalizados Rules, ClusterRules y GlobalRules.

Para migrar estos recursos a una Google Cloud política de alertas basada en PromQL, haz lo siguiente:

  1. Copia la sección groups del recurso personalizado en un archivo de reglas de Prometheus.

  2. Migra el archivo de reglas con gcloud CLI.

Por ejemplo, tienes el siguiente recurso personalizado Rules:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: NAMESPACE_NAME
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

El archivo de reglas de Prometheus creado al copiar groups del recurso personalizado Rules anterior tendría el siguiente aspecto:

  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

Migrar varios recursos personalizados de Rules

Si quieres migrar varias reglas, CustomRules o GlobalRules, te recomendamos que crees y migres un archivo de reglas independiente para cada recurso. Para obtener más información, consulta la documentación de Prometheus.

Gestionar expresiones de filtro y agregación

Rules y ClusterRules filtran automáticamente sus expresiones de alerta de Prometheus en función de determinadas etiquetas. Para conservar este comportamiento en la consulta de una política de alertas migrada, debes incluir explícitamente estas etiquetas en un filtro o una expresión de agregación en tu archivo de reglas de Prometheus antes de migrar el archivo.

Por ejemplo, el evaluador de reglas gestionado de Managed Service para Prometheus ejecuta la expresión sum(up) < 10 de la siguiente manera:

sum(up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}) < 10

Sin embargo, si una política de alertas tiene la consulta de PromQL sum(up) < 10, Cloud Monitoring ejecuta la consulta como sum(up) < 10. Esta consulta se aplica a todos los proyectos, clústeres y espacios de nombres de tu ámbito de métricas. Google Cloud Para evitar este comportamiento, te recomendamos que agregues por etiquetas en tu consulta para asegurarte de que Cloud Monitoring la ejecute como esperas. Por ejemplo, cuando crees el archivo de reglas a partir del recurso personalizado Rules, puedes cambiar sum(up) < 10 por la siguiente expresión:

sum (up) by (project_id, cluster, namespace) < 10

La expresión anterior genera una serie temporal independiente para cada proyecto, clúster y espacio de nombres, y luego compara cada serie temporal con el umbral de alerta de <10.Google Cloud

En la siguiente tabla se muestra el orden de evaluación de los filtros de expresiones de alerta de las reglas y las reglas de clúster:

Tipo de recurso de la regla Filtra etiquetas
Regla
  1. project_id
  2. cluster
  3. namespace
ClusterRule
  1. project_id
  2. cluster

Para obtener más información sobre el comportamiento de los filtros en las expresiones de Prometheus, consulta Selectores de vectores instantáneos.