Regel basierend auf einem externen Ereignis erstellen

Mit einem  Ereignisobjekt können Sie Regeln mit internen und externen Ereignisbedingungen erstellen. Es ermöglicht Ihnen, basierend auf festgelegten Regeln auf Ereignisse zu reagieren, wobei diese Regeln eigens auf ein Ereignis zugeschnitten wurden.

Die Event Engine kann dazu verwendet werden, auf interne und externe Ereignisse zu reagieren. Der folgende Anwendungsfall basiert auf einem externen Ereignis, das von einer PowerShell gestartet wird.

Diese Seite beinhaltet Folgendes:

Was werde ich lernen?

  • Erstellen einer Ereignisdefinition
  • Erstellen einer Ereignisregel basierend auf einer Ereignisdefinition
  • Verwenden eines Scripts zum Starten eines Ereignisses

Voraussetzungen

  • Gute Kenntnisse in der Erstellung von AE-Objekten (Ereignisse)
  • Gutes Verständnis in Bezug auf die Erstellung von Regeln
  • Wissen darüber, wie man mit einer PowerShell umgeht

Ziel des Anwendungsfalls

  • Das Auslösen eines Beispiel-Ereignisses basierend auf einem extern ausgelösten Script.

Objekte in diesem Beispiel

Name Objekttyp
Ereignisregel Verbindung
IA-Objekt  Ausführbares VARA-Objekt 

Erstellen der Ereignisdefinition

  1. Wählen Sie auf der Seite Process Assembly die Option Objekt hinzufügen aus dem Menü. Wählen Sie im Fenster Objekt hinzufügen  das Menü VARA und dann die Variable EVENT_DEFINITION. Im folgenden Beispiel lautet der Ereignisname PS.TEST.EVENT.
  2. Öffnen Sie das Blatt "Ereignisdefinition". Definieren Sie die Attribute, beschreiben Sie sie (optional) und weisen Sie jedem von ihnen einen Typ zu.

    • Attributschlüssel: Schlüssel-Wert-Paar (zum Beispiel Anwendungsnachricht, Statusereignis, Bestätigung usw.).
    • Beschreibung: Optional
    • Typ: Sie können in Bezug auf Ihren Attributschlüssel zwischen den Optionen String, Number oder Boolean wählen.

    Im Testbeispiel wurden drei Attribute angelegt, Anzahl, Name und Status. Diese Attribute können den Regeln im Regelobjekt zugeordnet werden.

  3. Speichern Sie das Ereignis.

Das Regelobjekt erstellen

  1. Erstellen Sie ein Regelobjekt, das unter bestimmten Bedingungen durch ein externes Ereignis ausgelöst wird.

    Die Variable EVENT_DEFINITION wurde zuvor erstellt, sie enthält die Attribute und gibt die definierten Typen zurück. Diese Attribute müssen einer Regel zugeordnet sein.

    Wählen Sie Objekt hinzufügen aus dem Menü und erstellen Sie ein SIMPLE_RULE-Ereignis.

    Hinweis: Das Ereignis trägt aus Gründen der Einfachheit den Namen PS.EVENT.TRIGGER.EXAMPLE.

  2. Öffnen Sie das Regelereignisobjekt und geben Sie im Feld Ereignisdefinition den Namen der Ereignisdefinition ein (oder verwenden Sie die Kombinationsliste), um die Ereignisregel mit der zuvor erstellten Ereignisdefinition zu verbinden. Im Beispiel muss es ein Link zu PS.TEST.EVENT sein.
  3. Erstellen Sie eine Zeile, indem Sie auf die Schaltfläche Zeile hinzufügen klicken. Definieren Sie die Bedingungen für die Ereignisregel, indem Sie folgende Einstellungen vornehmen:

    • Verknüpfen Sie das Attribut in der Bedingung mit einem in der Ereignisdefinition definierten Attribut. Verwenden Sie die in der Ereignisdefinition definierte Attributanzahl und erstellen Sie ein Attribut im Regelobjekt event.count.
    • Weisen Sie einen entsprechenden Operator zu, im Beispiel ist das Ereignis größer als > etwas.
    • Bestimmen Sie schließlich einen Wert. Wenn „event.Count“ größer als (>) 3 ist, ist eine Aktion erforderlich (z. B. muss ein Script ausgeführt werden, eine Nachricht gesendet werden o. Ä.).

  4. Im Abschnitt Aktion legen Sie fest, welche Schritte eingeleitet werden sollen, wenn die Bedingung erfüllt ist. Im Feld Ausführen wählen Sie ein Ereignis aus, das ausgeführt werden soll.

  5. Wählen Sie im Regel-Ereignisobjekt in der Registerkarte Attribute einen  IA-Agenten aus, auf dem die Regel ausgeführt werden soll. Klicken Sie anschließend auf Speichern.

  6. Klicken Sie abschließend auf Ausführen, um die Regel auszuführen. Die Regel wird nun unter Ausführungen als Aktiv angezeigt.

    Im Fenster Details der Ausführung sehen Sie außerdem, dass keine Regel ausgelöst wurde und die Anzahl der Ereignisse daher auf 0 bleibt.

  7. Das folgende PowerShell-Script sendet Ereignisse an die Event Engine, um die erstellte Regel auszulösen:

    !get client specific api key
    :SET &KEY# = GET_VAR(VARA.API_KEY)
    :P &KEY#
    <#
    .SYNOPSIS
        Kann verwendet werden, um Ereignisse an die Automic Event Engine zu senden.
    BESCHREIBUNG
        Verwenden Sie dieses Cmdlet, um Ereignisse an die Automic Event Engine zu senden.
        Es nutzt das Cmdlet Invoke-RestMethod und konfiguriert alles vor.
        Erstellt den Zeitstempel für das Ereignis automatisch (aktueller UTC-Zeitstempel).
    .PARAMETER
    Uri Die URI zum Endpunkt für die Ereignisse
    .PARAMETER Token
        Der für die Authentifizierung mit der URI verwendete vordefinierte Schlüssel
    .PARAMETER Type
        Der Typ des Ereignisses muss mit der Ereignisdefinition in der AE übereinstimmen
    .PARAMETER Attributes
        Die Attribute des Ereignisses
    .PARAMETER Timestamp
        Der Zeitstempel (Ereigniszeit) des Ereignisses; wenn die aktuelle Zeit in UTC leer ist, wird der Zeitstempel in UTC umgewandelt.
    .PARAMETER DisableKeepAlive
    	Gibt an, dass das Cmdlet den KeepAlive-Wert im HTTP-Header auf False setzt. Standardmäßig ist Keepalive True. KeepAlive stellt eine persistente Verbindung zum Server her, um nachfolgende Anforderungen zu erleichtern.
    .PARAMETER Proxy
    	gibt an, dass das Cmdlet einen Proxy-Server für die Anforderung verwendet, anstatt eine direkte Verbindung zur Internet Ressource herzustellen. Geben Sie die URI eines Netzwerk-Proxy-Servers ein.
    .PARAMETER ProxyCredential
    	gibt ein Benutzerkonto an, das über die Berechtigung verfügt, den Proxy-Server zu verwenden, der durch den Proxy-Parameter angegeben wird. Der Standardwert ist der aktuelle Benutzer.
    	Geben Sie einen Benutzernamen ein, z. B. "User01" oder "Domain01\User01", oder geben Sie ein PSCredential-Objekt ein, z. B. eines, das vom Cmdlet Get-Credential generiert wird.
    	Dieser Parameter ist nur gültig, wenn der Proxy-Parameter auch im Befehl verwendet wird. Sie können die Parameter ProxyCredential und ProxyUseDefaultCredentials nicht im gleichen Befehl verwenden.
    .PARAMETER ProxyUseDefaultCredentials
    	gibt an, dass das Cmdlet die Anmeldeinformationen des aktuellen Benutzers verwendet, um auf den Proxy-Server zuzugreifen, der durch den Proxy-Parameter angegeben wird.
    	Dieser Parameter ist nur gültig, wenn der Proxy-Parameter auch im Befehl verwendet wird. Sie können die Parameter ProxyCredential und ProxyUseDefaultCredentials nicht im selben Befehl verwenden.
    .EXAMPLE
        $data = @{
            Name="Tobi"
            Status="New"
            Count=3
        }
        C:\PS>send-event "http://path_to_ia/" "your-pre-shared-key" "IA.TEST" $data
        This will send the $data to the Event "IA.TEST" ($data is converted to json)
    
    .NOTES
        Author: Tobias Stanzel
        Date:   June 17, 2017
    #>
    function Send-Event {
        [CmdletBinding()]
        param (
            [parameter(Mandatory=$true,Position=0)]
            [Uri]$Uri,
    
            [parameter(Mandatory=$true,Position=1)]
            [string]$Token,
    
            [parameter(Mandatory=$true,Position=2)]
            [alias("t")]
            [string]$Type,
    
            [parameter(Mandatory=$true,Position=3)]
            [alias("a")]
            [hashtable]$Attributes,
    
            [parameter(Mandatory=$false)]
            [DateTime]$Timestamp,
    
            #Invoke-RestMethod Options
            [parameter(Mandatory=$false)]
            [Int32]$TimeoutSec,
    
            [parameter(Mandatory=$false)]
            [switch]$DisableKeepAlive,
    
            [parameter(Mandatory=$false)]
            [Uri]$Proxy,
    
            [parameter(Mandatory=$false)]
            [PSCredential]$ProxyCredential,
    
            [parameter(Mandatory=$false)]
            [switch]$ProxyUseDefaultCredentials
        )
        PROCESS {
            if(!$Timestamp){
                $Timestamp = Get-Date;
            }
            $utcString = $Timestamp.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
            Write-Verbose "Event time set to: $utcString"
    
            $Body = @{
                type = $type
                timestamp = $utcString
                values = $attributes
            }
            $BodyString = ConvertTo-Json($Body)
    
            $headers = @{ "Content-Type"="application/json";Authorization=$Token}
            $params = @{
                Method = "Post"
                Headers = $headers
                Uri = $Uri
                Body = $BodyString
            }
            if($VerbosePreference) {
                $params.Verbose = $true
            }
            if($DebugPreference) {
                $params.Debug = $true
            }
            if($DisableKeepAlive) {
                $params.DisableKeepAlive = $true
            }
            if($TimeoutSec) {
                $params.TimeoutSec = $TimeoutSec
            }
            if($Proxy) {
                $params.Proxy = $Proxy
                if($ProxyCredential) {
                    $params.ProxyCredential = $ProxyCredential
                }
                if($ProxyUseDefaultCredentials) {
                    $params.ProxyUseDefaultCredentials = $true
                }
            }
            Write-Verbose "Headers: $(ConvertTo-Json($headers))"
            Write-Verbose "Body: $BodyString"
            try {
                Invoke-RestMethod @params
                Write-Host "Event $type send successfull"
            } catch {
                # Dig into the exception to get the Response details.
                # Beachten Sie, dass value__ kein Tippfehler ist. 
                Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
                Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
                Throw $_.Exception
            }
        }
    }
    echo "Sending hardcoded event now via powershell cmdlet to Event Engine now..."
    $data = @{
      Name="Test Event"
      Status="New"
      Count=3
    }
    send-event "http://localhost:8090/analytics/api/v1/events" "&KEY#" "PS.TEST.EVENT" $data -v
    echo "Sending event again, with different count"
    $data.count = 4
    send-event "http://localhost:8090/analytics/api/v1/events" "&KEY#" "PS.TEST.EVENT" $data -v

    Zusammenfassend macht das Script Folgendes:

    • Es verwendet ein cmdlet, um Ereignisse an die Event Engine zu senden.
    • Es gibt vor, dass der Benutzer die Anfrage über einen Proxy-Server sendet, um die Sicherheit und Netzintegrität sicherzustellen.
    • Es holt API-Schlüssel von der Event Engine (nötig, um Anfragen zu senden).
    • Es sendet ein Ereignis an den API-REST-Punkt http://localhost:8090/analytics/api/v1/events

  8. Jedes Mal, wenn das Script ausgeführt wird, erhöht sich das Regelereignis, weil unser data.count auf "vier" eingestellt ist. Die Bedingung in der Ereignisdefinition gibt an, dass jeder Wert, der größer als 3 ist, ein Ereignis erstellen soll.