Monitoreo del tiempo de actividad del sitio web
Un latido registra tanto las comprobaciones exitosas como las fallidas. Esto hace visible una interrupción, pero también revela cuándo el trabajo de monitoreo deja de enviar datos.
Las comprobaciones periódicas convierten el tiempo de inactividad (y el silencio inesperado) en eventos cuestionables.
Use el SDK de Telemetry para enviar un latido por cada comprobación del sitio web. Después, consulte las comprobaciones fallidas y los intervalos sin datos.
Requisitos previos
- Una clave API válida para Telemetry
- Comprensión básica de JavaScript y Node.js
1. Instale el Telemetry SDK
Primero, debe instalar Telemetry SDK en su proyecto. Si aún no lo ha hecho, ejecute el siguiente comando:
npm install telemetry-sh axios
2. Inicializar Telemetry
Usa Node.js 18 o posterior. Configura TELEMETRY_API_KEY en el entorno del servidor antes de ejecutar el script; nunca pongas la clave en código del navegador.
import telemetry from "telemetry-sh";
import axios from "axios";
const apiKey = process.env.TELEMETRY_API_KEY;
if (!apiKey) throw new Error("Set TELEMETRY_API_KEY in server-side configuration");
telemetry.init(apiKey);
3. Crea una comprobación de los latidos del corazón
Para monitorear el tiempo de actividad, puede configurar una función de latido que enviará periódicamente un ping al servicio Telemetry. El latido registrará el estado de su sitio web, permitiéndole monitorear su disponibilidad.
A continuación se muestra un ejemplo básico de una función de latido:
const sendHeartbeat = async (url) => {
const startedAt = performance.now();
let heartbeat;
try {
const response = await axios.get(url, {
timeout: 10_000,
validateStatus: () => true,
});
const isOnline = response.status >= 200 && response.status < 400;
heartbeat = {
url,
timestamp: new Date().toISOString(),
status_code: response.status,
status: isOnline ? "check_passed" : "http_error",
is_online: isOnline,
latency_ms: performance.now() - startedAt,
};
} catch {
heartbeat = {
url,
timestamp: new Date().toISOString(),
status_code: 0,
status: "probe_error",
is_online: false,
error_type: "request_failed",
latency_ms: performance.now() - startedAt,
};
}
try {
await telemetry.log("website_uptime", heartbeat);
} catch {
try { console.warn("Heartbeat export failed"); } catch {}
}
return heartbeat;
};
Esta es una comprobación básica desde un solo host, no una garantía de disponibilidad en producción. Usa solo URLs públicas sin credenciales ni tokens. Los códigos HTTP 2xx/3xx cumplen el criterio del ejemplo; un tiempo de espera agotado o un fallo de transporte es una comprobación fallida, no prueba de que el sitio esté caído para todos. El tiempo de espera de diez segundos de Axios no es un límite total estricto.
La exportación se espera por separado y su fallo no cambia el resultado HTTP. Aquí el SDK no tiene un tiempo de espera de envío configurable: una exportación bloqueada puede retrasar comprobaciones posteriores. En producción, separa la exportación mediante una cola acotada o un cliente HTTP propio y supervisa también el monitor.
4. Programe los latidos del corazón
Ejecuta una comprobación de inmediato y programa la siguiente cuando terminen la comprobación actual y su envío:
const urlToMonitor = "https://example.com"; // Replace with a public URL.
const interval = 5 * 60 * 1000;
async function runHeartbeat() {
try {
await sendHeartbeat(urlToMonitor);
} catch {
try { console.warn("Heartbeat check failed"); } catch {}
} finally {
setTimeout(runHeartbeat, interval);
}
}
void runHeartbeat();
Este programador empieza inmediatamente, espera a que terminen una comprobación y su exportación, y después espera cinco minutos antes de la siguiente ejecución. Evita comprobaciones simultáneas, pero deriva; no es un horario fijo de cinco minutos ni un programador duradero.
5. Consultar tiempo de actividad
Consulta el porcentaje de comprobaciones registradas que cumplieron el criterio HTTP:
const results = await telemetry.query(`
SELECT
url,
COUNT(*) AS total_pings,
SUM(CASE WHEN is_online THEN 1 ELSE 0 END) AS online_pings,
(SUM(CASE WHEN is_online THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS observed_check_success_percentage
FROM
website_uptime
WHERE
timestamp_utc >= now() - INTERVAL '30 days'
GROUP BY
url
`);
console.log(results);
La consulta mide el porcentaje de comprobaciones observadas que cumplieron el criterio. Las comprobaciones programadas que faltan no aparecen en el denominador, por lo que no mide disponibilidad por tiempo transcurrido ni un SLA. Usa un registro de comprobaciones esperadas y un monitor independiente para distinguir falta de cobertura de fallos observados.
6. Explore el tiempo de actividad en Telemetry
La interfaz de usuario de Telemetry le permite visualizar y explorar sus datos de tiempo de actividad de forma interactiva. Visite Tablero Telemetry e inicie sesión con sus credenciales para crear paneles, gráficos y más en función de sus datos de monitoreo de tiempo de actividad.
Próximos pasos
Un porcentaje de tiempo de actividad no puede detectar un monitor que dejó de funcionar. Agregue el receta de latidos faltantes y avise cuando la última verificación sea anterior al cronograma esperado más un pequeño período de gracia.