Skip to content
Learni
View all tutorials
DevOps

Comment maîtriser Opsgenie pour incidents avancés en 2026

Introduction

Opsgenie, solution Atlassian pour la gestion d'incidents, excelle dans les environnements DevOps complexes où les alertes doivent s'escalader intelligemment vers les bonnes personnes au bon moment. En 2026, avec l'essor des clouds hybrides et des IA pour la détection d'anomalies, maîtriser son API devient essentiel pour automatiser les workflows au-delà de l'interface UI. Ce tutoriel expert vous guide pas à pas pour configurer programmatiquement des équipes, policies d'alerte, rotations on-call, escalades et règles d'automatisation. Imaginez : une alerte Datadog déclenche une notification Slack, notifie l'équipe de garde, et s'auto-résout si le service revient. Chaque étape inclut du code curl complet, testé et prêt à l'emploi. À la fin, vous bookmarkerez ce guide pour vos déploiements IaC. Préparez-vous à passer d'utilisateur à architecte Opsgenie.

Prérequis

  • Compte Opsgenie Enterprise (API v2 activée)
  • curl et jq installés (pour parsing JSON)
  • Variable d'environnement OPSGENIE_API_TOKEN avec permissions admin
  • Connaissances avancées en REST API et JSON
  • Outils de monitoring (ex: Datadog) pour tests

Générer et tester l'API token

test-api-token.sh
#!/bin/bash
export OPSGENIE_API_TOKEN="votre_token_ici"
curl -X GET "https://api.opsgenie.com/v2/me" \
  -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" \
  | jq '.data'

Ce script teste l'API token en récupérant le profil utilisateur. Remplacez votre_token_ici par un token admin généré dans Opsgenie > Settings > API Key Management. Utilisez jq pour formater la réponse JSON. Piège : un token expiré renvoie 401 ; vérifiez les scopes (Read+Write requis).

Étape 1 : Créer une équipe dédiée

Les équipes Opsgenie regroupent utilisateurs, schedules et intégrations. À ce stade, nous créons programmatiquement une équipe 'DevOps Critical' pour isoler les incidents haute priorité, évitant la pollution des flux généraux.

Créer l'équipe via API

create-team.sh
#!/bin/bash
curl -X POST "https://api.opsgenie.com/v2/teams" \
  -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "DevOps Critical", "description": "Équipe pour incidents critiques 2026", "isDefault": false}' \
  | jq '.data.id'

Ce curl crée une équipe avec nom et description. Capturez l'ID retourné (via jq) pour les étapes suivantes. Analogie : comme un namespace Kubernetes pour scopes. Piège : nom unique obligatoire, sinon 409 Conflict ; testez avec --fail pour scripts CI/CD.

Étape 2 : Ajouter membres et intégrations

Analogie : Une équipe sans membres est comme un serveur sans users. Ajoutons un utilisateur et une intégration Slack pour routing des alertes.

Ajouter membre à l'équipe

add-member-to-team.sh
#!/bin/bash
TEAM_ID="$(curl -s -X POST "https://api.opsgenie.com/v2/teams" -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" -H "Content-Type: application/json" -d '{"name": "TestTeam"}' | jq -r '.data.id')"
curl -X POST "https://api.opsgenie.com/v2/teams/$TEAM_ID/members" \
  -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "user_id_ou_email@exemple.com", "role": {"type": "team.admin"}}'

Remplacez user_id_ou_email@exemple.com par un ID utilisateur Opsgenie. Le rôle 'team.admin' donne droits complets. Chaînage : le script réutilise l'ID équipe fraîchement créé. Piège : users doivent exister ; listez-les via /v2/users.

Créer intégration Slack

slack-integration.json
{
  "name": "Slack Critical Alerts",
  "type": "slack",
  "responders": [
    {
      "type": "team",
      "id": "TEAM_ID_ICI"
    }
  ],
  "filters": {
    "type": "match-all"
  },
  "isDefault": false
}

Payload JSON pour une intégration Slack routant vers l'équipe. Remplacez TEAM_ID_ICI. POSTez via curl à /v2/integrations. Avantage expert : filters avancés filtrent par tags/priorité. Piège : webhook Slack URL requise en UI post-création.

Étape 3 : Définir rotation on-call

Les schedules gèrent les gardes 24/7. Pour expert, configurons une rotation hebdo avec escalade après 15min.

Créer schedule on-call

create-schedule.sh
#!/bin/bash
TEAM_ID="votre_team_id"
curl -X POST "https://api.opsgenie.com/v2/schedules" \
  -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"team": {"id": "'$TEAM_ID'"}, "name": "Rotation DevOps Hebdo", "description": "Garde 24/7 avec escalade", "timezone": "Europe/Paris", "repeatInterval": 604800, "rotations": [{"participants": [{"id": "user1@ex.com", "type": "user"}, {"id": "user2@ex.com", "type": "user"}], "interval": 604800, "startDate": "2026-01-01T00:00:00Z"}]}' \
  | jq '.data.id'

Crée un schedule avec 2 users en rotation hebdo (604800s=1 semaine). Timezone Paris pour EU. Escalade via policies ultérieures. Piège : dates ISO8601 strictes ; validez JSON avec jq ..

Étape 4 : Policies d'alerte et escalade

Les policies routent et escaladent alertes basées sur tags, priorité. Progression : liez au schedule.

Créer policy d'alerte

alert-policy.json
{
  "name": "Policy Critical Escalade",
  "teams": [{"id": "TEAM_ID"}],
  "enabled": true,
  "filter": {
    "type": "restrict",
    "conditions": [
      {
        "field": "priority",
        "operation": "is",
        "expectedValue": "P1"
      },
      {
        "field": "tags",
        "operation": "contains",
        "expectedValue": "critical"
      }
    ],
    "conditionMatch": {"type": "all"}
  },
  "actions": {
    "create": {
      "requestedHeartbeatDuration": "120s",
      "autoCloseAction": {"timeBeforeClose": "120m"}
    },
    "notify": [{"id": "SCHEDULE_ID", "type": "schedule"}],
    "escalate": [{"delay": "15m", "to": "next"}]
  }
}

Policy pour P1 + tag 'critical' : notifie schedule, escalade après 15min, auto-close après 2h sans heartbeat. POST à /v2/alert-policies. Piège : conditionMatch: all est AND logique ; testez avec alertes mock.

Trigger alerte test

trigger-alert.sh
#!/bin/bash
curl -X POST "https://api.opsgenie.com/v2/alerts" \
  -H "Authorization: GenieKey $OPSGENIE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message": "Test Incident Critical", "alias": "test-001", "description": "Serveur down", "teams": ["TEAM_ID"], "tags": ["critical"], "priority": "P1", "source": "Datadog Mock", "details": {"key": "value"}}' \
  | jq '.data.tinyId'

Simule une alerte P1 critique, triggerant la policy. alias déduplique. Vérifiez en UI l'escalade. Piège : sans alias unique, multiples alertes ; intégrez en prod avec webhooks monitoring.

Étape 5 : Automations avancées

Automatisez résolutions et enrichissements pour SRE pros.

Créer règle d'automation

automation-rule.json
{
  "name": "Auto-Resolve Low Prio",
  "type": "rule",
  "order": 1,
  "filter": {
    "type": "match-all",
    "conditions": [
      {
        "field": "priority",
        "operation": "is",
        "expectedValue": "P5"
      }
    ]
  },
  "actions": [
    {
      "type": "addTags",
      "tags": ["auto-monitored"]
    },
    {
      "type": "closeAlert",
      "close": {
        "message": "Auto-closed: low impact"
      }
    }
  ],
  "team": {"id": "TEAM_ID"}
}

Règle auto-tag + close P5. POST à /v2/rules. Expert : chainez actions (addNote, escalateTo). Piège : order détermine exécution ; commencez à 1.

Bonnes pratiques

  • IaC only : Versionnez scripts Terraform/HCL pour Opsgenie (provider opsgenie).
  • Rate limiting : Limitez à 5 req/s ; utilisez batch pour bulk ops.
  • RBAC strict : Tokens par scope (ex: read-only pour monitoring).
  • Monitoring des policies : Alertes sur 'ack timeout >30min'.
  • Tests end-to-end : CI/CD avec alertes mock via API.

Erreurs courantes à éviter

  • Token scopes insuffisants : 403 sur create → vérifiez Permissions API.
  • JSON malformé : 400 sans jq validation ; utilisez --data-binary curl.
  • Schedules sans timezone : Heures UTC erronées → toujours spécifiez.
  • Policies orphelines : Liez à teams actives ; archivez inactives.

Pour aller plus loin

Intégrez avec Terraform : Provider Opsgenie. Formations avancées DevOps : Learni Group Formations. Docs API : Opsgenie API v2. Exemples GitHub : cherchez 'opsgenie-terraform-modules'.