ext operaciones Panel
Conectar

Hogar/Documentos/Escucha

Contrato de seguimiento

Versión de contrato 2.0.0 · esquema de carga útil versión 2.0 · Planes de prueba/pago

El monitoreo pone a su extensión bajo vigilancia constante: un semáforo en vivo encendido su carta en la lista, una base escucha pestaña en Detalle y un mensaje de estado Telegram separado con alertas de borde. combina dos componentes habilitados de forma independiente: un empujar el latido del corazón (un agente en el host de su servicio informa en un horario declarado; el silencio es en sí misma una señal) y pings de tiempo de actividad (el panel comprueba su público URLs para disponibilidad).

↓ Descargar OpenAPI 3.1 (YAML) /monitoreo-openapi.yaml · info.versión 2.0.0

1. Cómo funciona (dos componentes, una luz)

Una extensión está "en monitoreo" cuando el monitoreo está habilitado y al menos una componente está configurado. De lo contrario, su tarjeta muestra un punto gris neutro.

1b. Los latidos del corazón y el grupo de tragamonedas

El monitoreo vive a nivel de extensión como dos listas planas independientes que comparten un grupo de tragamonedas: latidos del corazon (empujar a los productores, anteriormente "stands") y pings de tiempo de actividad (tirar cheques). Una extensión puede tener varios latidos del corazón: por ejemplo, un anfitrión principal y un trabajador remunerado. Cada latido empuja informes con su propio token al portador y declara lo suyo presentación (pestañas, secciones y Telegram líneas) a través de su label. Los pings de tiempo de actividad son una lista plana separada propiedad de la extensión, no anidada bajo ningún latido del corazón. El panel fusiona todo en una luz agregada (la peor), una Superficie detallada y un mensaje resumido Telegram.

Los latidos y los pings comparten una única extensión por extensión. piscina de tragamonedas: uno un latido cuesta un espacio, un ping activo cuesta un espacio y su suma no debe exceder el max_slots del plan (Prueba 3 · Studio 10 · Fleet 25). Exceder el grupo devuelve 409 slot_limit; después de una rebaja el exceso está suspendido (los pings primero, los latidos al final). La respuesta lleva slots_used y max_slots para que la interfaz de usuario pueda mostrar el presupuesto.

2. El semáforo

El agregado es el lo peor de resumen en todos los habilitados componente del latido del corazón y la luz de cada ping activo, donde la gravedad se ordena como ok < warn < crit. El componente del latido del corazón es max(reported, watchdog): reported es la gravedad del overall métrica de la última aceptado informe; watchdog es un piso de frescura calculado a partir de la recepción del propio panel. reloj (la desviación del reloj del agente es inofensiva).

EstadoColorCuando
off⚪ grisMonitoreo no habilitado o ningún componente configurado.
paused⚪ grisHabilitado pero congelado (plan de puerta o pausa manual). Los informes todavía están almacenados.
green🟢Todos los componentes ok.
yellow🟡Peor componente warn.
red🔴Peor componente crit.

La gravedad es canónica ok | warn | crit. Los alias amigables se normalizan al ingresar: warning se convierte warn; error y critical se convierten en crit.

3. Perro guardián (latidos perdidos)

Usted declara el intervalo de informe esperado (60 s a 24 h) al habilitar el latido del corazón. A continuación, el perro guardián ilumina la luz con frescura, con grace = max(60s, 25% of the interval) para absorber el cron y la fluctuación de la red:

Edad del último informe aceptadoPiso de vigilancia
hasta intervalo + graciaok (verde)
1 informe perdido (hasta 2 × intervalo + gracia)warn (amarillo)
2 o más informes perdidoscrit (rojo)

Un informe rechazado (401 / 422 / 429) nunca actualiza el mecanismo de vigilancia, por lo que un informe roto el agente escala honestamente; el último motivo del rechazo es visible en el configuración de monitoreo. La recuperación es instantánea: se vuelve a calcular el primer informe aceptado la luz inmediatamente.

4. Pings de tiempo de actividad

Un ping es una verificación de disponibilidad con nombre de un https URL público. el panel realiza GET con un tiempo de espera de 10 segundos, sigue como máximo 5 redirecciones, no lee ningún cuerpo más allá de un límite mínimo y trata un estado final de clase 2xx como éxito (204 y 206 también cuentan). una final 3xx (bucle o límite de redireccionamiento), 4xx, 5xx, tiempo de espera o DNS/TLS/error de red es un fracaso. Una verificación fallida se confirma mediante un reintento después de aproximadamente 15 segundos antes de que cuente, que absorbe las fluctuaciones de una sola red.

Fallos consecutivos confirmadosluz de ping
0ok
1warn
2 o máscrit

Los resultados del ping aparecen como métricas propias ping:<name> en el pings sección (Uptime) de la base escucha pestaña y como la línea reservada Telegram pings: 🟢 api 210ms · 🟢 site 90ms · 🔴 docs (timeout). La cantidad de pings por extensión y el intervalo mínimo dependen del plan:

PlanPings de tiempo de actividad por extensiónIntervalo mínimo de ping
Ensayo35 minutos
Independiente35 minutos
Estudio101 minuto
Flota251 minuto

El monitoreo en su conjunto es solo de prueba/pago; el intervalo mínimo de latidos es de 60 segundos en todos los planes.

5. Ampliar el seguimiento

En la extensión Ajustes, bloque de seguimiento:

6. El formato del informe

El informe tiene la misma carga útil v2 basada en metadatos que el contrato de métricas personalizadas (pestañas, secciones, Telegram líneas, métricas), empujado a POST /api/v1/monitoring/report con Authorization: Bearer <monitoring token>. Monitoreo agrega identificaciones reservadas:

identificación reservadaEstadoSignificado
overallrequeridoMétrica del tipo status: veredicto del tick, gravedad ok | warn | crit. Alimenta el agregado. Se rechaza un informe sin un overall válido (422).
issuesrecomendadoMétrica del tipo list: los problemas actuales. En los textos de alerta se citan hasta 5 artículos.
ping:*prohibidoEspacio de nombres Metric-id de las métricas de ping propias del panel; empujarlo es rechazado (422).
pingsprohibidoTelegram ID de línea de la línea de ping del panel; empujarlo es rechazado (422).
monitoringpestaña propiedad del panelIdentificación de la pestaña base. Las métricas pueden abordarlo (dashboard.tab: "monitoring") sin declararlo en tabs; se ignora una declaración.

Límites: carga útil como máximo 64KB, como mucho 200 métricas, a lo sumo 2 informes por minuto por fuente (el exceso obtiene 429 y no no cuenta como un latido del corazón).

6.1. Informe de ejemplo

{
  "schema_version": "2.0",
  "generated_at": "2026-07-12T10:19:58Z",
  "tabs":     [ { "id": "stand", "title": "Stand", "order": 5, "icon": "server" } ],
  "sections": [ { "tab": "stand",      "id": "docker", "title": "Docker", "order": 0 },
                { "tab": "monitoring", "id": "host",   "title": "Host",   "order": 10 } ],
  "telegram": { "header": "{sev} {name} monitoring",
                "lines": [ { "id": "host",   "order": 0, "prefix": "🖥 " },
                           { "id": "docker", "order": 1, "prefix": "📦 " } ] },
  "metrics": [
    { "id": "overall", "kind": "status", "state": "ok", "severity": "ok" },

    { "id": "issues", "kind": "list",
      "value": { "items": [ { "text": "RAM 91% (7.1/7.8G)", "severity": "warn" } ] },
      "dashboard": { "show": true, "tab": "monitoring", "section": "host", "order": 0,
                     "render": "list", "name": "Issues" },
      "telegram":  { "show": false } },

    { "id": "ram", "kind": "percent", "label": "RAM", "value": 91, "severity": "warn",
      "dashboard": { "show": true, "tab": "monitoring", "section": "host", "order": 1,
                     "render": "kpi" },
      "telegram":  { "show": true, "line": "host", "pos": 10,
                     "format": "RAM {value}%", "sep": " · " } }
  ]
}

Respuesta exitosa:

{ "accepted": true, "effective": "green", "next_expected_by": "2026-07-12T10:26:13Z" }

7. Integración de un script de monitor (estilo monitor.sh)

Si ya ejecuta un script de verificación de estado cron, agregue un POST de mejor esfuerzo al final final de su tic. Un fallo en la entrega no debe romper el tic: el organismo de control De todos modos, capte un silencio prolongado.

# monitor.env
EXTOPS_REPORT_URL="https://extops.dev/api/v1/monitoring/report"
EXTOPS_REPORT_TOKEN="<monitoring token from Settings>"

# end of the tick: build the payload with jq from the values you already computed,
# then push it best-effort (never let delivery break the tick itself)
payload="$(jq -n --arg sev "$SEVERITY" '{
  schema_version: "2.0",
  generated_at: (now | todate),
  metrics: [ { id: "overall", kind: "status", state: $sev, severity: $sev } ]
}')"
curl -sS -m 10 -X POST "$EXTOPS_REPORT_URL" \
  -H "Authorization: Bearer $EXTOPS_REPORT_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$payload" || true

Asigne la gravedad de su script al conjunto canónico (critical es aceptado y normalizado a crit) y alimente su lista de problemas existente en la métrica issues. Establecer el intervalo declarado igual al cron período.

8. Telegram: mensaje de estado y alertas separados

9. El contrato legible por máquina

La descripción formal del punto final del informe, el esquema de carga útil, el reservado Los identificadores y la semántica del semáforo son el archivo OpenAPI 3.1. lleva el misma versión de contrato (2.0.0).

↓ Descargar OpenAPI 3.1 (YAML) /monitoreo-openapi.yaml