Opsgenie et Grafana OnCall : deux piliers qui s'effacent
Opsgenie a été racheté par Atlassian en 2018 et intégré progressivement dans la suite Jira. L'annonce de fin de vie a été publiée sur la page d'état officielle Atlassian : le service s'arrête le 5 avril 2027. Les utilisateurs disposent d'un peu plus d'un an pour migrer leurs politiques d'astreinte, leurs intégrations et leurs historiques d'incidents. Grafana OnCall OSS, le composant open source de Grafana OnCall, a quant à lui été archivé sur GitHub le 24 mars 2026. L'équipe Grafana Labs a indiqué que la version cloud reste disponible, mais le dépôt en auto-hébergement ne reçoit plus de correctifs ni de nouvelles fonctionnalités. Les équipes qui avaient basé leur infrastructure de gestion d'incidents sur cette brique se retrouvent dans une situation identique : elles doivent migrer avant que les failles de sécurité non corrigées ne deviennent un risque réel. La convergence de ces deux événements en moins de douze mois crée une fenêtre de migration que les équipes ont intérêt à planifier dès maintenant plutôt que d'attendre la pression des dernières semaines avant l'échéance d'avril 2027.
Ce qu'une solution de gestion d'incident doit couvrir
- Réception et déduplification des alertes depuis Prometheus, Grafana, Zabbix ou tout webhook HTTP
- Routage des alertes vers les bonnes équipes selon des règles configurables (sévérité, service, horaire)
- Gestion des plannings d'astreinte (on-call schedules) avec rotations hebdomadaires ou personnalisées
- Escalades automatiques si l'alerte n'est pas acquittée dans un délai défini
- Notifications multicanal : e-mail, SMS, appel vocal, Slack, Microsoft Teams, PagerDuty webhooks
- Page de statut publique pour informer les utilisateurs en temps réel
- Historique des incidents consultable et exportable pour les post-mortems
- API REST pour l'intégration dans les pipelines CI/CD et les outils d'automatisation
OneUptime vs IncidentRelay vs PagerDuty
Faites défiler le tableau
| Critère | OneUptime | IncidentRelay | PagerDuty (SaaS) |
|---|---|---|---|
| Licence | Apache 2.0 | MIT | Propriétaire |
| Hébergement | Self-hosted (Docker Compose) | Self-hosted (Docker Compose) | Cloud uniquement |
| Stack technique | Node.js / TypeScript, PostgreSQL | Go, SQLite/PostgreSQL | Non divulguée |
| RAM minimale recommandée | 4 Go (prod légère), 8 Go conseillé | 512 Mo (SQLite), 2 Go (PostgreSQL) | N/A |
| Page de statut intégrée | Oui, publique et personnalisable | Oui, basique | Oui, via Statuspage (payant séparé) |
| Prix de base | Gratuit (self-hosted) | Gratuit (self-hosted) | Payant (consulter le site officiel) |
Prérequis VPS pour OneUptime
OneUptime utilise une architecture multi-conteneurs orchestrée par Docker Compose. Pour une équipe de moins de vingt personnes avec un volume d'alertes modéré (moins de mille événements par jour), un VPS avec 4 vCPU et 8 Go de RAM constitue une base correcte. En dessous de 4 Go de RAM, plusieurs conteneurs entrent en concurrence au démarrage et provoquent des redémarrages intempestifs. Le stockage doit être sur un volume SSD : OneUptime écrit fréquemment dans PostgreSQL et dans son bus d'événements interne. Prévoir au minimum 40 Go pour les logs et la base de données sur une durée de six mois. Le serveur doit exposer les ports 80 et 443 ; un reverse proxy nginx ou Caddy peut être placé devant si le VPS héberge déjà d'autres services. Docker Engine version 24 ou supérieure et Docker Compose version 2.20 ou supérieure sont requis. Une adresse IP fixe et un nom de domaine avec enregistrement DNS A sont nécessaires pour le certificat TLS et pour que les webhooks entrants soient joignables.
Déployer OneUptime sur un VPS en 7 étapes
Connectez-vous au VPS en SSH et installez Docker Engine ainsi que Docker Compose v2 via le dépôt officiel Docker :
curl -fsSL https://get.docker.com | shpuis vérifiez avecdocker compose version.Clonez le dépôt OneUptime :
git clone https://github.com/OneUptime/oneuptime.gitpuis entrez dans le répertoirecd oneuptime.Copiez le fichier d'exemple de configuration :
cp .env.example .envpuis ouvrez-le dans un éditeur. Renseignez au minimumDOMAIN(votre domaine ou sous-domaine),DISABLE_TELEMETRY=truesi vous ne souhaitez pas envoyer de métriques d'usage, et les variables SMTP (SMTP_HOST,SMTP_PORT,SMTP_USERNAME,SMTP_PASSWORD,SMTP_FROM_EMAIL) pour les notifications e-mail.Lancez les conteneurs en arrière-plan :
docker compose up -d. Le premier démarrage télécharge les images et exécute les migrations de base de données ; comptez trois à cinq minutes selon la bande passante.Vérifiez que tous les services sont sains :
docker compose ps. Les conteneursoneuptime-app,oneuptime-worker,oneuptime-postgresetoneuptime-redisdoivent afficher l'étatrunning. En cas d'erreur sur un conteneur, consultez ses logs avecdocker compose logs <nom-du-conteneur> --tail=100.Ouvrez le navigateur sur
https://votre-domaineet créez le compte administrateur initial. Accédez ensuite à *Settings → On-Call Duty → Policies* pour créer votre première politique : définissez l'équipe concernée, les plages horaires et les canaux de notification.Activez les mises à jour automatiques des images avec Watchtower ou planifiez un
docker compose pull && docker compose up -dhebdomadaire via cron pour intégrer les correctifs de sécurité sans interruption de service prolongée.
Configurer les alertes : webhook Prometheus vers OneUptime
OneUptime expose un endpoint webhook entrant pour chaque moniteur ou intégration créée. Dans l'interface, allez dans *Integrations → Incoming Webhooks* et créez une nouvelle intégration de type Prometheus Alertmanager. L'interface génère une URL de la forme https://votre-domaine/api/v1/incoming-request/<uuid>. Dans la configuration Alertmanager de Prometheus, ajoutez un receiver de type webhook pointant vers cette URL. Le champ send_resolved: true permet à OneUptime de fermer automatiquement un incident quand Alertmanager envoie la notification de résolution. Pour une intégration depuis Grafana, utilisez le type de contact *Webhook* et renseignez la même URL. OneUptime analyse le JSON entrant et extrait automatiquement le titre, la sévérité et les labels de l'alerte Prometheus. Si vous envoyez des alertes depuis un outil personnalisé, le format attendu est documenté dans la page d'intégration : un champ title et un champ description suffisent pour créer un incident.
Gérer les astreintes et les escalades
Les plannings d'astreinte dans OneUptime (On-Call Schedules) définissent qui est disponible, à quelle heure et pour quel service. Un planning est associé à une ou plusieurs couches (layers) : chaque couche représente une rotation d'équipe. La rotation peut être quotidienne, hebdomadaire ou sur une période personnalisée. Chaque membre d'équipe peut renseigner ses préférences de notification dans son profil : e-mail immédiat, SMS après deux minutes d'attente, appel vocal si l'incident n'est pas acquitté après cinq minutes. Les escalades se configurent dans les politiques d'alerte (Alert Policies) : si la personne d'astreinte au niveau 1 ne répond pas dans le délai configuré, l'alerte remonte automatiquement au niveau 2, qui peut être une autre personne, une équipe différente ou un canal Slack partagé. Cette chaîne d'escalade est visible dans l'historique de chaque incident, ce qui facilite les revues post-mortem.
Exposer la page de statut derrière nginx
OneUptime génère une page de statut publique accessible sur un sous-domaine dédié, par exemple status.votre-domaine.com. Pour l'exposer proprement derrière nginx en proxy inverse, créez un vhost qui achemine les requêtes vers le port interne 3105 utilisé par le conteneur de status page : proxy_pass http://127.0.0.1:3105;. Activez le header X-Forwarded-Proto pour que OneUptime génère des liens HTTPS corrects dans les notifications. Le certificat TLS peut être obtenu via Certbot avec le plugin nginx : certbot --nginx -d status.votre-domaine.com. La page de statut permet aux clients et utilisateurs de suivre l'état des services en temps réel sans avoir accès à l'interface d'administration.
Dépannage — erreurs courantes au démarrage
Le problème le plus fréquent au premier démarrage est un conteneur PostgreSQL qui ne répond pas avant que le conteneur applicatif ne tente de s'y connecter. OneUptime intègre des healthcheck dans son docker-compose.yml officiel ; si vous utilisez une version modifiée, assurez-vous que le service app a bien une directive depends_on avec condition service_healthy sur le service postgres. Un second problème courant concerne les variables SMTP : si les e-mails de vérification de compte ne partent pas, vérifiez que SMTP_PORT est bien 587 (STARTTLS) et non 465 (SSL direct) si votre fournisseur SMTP l'exige. Pour diagnostiquer les erreurs silencieuses, consultez les logs du worker en temps réel avec docker compose logs -f oneuptime-worker. Enfin, si le port 443 est déjà occupé par un autre service, OneUptime démarrera mais sera inaccessible : modifiez le mapping de port dans le docker-compose.yml ou arrêtez le service concurrent avant de lancer la stack.
Planifier la migration Opsgenie vers OneUptime avant avril 2027
Opsgenie permet d'exporter les politiques d'alerte, les plannings d'astreinte et l'historique des incidents au format JSON ou CSV depuis *Settings → Export*. Ces exports contiennent les règles de routage, les membres d'équipe et les intégrations actives. L'import dans OneUptime n'est pas automatique : il faut recréer les politiques manuellement ou via l'API REST de OneUptime en s'appuyant sur les données exportées. Commencer par les intégrations critiques (Prometheus, Grafana, Datadog) puis progresser vers les plannings d'astreinte et enfin les notifications secondaires est l'approche recommandée. Prévoyez une période de double-fonctionnement d'au moins deux semaines : les deux systèmes reçoivent les mêmes alertes pendant que les équipes valident les nouvelles politiques. L'échéance du 5 avril 2027 laisse suffisamment de temps pour une migration soignée si elle est démarrée avant janvier 2027. Attendre les dernières semaines expose les équipes à un basculement contraint, sans possibilité de revenir en arrière si une intégration manque.