L'API ControlUp Scoutbees - Intégration avec le pipeline CI/CD

Actions de script

ControlUp Scoutbees is a cloud-based solution that uses continuous synthetic transaction testing to proactively alert you when the availability of your apps, desktops and network resources are impacted.

Although many customers love using Scoutbees with the current capabilities, some customers asked us to extend Scoutbees to better integrate with their DevOps process. Last year we introduced an API pour intégrer Scoutbees au processus DevOps to retrieve Scoutbees data and automate the creation of additional scouts. Now we have further integrated Scoutbees to be piloted from your CI/CD pipelines. For instance, Scoutbees provides a built-in maintenance window where we pause the monitoring of a service but some customers want a CI/CD program to programmatically stop monitoring a service while an emergency patch is being deployed outside a scheduled maintenance window and restart monitoring after the service has started.

This article is going to provide you with a solution that we provided to a customer to allow them to pilot their Scout from their continuous integration, continuous delivery (CI/CD) pipelines.

As you can see in the below screenshot, the scheduled maintenance windows are easy to create from the console:

Vous pouvez également désactiver / activer vos éclaireurs à tout moment en utilisant la console.

Ce serait vraiment génial si vous pouviez intégrer cette tâche dans vos pipelines CI/CD. Cela signifie que vous arrêteriez la surveillance et les alertes lorsque vous démarrez une mise à niveau et que vous redémarreriez les tests et les alertes immédiatement après. C'est exactement ce qu'un client m'a demandé et j'ai fourni un script PowerShell simple pour le faire.

Étape 1 : Créer une clé API

La première chose à faire lorsque vous utilisez des API est l'authentification. Depuis la console, vous pouvez créer des clés d'API à utiliser dans vos scripts. Vous pouvez y accéder à partir de ce menu :

Une fois sur place, il vous suffit de cliquer sur "Create API Key" et de lui donner un nom :

Une fois la clé API créée, vous pouvez la copier et la stocker. en toute sécurité car il s'agit d'un secret qui permet d'accéder à votre locataire Scoutbees en votre nom. Vous ne mettriez pas votre mot de passe sur un bout de papier, alors ne le faites pas avec vos clés API.

Étape 2 : Créer un script

Le nid d'abeille est l'API pour Scoutbees. La documentation est disponible à l'adresse suivante https://scoutbees.io/honeycomb/v1

  • Les paramètres du script
[CmdletBinding()]
    Param(
        [Paramètre(
            Position=0,
            Mandatory=$true
        )]
        [string] $ScoutName,
        [Paramètre(
            Position=1,
            Obligatoire=$false
        )]
        [booléen] $Disabled=$true
    )
    • Nom de l'éclaireur = Le nom de l'éclaireur dans l'interface
    • Disabled = Un booléen pour déterminer si l'éclaireur doit être désactivé ou non (par défaut : $false).
  • Gestion des clés API
   if (-Not (Test-Path ./Scoutbees.key)){
        Read-Host "Enter API Key for Scoutbees" -AsSecureString | ConvertFrom-SecureString | Out-File ".\Scoutbees.key"
    }
    $ScoutbeesAPIKey =Get-Content ".\Scoutbees.key" | ConvertTo-SecureString


    $ScoutbeesAPIKey = ([PSCredential]::new(0, $ScoutbeesAPIKey).GetNetworkCredential().Password)

Nous vérifions d'abord s'il existe un fichier scoutbees.key dans le dossier actuel et, si ce n'est pas le cas, nous demandons la clé API et l'enregistrons dans le fichier.

  • Créer les en-têtes http
$Headers = @{
        "x-scoutbees-key"=$ScoutbeesAPIKey
        "Content-Type"="application/json"
    }
    • x-scoutbees-key = Votre clé API
    • Content-Type = Défini à json
  • Se connecter au bon serveur API (US ou EU)
$ScoutbeesAPIServers = "https://api.scoutbees.io/honeycomb/v1/", "https://api.eu.scoutbees.io/honeycomb/v1/"


    $ScoutbeesCorrectAPIServer = ""
    $Scouts = @()
    foreach($ScoutbeesAPIServer in $ScoutbeesAPIServers){
        try {
            $URL = $ScoutbeesAPIServer + "scouts?disabled=1"
            Write-Output "Trying to connect with to $URL using provided API key" (Essai de connexion à $URL à l'aide de la clé API fournie)
            $Temp = invoke-WebRequest $URL -Method GET -Headers $Headers
            $Scouts = ($Temp.Content | ConvertFrom-Json).Data
            $URL = $ScoutbeesAPIServer + "scouts?disabled=0"
            $Temp = invoke-WebRequest $URL -Method GET -Headers $Headers
            $Scouts += ($Temp.Content | ConvertFrom-Json).Data
            $ScoutbeesCorrectAPIServer = $ScoutbeesAPIServer
            break
        }
        catch {
            Write-Output "Non autorisé sur $URL"
        }
    }
    if ("" -eq $ScoutbeesCorrectAPIServer){
        throw "Error - Can't connect to any API endpoint with provided API key" (Erreur - Impossible de se connecter à un point de terminaison API avec la clé API fournie)
    }
    write-output "Nous avons trouvé le bon serveur API et $($Scouts.count) scouts"

Nous essayons de nous connecter aux deux serveurs API disponibles (aux États-Unis et dans l'UE) et de déterminer si notre API fonctionne sur l'un d'entre eux.

  • Filtrer vers le bon scout (par le nom)
   write-output "A la recherche du scooter $ScoutName"
    $TargetScout = $Scouts | Where-Object {$_.scoutName -eq $ScoutName}


    if ($TargetScout.count -ne 1){
        throw "Impossible de déterminer le scout avec lequel travailler"
    }

Vérifier que le scout est le bon en utilisant le paramètre ScoutName.

  • Activer/désactiver l'éclaireur
$URLScout = $ScoutbeesCorrectAPIServer + "scouts/$($TargetScout.scoutId)/disabled"
    write-output $URL
    $Body = "
    {
        `"disabled`" : $($disabled.tostring().ToLower())
    }"
    try{
        $temp = Invoke-WebRequest $URLScout -Headers $Headers -Method POST -Body $Body -ContentType "application/json"
        Write-Output "Scout $($TargetScout.scoutName) has been set to disabled $Disabled" (L'éclaireur $($TargetScout.scoutName) a été mis hors service)
    }
    catch{
        Write-Error "Une erreur s'est produite lors de l'exécution de l'opération demandée"
        lancer $_
    }

Dans cet article, je vous ai donné un aperçu de la façon dont nos clients intègrent Scoutbees de manière programmatique dans leur pipeline CI/CD. Si vous avez des questions, tendre la main afin que nous puissions vous montrer comment ControlUp Scoutbees synthetic transaction testing vous alerte de manière proactive lorsque la disponibilité de vos applications, de vos postes de travail et de vos ressources réseau est affectée.