Tutorial Básico de Site24x7

¿Qué es Site24x7?

Site24x7 es una plataforma de monitoreo integral que te permite supervisar el rendimiento y disponibilidad de tus aplicaciones web, servidores, APIs y servicios en la nube. Funciona como un "vigilante" que verifica constantemente que tus aplicaciones estén funcionando correctamente y te alerta cuando algo va mal.

Principales características:

  • Monitoreo de uptime (tiempo de actividad) de sitios web
  • Seguimiento del rendimiento de APIs REST y transacciones
  • APM (Application Performance Monitoring) para aplicaciones
  • Monitoreo de servidores y recursos
  • Alertas en tiempo real
  • Métricas personalizadas y trazas de rendimiento

¿Por qué usarlo?

Imagina que tienes una aplicación en producción y se cae a las 3 AM. Sin Site24x7, no te enterarías hasta que los usuarios comiencen a reportar problemas. Con Site24x7, recibes una notificación inmediata y puedes actuar antes de que afecte a muchos usuarios.

Uso con Node.js

Site24x7 ofrece un agente APM específico para Node.js que monitorea automáticamente el rendimiento de tu aplicación backend.

Instalación del agente APM Node.js (Versión 4.x+)

Paso 1: Instalar el paquete

npm install apminsight --save

Paso 2: Configuración

Tienes dos opciones de configuración:

Opción A: Archivo de configuración (Recomendado)

Crea un archivo apminsightnode.json en el directorio raíz de tu aplicación:

{
  "licenseKey": "TU_LICENSE_KEY_DE_SITE24X7",
  "appName": "Mi-App-Node",
  "port": 3000
}

Opción B: Variables de entorno

export APMINSIGHT_LICENSE_KEY="TU_LICENSE_KEY"
export APMINSIGHT_APP_NAME="Mi-App-Node"
export APMINSIGHT_PORT=3000

Paso 3: Inicializar el agente

Añade esta línea al inicio de tu archivo principal (antes de cualquier otro require):

// Para CommonJS
require('apminsight');

// O para ES Modules
import apminsight from 'apminsight';
apminsight.config();

const express = require('express');
const app = express();

// Tu aplicación normal
app.get('/', (req, res) => {
  res.send('Mi aplicación Node.js');
});

app.get('/api/orders', async (req, res) => {
  // El agente rastreará automáticamente esto
  const orders = await getOrders();
  res.json(orders);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Servidor corriendo en puerto ${PORT}`);
});

Método alternativo con NODE_OPTIONS:

# Usando variable de entorno
export NODE_OPTIONS="-r apminsight"
node app.js

# O directamente en el comando
node -r apminsight app.js

Endpoint de Health Check adicional

Además del APM, puedes crear un endpoint de health check simple:

app.get('/health', (req, res) => {
  res.status(200).json({
    status: 'healthy',
    uptime: process.uptime(),
    timestamp: Date.now(),
    environment: process.env.NODE_ENV
  });
});

Características monitoreadas automáticamente:

  • ✅ Tiempo de respuesta HTTP
  • ✅ Throughput (peticiones por minuto)
  • ✅ Operaciones de base de datos (MySQL, PostgreSQL, MongoDB, Redis, etc.)
  • ✅ Llamadas HTTP externas
  • ✅ Errores y excepciones
  • ✅ Frameworks soportados: Express, Koa, Hapi

Uso con Next.js

Next.js tiene soporte oficial desde 2024 con un paquete específico.

Instalación para Next.js

Paso 1: Instalar los paquetes necesarios

npm install apminsight --save
npm install @apminsight/next --save

Paso 2: Configuración

Crea el archivo apminsightnode.json en la raíz:

{
  "licenseKey": "TU_LICENSE_KEY_DE_SITE24X7",
  "appName": "Mi-App-NextJS",
  "port": 3000
}

Paso 3: Modificar package.json

Actualiza tus scripts en package.json:

{
  "scripts": {
    "dev": "NODE_OPTIONS='-r @apminsight/next' next dev",
    "build": "next build",
    "start": "NODE_OPTIONS='-r @apminsight/next' next start"
  }
}

API Routes con Next.js App Router

Para Next.js 13+ con App Router:

// app/api/health/route.js
export async function GET() {
  const healthData = {
    status: 'ok',
    timestamp: new Date().toISOString(),
    version: process.env.APP_VERSION || '1.0.0',
    uptime: process.uptime()
  };

  return Response.json(healthData, { status: 200 });
}

Monitoreo avanzado de servicios

// app/api/monitor/route.js
export async function GET() {
  try {
    // Verificar servicios críticos
    const checks = await Promise.all([
      checkDatabase(),
      checkExternalAPI(),
      checkCache()
    ]);

    const allHealthy = checks.every(check => check.healthy);

    return Response.json({
      status: allHealthy ? 'healthy' : 'degraded',
      services: {
        database: checks[0],
        externalAPI: checks[1],
        cache: checks[2]
      },
      timestamp: new Date().toISOString()
    }, { status: allHealthy ? 200 : 503 });
  } catch (error) {
    return Response.json({
      status: 'error',
      message: error.message
    }, { status: 500 });
  }
}

async function checkDatabase() {
  try {
    // Lógica para verificar conexión a BD
    return { healthy: true, responseTime: 50 };
  } catch (error) {
    return { healthy: false, error: error.message };
  }
}

async function checkExternalAPI() {
  try {
    // Verificar API externa
    return { healthy: true, responseTime: 120 };
  } catch (error) {
    return { healthy: false, error: error.message };
  }
}

async function checkCache() {
  try {
    // Verificar Redis/cache
    return { healthy: true, responseTime: 10 };
  } catch (error) {
    return { healthy: false, error: error.message };
  }
}

Configuración en Site24x7

1. Obtener la License Key

  1. Inicia sesión en tu cuenta de Site24x7
  2. Ve a Admin → Developer → API
  3. Copia tu License Key para usarla en la configuración

2. Crear Monitor de Website

  1. Ve a Monitors → Add Monitor → Website Monitor
  2. Configura:
    • Display Name: Nombre descriptivo
    • Website URL: https://tuapp.com/health
    • Check Frequency: Cada 1, 5 o 10 minutos
    • HTTP Method: GET
  3. Haz clic en Save

3. Crear Monitor de REST API

  1. Ve a Monitors → Add Monitor → REST API
  2. Configura:
    • Display Name: API Monitor
    • Endpoint URL: Tu endpoint de API
    • Check Frequency: Según necesites
    • Authentication: Si es necesario (Basic, OAuth 2.0, etc.)

4. Configurar Alertas

  1. Ve a Admin → Configuration Profiles → Threshold and Availability
  2. Define umbrales:
    • Tiempo de respuesta > 3000ms
    • Código de estado HTTP ≠ 200
    • Tiempo de inactividad > 2 minutos
  3. Configura notificaciones:
    • Email, SMS, Slack, webhooks
    • Define grupos de usuarios

Métricas monitoreadas por el agente APM

Node.js y Next.js:

  • Apdex Score: Índice de satisfacción del usuario (0-1)
  • Tiempo de respuesta promedio: Latencia de tus endpoints
  • Throughput: Peticiones por minuto
  • Tasa de errores: Porcentaje de peticiones fallidas
  • Operaciones de base de datos: Queries SQL con tiempo de ejecución
  • Llamadas HTTP externas: APIs de terceros
  • Traces detallados: Stack traces completos de errores
  • Componentes externos: Redis, MongoDB, Elasticsearch, etc.

Soporte de bases de datos (2025):

  • MySQL, MySQL2, PostgreSQL, MongoDB
  • Redis, ioredis, Memcached
  • Elasticsearch, Cassandra
  • MSSQL, Oracle Database

Mejores prácticas

  1. Health Checks inteligentes: No solo retornes un 200 OK, verifica realmente que los servicios críticos funcionen

  2. Monitoreo dual: Usa tanto el Website Monitor (para disponibilidad externa) como el APM (para rendimiento interno)

  3. Alertas graduales:

    • TROUBLE: Tiempo de respuesta lento
    • DOWN: Servicio no responde
  4. Monitoreo de transacciones completas: Usa REST API Transaction para probar flujos completos (login → checkout → payment)

  5. Variables de entorno: Nunca hardcodees las License Keys, usa variables de entorno

  6. Diferentes ambientes: Configura monitores separados para desarrollo, staging y producción

  7. Integración con RUM: Para Next.js, combina el monitoreo backend con Real User Monitoring para métricas del frontend

Ejemplo completo: Docker con Node.js

FROM node:18-alpine

WORKDIR /app

# Copiar package.json
COPY package*.json ./

# Instalar dependencias incluyendo apminsight
RUN npm install

# Copiar código
COPY . .

# Copiar configuración de APM
COPY apminsightnode.json ./

# Exponer puerto
EXPOSE 3000

# Iniciar con APM
CMD ["node", "-r", "apminsight", "app.js"]

Con variables de entorno:

docker run -e APMINSIGHT_LICENSE_KEY="tu-key" \
           -e APMINSIGHT_APP_NAME="mi-app" \
           -e APMINSIGHT_PORT=3000 \
           -p 3000:3000 \
           mi-app-node

Diferencias importantes con OAuth 2.0 (Actualización 2025)

Site24x7 migró completamente a OAuth 2.0. Si usas la API REST directamente:

const axios = require('axios');

const getAccessToken = async () => {
  const response = await axios.post('https://accounts.zoho.com/oauth/v2/token', {
    refresh_token: 'TU_REFRESH_TOKEN',
    client_id: 'TU_CLIENT_ID',
    client_secret: 'TU_CLIENT_SECRET',
    grant_type: 'refresh_token'
  });
  return response.data.access_token;
};

const getMonitors = async () => {
  const token = await getAccessToken();
  const response = await axios.get('https://www.site24x7.com/api/monitors', {
    headers: {
      'Authorization': `Zoho-oauthtoken ${token}`,
      'Accept': 'application/json; version=2.0'
    }
  });
  return response.data;
};

Conclusión

Con esta configuración actualizada, tendrás visibilidad completa sobre el estado y rendimiento de tus aplicaciones Node.js y Next.js en Site24x7. El agente APM se encargará automáticamente de recopilar métricas importantes sin que tengas que instrumentar manualmente tu código.

Recursos adicionales:

¡Feliz monitoreo! 🚀

Más Recursos