Opsgenie y Grafana OnCall: dos pilares que desaparecen
Atlassian adquirió Opsgenie en 2018 y lo integró progresivamente en la suite Jira. El anuncio de fin de vida se publicó en la página de estado oficial de Atlassian: el servicio se detiene el 5 de abril de 2027. Los usuarios disponen de algo más de un año para migrar sus políticas de guardia, sus integraciones y su historial de incidencias. Grafana OnCall OSS, el componente open source de Grafana OnCall, fue archivado en GitHub el 24 de marzo de 2026. El equipo de Grafana Labs indicó que la versión cloud sigue disponible, pero el repositorio de autoalojamiento ya no recibe parches ni nuevas funcionalidades. La convergencia de estos dos eventos en menos de doce meses crea una ventana de migración que los equipos harían bien en planificar ahora en lugar de esperar la presión de las últimas semanas antes del plazo de abril de 2027.
Lo que debe cubrir una solución de gestión de incidencias
- Recepción y deduplicación de alertas desde Prometheus, Grafana, Zabbix o cualquier webhook HTTP
- Enrutamiento de alertas al equipo correcto según reglas configurables (severidad, servicio, horario)
- Gestión de turnos de guardia (on-call schedules) con rotaciones semanales o personalizadas
- Escalado automático si una alerta no es reconocida en el tiempo definido
- Notificaciones multicanal: correo electrónico, SMS, llamada de voz, Slack, Microsoft Teams
- Página de estado pública para informar a los usuarios en tiempo real
- Historial de incidencias consultable y exportable para post-mortems
- API REST para integración en pipelines CI/CD y herramientas de automatización
OneUptime vs IncidentRelay vs PagerDuty
Desplace la tabla
| Criterio | OneUptime | IncidentRelay | PagerDuty (SaaS) |
|---|---|---|---|
| Licencia | Apache 2.0 | MIT | Propietaria |
| Alojamiento | Self-hosted (Docker Compose) | Self-hosted (Docker Compose) | Solo cloud |
| Stack tecnológico | Node.js / TypeScript, PostgreSQL | Go, SQLite/PostgreSQL | No divulgado |
| RAM mínima recomendada | 4 GB (producción ligera), 8 GB aconsejado | 512 MB (SQLite), 2 GB (PostgreSQL) | N/A |
| Página de estado integrada | Sí, pública y personalizable | Sí, básica | Sí, vía Statuspage (pago separado) |
| Precio base | Gratuito (self-hosted) | Gratuito (self-hosted) | De pago (ver precios oficiales) |
Requisitos de VPS para OneUptime
OneUptime utiliza una arquitectura multicontenedor orquestada por Docker Compose. Para un equipo de menos de veinte personas con un volumen de alertas moderado (menos de mil eventos al día), un VPS con 4 vCPU y 8 GB de RAM es una base sólida. Por debajo de 4 GB de RAM varios contenedores compiten al arranque y provocan reinicios repetidos. El almacenamiento debe estar en un volumen SSD: OneUptime escribe frecuentemente en PostgreSQL y en su bus de eventos interno. Prever al menos 40 GB para los logs y la base de datos en un periodo de seis meses. El servidor debe exponer los puertos 80 y 443; se puede colocar un proxy inverso nginx o Caddy delante si el VPS ya aloja otros servicios. Se requieren Docker Engine versión 24 o superior y Docker Compose versión 2.20 o superior. Una dirección IP fija y un nombre de dominio con registro DNS A son necesarios para el certificado TLS y para que los webhooks entrantes sean accesibles.
Desplegar OneUptime en un VPS en 7 pasos
Conéctate al VPS por SSH e instala Docker Engine y Docker Compose v2 desde el repositorio oficial de Docker:
curl -fsSL https://get.docker.com | sh, luego verifica condocker compose version.Clona el repositorio de OneUptime:
git clone https://github.com/OneUptime/oneuptime.gity entra en el directoriocd oneuptime.Copia el archivo de configuración de ejemplo:
cp .env.example .envy ábrelo en un editor. Configura como mínimoDOMAIN(tu dominio o subdominio),DISABLE_TELEMETRY=truesi no quieres enviar métricas de uso, y las variables SMTP (SMTP_HOST,SMTP_PORT,SMTP_USERNAME,SMTP_PASSWORD,SMTP_FROM_EMAIL) para las notificaciones por correo.Lanza los contenedores en segundo plano:
docker compose up -d. El primer arranque descarga las imágenes y ejecuta las migraciones de base de datos; espera entre tres y cinco minutos según el ancho de banda.Verifica que todos los servicios estén sanos:
docker compose ps. Los contenedoresoneuptime-app,oneuptime-worker,oneuptime-postgresyoneuptime-redisdeben mostrar el estadorunning. Si un contenedor falla, consulta sus logs condocker compose logs <nombre-del-contenedor> --tail=100.Abre el navegador en
https://tu-dominioy crea la cuenta de administrador inicial. Luego ve a *Settings → On-Call Duty → Policies* para crear tu primera política: define el equipo, las ventanas horarias y los canales de notificación.Activa las actualizaciones automáticas de imágenes con Watchtower o programa un
docker compose pull && docker compose up -dsemanal vía cron para incorporar parches de seguridad sin interrupciones prolongadas.
Configurar las alertas: webhook Prometheus a OneUptime
OneUptime expone un endpoint webhook entrante para cada monitor o integración creada. En la interfaz, ve a *Integrations → Incoming Webhooks* y crea una nueva integración de tipo Prometheus Alertmanager. La interfaz genera una URL con la forma https://tu-dominio/api/v1/incoming-request/<uuid>. En la configuración de Alertmanager de Prometheus, añade un receptor de tipo webhook apuntando a esa URL. El campo send_resolved: true permite a OneUptime cerrar automáticamente una incidencia cuando Alertmanager envía la notificación de resolución. Para integración desde Grafana, usa el tipo de contacto *Webhook* e introduce la misma URL. OneUptime analiza el JSON entrante y extrae automáticamente el título, la severidad y las etiquetas de la alerta de Prometheus. Si envías alertas desde una herramienta personalizada, el formato esperado está documentado en la página de integración: un campo title y un campo description son suficientes para crear una incidencia.
Gestionar guardias y escalados
Los planificadores de guardia (On-Call Schedules) en OneUptime definen quién está disponible, a qué hora y para qué servicio. Un planning se asocia a una o varias capas: cada capa representa una rotación de equipo. La rotación puede ser diaria, semanal o sobre un periodo personalizado. Cada miembro del equipo puede establecer sus preferencias de notificación en su perfil: correo inmediato, SMS tras dos minutos, llamada de voz si la incidencia no es reconocida tras cinco minutos. Los escalados se configuran en las Alert Policies: si la persona de guardia en el nivel 1 no responde en la ventana configurada, la alerta sube automáticamente al nivel 2, que puede ser otra persona, un equipo diferente o un canal Slack compartido. Esta cadena de escalado es visible en el historial de cada incidencia, lo que facilita las revisiones post-mortem.
Exponer la página de estado detrás de nginx
OneUptime genera una página de estado pública accesible en un subdominio dedicado, por ejemplo status.tu-dominio.com. Para exponerla limpiamente detrás de nginx como proxy inverso, crea un vhost que redirija las peticiones al puerto interno 3105 usado por el contenedor de la página de estado: proxy_pass http://127.0.0.1:3105;. Activa el header X-Forwarded-Proto para que OneUptime genere enlaces HTTPS correctos en las notificaciones. El certificado TLS se puede obtener con Certbot y el plugin nginx: certbot --nginx -d status.tu-dominio.com. La página de estado permite a clientes y usuarios seguir el estado de los servicios en tiempo real sin acceder a la interfaz de administración.
Solución de problemas — errores comunes al arrancar
El problema más frecuente en el primer arranque es un contenedor PostgreSQL que no responde antes de que el contenedor de aplicación intente conectarse. OneUptime incluye directivas healthcheck en su docker-compose.yml oficial; si usas una versión modificada, asegúrate de que el servicio app tiene una entrada depends_on con condición service_healthy sobre el servicio postgres. Un segundo problema común afecta a las variables SMTP: si los correos de verificación de cuenta no se envían, verifica que SMTP_PORT sea 587 (STARTTLS) y no 465 (SSL directo) si tu proveedor SMTP lo requiere. Para diagnosticar errores silenciosos, observa los logs del worker en tiempo real con docker compose logs -f oneuptime-worker. Por último, si el puerto 443 ya está ocupado por otro servicio, OneUptime arrancará pero no será accesible: modifica el mapeo de puerto en docker-compose.yml o detén el servicio que compite antes de lanzar la pila.
Planificar la migración de Opsgenie a OneUptime antes de abril 2027
Opsgenie permite exportar políticas de alerta, planificadores de guardia e historial de incidencias en formato JSON o CSV desde *Settings → Export*. Estas exportaciones contienen reglas de enrutamiento, miembros de equipo e integraciones activas. La importación en OneUptime no es automática: hay que recrear las políticas manualmente o mediante la API REST de OneUptime usando los datos exportados. Empezar por las integraciones críticas (Prometheus, Grafana, Datadog) y avanzar luego hacia los planificadores de guardia y finalmente las notificaciones secundarias es el enfoque recomendado. Planifica un periodo de funcionamiento en paralelo de al menos dos semanas: ambos sistemas reciben las mismas alertas mientras los equipos validan las nuevas políticas. La fecha límite del 5 de abril de 2027 deja tiempo suficiente para una migración cuidadosa si se inicia antes de enero de 2027. Esperar hasta las últimas semanas expone a los equipos a un corte forzado sin posibilidad de vuelta atrás si falta alguna integración.