Die ControlUp Scoutbees API - Integration in die CI/CD-Pipeline

Skript-Aktionen

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 zur Integration von Scoutbees in den DevOps-Prozess 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:

Sie können Ihre Scouts auch jederzeit über die Konsole deaktivieren/aktivieren

Wie cool wäre es, wenn Sie diese Aufgabe in Ihre CI/CD-Pipelines integrieren könnten. Das bedeutet, dass Sie die Überwachung und Alarmierung stoppen würden, wenn Sie ein Upgrade starten, und die Tests und die Alarmierung direkt danach wieder aufnehmen würden. Genau das hat mich ein Kunde gefragt, und ich habe ein einfaches PowerShell-Skript zur Verfügung gestellt, das dies ermöglicht.

Schritt 1: Erstellen eines API-Schlüssels

Der erste Schritt im Umgang mit APIs ist die Authentifizierung. Von der Konsole aus können Sie API-Schlüssel erstellen, die in Ihren Skripten verwendet werden. Dies ist über dieses Menü möglich:

Dort müssen Sie nur auf "API-Schlüssel erstellen" klicken und ihm einen Namen geben:

Sobald der API-Schlüssel erstellt ist, können Sie ihn kopieren und speichern sicher da es sich um ein Geheimnis handelt, das den Zugang zu Ihrem Scoutbees-Mieter in Ihrem Namen ermöglicht. Sie würden Ihr Passwort nicht auf ein Blatt Papier schreiben, also tun Sie es auch nicht mit Ihren API-Schlüsseln

Schritt 2: Erstellen eines Skripts

Die Bienenwabe ist die API für Scoutbees. Die Dokumentation ist verfügbar unter https://scoutbees.io/honeycomb/v1

  • Die Parameter des Skripts
[CmdletBinding()]
    Param(
        [Parameter(
            Position=0,
            Obligatorisch=$true
        )]
        [string] $ScoutName,
        [Parameter(
            Position=1,
            Obligatorisch=$false
        )]
        [Boolean] $Disabled=$true
    )
    • ScoutName = Der Name des Scouts in der Schnittstelle
    • Disabled = Ein Boolescher Wert, der angibt, ob der Scout deaktiviert werden muss oder nicht (Standard: $false)
  • API-Schlüsselverwaltung
   if (-Nicht (Test-Pfad ./Scoutbees.key)){
        Read-Host "API-Schlüssel für Scoutbees eingeben" -AsSecureString | ConvertFrom-SecureString | Out-File ".\Scoutbees.key"
    }
    $ScoutbeesAPIKey =Get-Content ".\Scoutbees.key" | ConvertTo-SecureString


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

Zunächst wird geprüft, ob im aktuellen Ordner eine scoutbees.key-Datei vorhanden ist. Wenn nicht, wird der API-Schlüssel angefordert und in der Datei gespeichert.

  • Erstellen Sie die http-Header
$Headers = @{
        "x-scoutbees-key"=$ScoutbeesAPIKey
        "Content-Type"="application/json"
    }
    • x-scoutbees-key = Ihr API-Schlüssel
    • Content-Type = Auf json eingestellt
  • Verbinden Sie sich mit dem richtigen API-Server (US oder EU)
$ScoutbeesAPIServer = "https://api.scoutbees.io/honeycomb/v1/", "https://api.eu.scoutbees.io/honeycomb/v1/"


    $ScoutbeesCorrectAPIServer = ""
    $Scouts = @()
    foreach($ScoutbeesAPIServer in $ScoutbeesAPIServer){
        try {
            $URL = $ScoutbeesAPIServer + "scouts?disabled=1"
            Write-Output "Versuch einer Verbindung zu $URL mit dem angegebenen API-Schlüssel"
            $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 "Nicht autorisiert auf $URL"
        }
    }
    if ("" -eq $ScoutbeesCorrectAPIServer){
        throw "Fehler - Kann keine Verbindung zu einem API-Endpunkt mit dem angegebenen API-Schlüssel herstellen"
    }
    write-output "Wir haben den richtigen API-Server gefunden und $($Scouts.count) scouts"

Wir versuchen, eine Verbindung zu beiden verfügbaren API-Servern (in den USA und in der EU) herzustellen und zu erkennen, ob unsere API auf einem von ihnen funktioniert.

  • Filter zum richtigen Scout (nach dem Namen)
   write-output "Suche nach Scout $ScoutName"
    $TargetScout = $Scouts | Where-Object {$_.scoutName -eq $ScoutName}


    if ($TargetScout.count -ne 1){
        throw "Kann den Scout nicht bestimmen, mit dem gearbeitet werden soll"
    }

Suche nach dem richtigen Scout mit Hilfe des Parameters ScoutName.

  • Aktivieren/Deaktivieren des Scouts
$URLScout = $ScoutbeesCorrectAPIServer + "scouts/$($TargetScout.scoutId)/disabled"
    Schreib-Ausgabe $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"
    }
    catch{
        Write-Error "Beim Versuch, den angeforderten Vorgang auszuführen, ist ein Fehler aufgetreten"
        throw $_
    }

In diesem Artikel habe ich Ihnen einige Einblicke gegeben, wie unsere Kunden Scoutbees programmatisch in ihre CI/CD-Pipeline integrieren. Wenn Sie noch Fragen haben, sich melden damit wir Ihnen zeigen können, wie die synthetischen Transaktionsprüfungen von ControlUp Scoutbees Sie proaktiv warnen, wenn die Verfügbarkeit Ihrer Anwendungen, Desktops und Netzwerkressourcen beeinträchtigt wird.