Prometheus

Monitorización web con Prometheus

La monitorización web con Prometheus empieza extrayendo el endpoint de métricas de Relvato, o apuntando Grafana o el propio scraping de Prometheus de Grafana Cloud a la misma URL, y grafica y alerta sobre fallos de monitores, uptime, SSL y caducidad de dominio junto a todo lo que ya vigilas.

Funciona en todos los planes, también en Free, con cualquier clave de API de Relvato, incluso de solo lectura. La respuesta se actualiza como máximo cada 30 segundos, así que un intervalo de scrape de 60 segundos sobra.

GET /api/v1/metrics
# TYPE relvato_monitor_up gauge
relvato_monitor_up{site="style4street.com",monitor="Guest checkout",group="flow"} 1
relvato_monitor_up{site="style4street.com",monitor="Vulnerability scan",group="security"} 0
# TYPE relvato_uptime_response_time_seconds gauge
relvato_uptime_response_time_seconds{site="style4street.com",region="eu"} 0.183
Un scrape en formato de texto de Prometheus: la misma respuesta que leen Grafana y la integración OpenMetrics de Datadog.
Configuración

Lista para hacer scraping en tres pasos

No hay que instalar ninguna app: Prometheus lee el endpoint de métricas como cualquier otro exporter.

01

Crea una clave de API

En Relvato, abre «API access» y crea una clave. Una clave de solo lectura basta: el endpoint de métricas solo lee.

02

Añade el job de scrape

Apunta Prometheus a /api/v1/metrics con la clave como token Bearer. Añade ?siteId= para extraer solo un sitio en vez de toda la cuenta.

03

Grafícalo y alerta sobre ello

Las series se comportan como las de cualquier otro exporter: construye paneles en Grafana, o alerta directamente desde Prometheus y Alertmanager.

scrape_configs:
  - job_name: relvato
    scheme: https
    metrics_path: /api/v1/metrics
    # params: { siteId: ["st_1a2b3c"] }   # one site instead of the whole account
    scrape_interval: 60s
    authorization:
      type: Bearer
      credentials_file: /etc/prometheus/relvato_api_key  # holds rlv_your_key
    static_configs:
      - targets: ["app.relvato.com"]

credentials_file mantiene la clave fuera del archivo de configuración; usa credentials en su lugar para pegarla directamente. Cada scrape cuenta como una solicitud contra el límite de tu plan.

Qué incluye

Qué expone el endpoint de métricas

GET /api/v1/metrics responde en el formato de texto de Prometheus (0.0.4): cada sitio y monitor de tu cuenta como gauges, en caché durante 30 segundos.

Cada serie lleva site y site_id; las series de monitores añaden monitor, monitor_id, monitor_key y group.

MétricaQué significa
relvato_monitor_up1 cuando la última ejecución de un monitor pasó, 0 cuando encontró un problema. No hay serie cuando la última ejecución no pudo correr: mira monitor_last_outcome en su lugar.
relvato_monitor_last_outcome1 para el resultado de la última ejecución (outcome="ok", "issue" o "not-run"), para que también puedas alertar sobre «no pudo correr».
relvato_monitor_last_run_timestamp_seconds / _duration_secondsCuándo fue la última ejecución y cuánto tardó, en segundos.
relvato_uptime_up / relvato_uptime_response_time_secondsEstado de uptime y tiempo de respuesta, por región de sondeo.
relvato_heartbeat_up / relvato_port_upHeartbeats y monitores de puerto.
relvato_ssl_certificate_expiry_timestamp_seconds / relvato_domain_expiry_timestamp_secondsFechas de caducidad del certificado SSL y del dominio.
relvato_site_ownership_provenSi la propiedad del sitio está demostrada.
relvato_runs_used / relvato_runs_limitEjecuciones usadas este mes frente al límite mensual de tu plan.

Un scrape se ve así:

# TYPE relvato_monitor_up gauge
relvato_monitor_up{site="style4street.com",site_id="st_1a2b3c",monitor="Guest checkout",monitor_id="ck_4d5e6f",monitor_key="woo-checkout",group="flow"} 1
relvato_monitor_up{site="style4street.com",site_id="st_1a2b3c",monitor="Vulnerability scan",monitor_id="ck_7a8b9c",monitor_key="vuln-scan",group="security"} 0
# TYPE relvato_monitor_last_outcome gauge
relvato_monitor_last_outcome{site="style4street.com",site_id="st_1a2b3c",monitor="Storefront",monitor_id="ck_1f2e3d",monitor_key="storefront",group="flow",outcome="not-run"} 1
# TYPE relvato_monitor_last_run_timestamp_seconds gauge
relvato_monitor_last_run_timestamp_seconds{site="style4street.com",site_id="st_1a2b3c",monitor="Guest checkout",monitor_id="ck_4d5e6f",monitor_key="woo-checkout",group="flow"} 1794214842
# TYPE relvato_uptime_response_time_seconds gauge
relvato_uptime_response_time_seconds{site="style4street.com",site_id="st_1a2b3c",region="eu"} 0.183
relvato_uptime_response_time_seconds{site="style4street.com",site_id="st_1a2b3c",region="us"} 0.412
# TYPE relvato_ssl_certificate_expiry_timestamp_seconds gauge
relvato_ssl_certificate_expiry_timestamp_seconds{site="style4street.com",site_id="st_1a2b3c"} 1799971200
# TYPE relvato_runs_used gauge
relvato_runs_used 412
Grafana y Datadog

También funciona con Grafana y Datadog

Añade la misma URL como fuente de datos de Prometheus en Grafana, o deja que el propio scraping de Prometheus de Grafana Cloud la recoja directamente: sin otra integración que instalar. La integración OpenMetrics de Datadog lee la misma URL y la misma cabecera Authorization: Bearer.

Alertas

Alerta cuando un monitor encuentra un problema

Dos reglas para empezar: dispara cuando la última ejecución de un monitor encuentra un problema, y dispara otra vez antes de que caduque un certificado.

groups:
  - name: relvato
    rules:
      - alert: RelvatoMonitorFoundAProblem
        expr: relvato_monitor_up == 0
        for: 5m
        annotations:
          summary: "{{ $labels.monitor }} on {{ $labels.site }} found a problem"
      - alert: RelvatoCertificateExpiringSoon
        expr: relvato_ssl_certificate_expiry_timestamp_seconds - time() < 14 * 86400
        annotations:
          summary: "The certificate on {{ $labels.site }} expires in less than 14 days"

¿No usas Prometheus? Relvato puede abrir una incidencia en PagerDuty directamente, sin necesidad de scraping: Monitorización web con PagerDuty →

O publicar el problema directamente en un canal de Slack: Alertas de monitorización web en Slack →

Preguntas frecuentes

Prometheus, explicado

¿Qué planes pueden hacer scraping del endpoint de métricas?

Todos los planes, también Free, con cualquier clave de API de Relvato, incluso de solo lectura. El endpoint de métricas solo lee, así que nunca necesita una clave de acceso completo.

¿Qué tan actualizados están los datos?

La respuesta se guarda en caché como máximo 30 segundos, así que un intervalo de scrape de 60 segundos sobra. Cada scrape cuenta como una solicitud contra el límite de tu plan.

¿Puedo hacer scraping de un solo sitio?

Sí: añade ?siteId= con el id de Relvato del sitio a la URL, y la respuesta cubrirá solo ese sitio en vez de toda tu cuenta.

¿Qué pasa cuando un monitor no pudo correr?

No hay serie relvato_monitor_up para él. relvato_monitor_last_outcome con outcome="not-run" vale 1 en su lugar, así que también puedes alertar cuando un firewall bloquea a Relvato o el sitio no responde.

¿Funciona con Grafana Cloud o Datadog?

Sí. El propio scraping de Prometheus de Grafana Cloud y la integración OpenMetrics de Datadog leen la misma URL y la misma cabecera Authorization: Bearer, sin nada específico de Relvato que instalar en ninguno de los dos.

¿Dónde está la lista completa de métricas y etiquetas?

La sección «Prometheus and Grafana» de la referencia para desarrolladores lista cada métrica, cada etiqueta y las reglas de alerta de arriba al completo.

¿Necesito tener Prometheus para recibir alertas?

No. Relvato puede enviar alertas por su cuenta, directamente a PagerDuty, Slack y otras apps de chat, sin que tengas que ejecutar ni mantener Prometheus.

Relacionado

Más formas de trabajar con Relvato

Lleva tus monitores a los paneles que ya vigilas

Crea una clave de API y añade el job de scrape: las primeras métricas aparecen en menos de un minuto.