Ausführen

Funktion

Führen Sie einen Befehl oder ein Inline-Shell-Skript (bash, perl, python) auf dem für den Job konfigurierten Kollektor oder auf einem Remote-Host aus, der durch die IP-Adresse des Geräts per ssh angegeben wird. Der auszuführende Befehl kann entweder über den Pfad des Befehls mit optionalen Befehlsargumenten oder über ein Inline-Skript eingegeben werden.

Alarmierend

Laufzeit, Exit-Code, Rückgabewert <0-n>, String-Wert <0-n>

Ausführungsjobs dürfen nur von Benutzern vom Typ Administrator erstellt/bearbeitet werden, da sie das Ausführen von beliebigem Code auf dem Kollektor oder Server (im Fall des Kollektor ) erlauben.
Die in das Inline-Textfeld eingegebene ausführbare Datei oder der Code wird mit den Berechtigungen des eranger -Benutzers ausgeführt. Daher können nur eingeschränkte Befehle ausgeführt werden, es sei denn, der Linux-Administrator (root) aktiviert zusätzliche Befehle, zB mit sudo .

Detail ausführen

Wenn Sie das Kontrollkästchen Remote ausführen aktivieren, ändert sich das Dialogfeld und ermöglicht die Eingabe des SSH-Ports und der Anmeldeinformationen, um den Befehl oder das Skript remote auszuführen:

Remote ausgeführte Jobs können keine Alarmdateien an den Server senden. Die Dateien können nur auf dem Kollektor verarbeitet werden, nicht auf Remote-Systemen

Wenn Sie das Optionsfeld Inline-Skript auswählen, ändert sich der Dialog und ermöglicht die Eingabe von Skriptcode in einem größeren Textfeld:

Parameter ausführen

Parameter

Beschreibung

Remote ausführen

Aktivieren Sie dieses Kontrollkästchen, um den Befehl oder das Skript über ssh auszuführen

SSH-Port

Der TCP-Port, auf dem der ssh- Server lauscht

Nutzername

Ein vorhandenes Benutzerkonto auf dem Remotecomputer

Passwort

Ein korrektes Kennwort für das Benutzerkonto auf dem Remotecomputer

Ausführen

Programm:
Führen Sie eine einzelne ausführbare Datei aus

Inline-Skript:
Führen Sie ein ganzes Skript (eine Folge von Befehlen) aus, um die Ausgabe des Skripts mit den einzelnen Rückgabewerten, Zeichenfolgenwerten und der Infonachricht zu füttern

Programmpfad

Der absolute Pfad zum auszuführenden Befehl (Skript oder Binärdatei).

Inline-Skript

Ein Textfeld, in das Befehle und ganze Skripte eingegeben werden können. Inline-Skripte werden standardmäßig unter Verwendung der /bin/sh-Shell ausgeführt, aber unter Verwendung bereits vorhandener Include-Funktionen (siehe unten) können Bash-, Perl- und Python-Skripte verwendet werden (siehe unten). Ein Vorteil des Hinzufügens von Skripten innerhalb des Inline-Skripts besteht darin, dass sie in der SKOOR-Konfigurationsdatenbank gespeichert werden und kein externer Code auf Dateisystemebene verwaltet werden muss.

Kommentare können mit einem Rautezeichen (#) eingegeben werden.

Streit

Dem Befehl können ein oder mehrere Argumente übergeben werden. Klicken Sie auf die Schaltfläche +, um zusätzliche Argumente hinzuzufügen.

Ausgabe in Datei speichern

Standardmäßig wird der hier eingegebene Dateiname unter /var/opt/run/eranger/ Kollektor /tmp auf dem SKOOR Engine Kollektor und enthält die Standardausgabe und/oder den Standardfehlerinhalt des Befehls. Es wird dringend empfohlen, einen eindeutigen Dateinamen zu verwenden, beispielsweise durch Verwendung des $ID$-Tags, das durch die Job-ID ersetzt wird (z. B. my_output_$ID$.out). Wenn einfache Dateinamen verwendet werden, kann es passieren, dass mehrere Jobs in dieselbe Datei schreiben

Laufzeit unterdrücken

Wenn dieses Kontrollkästchen aktiviert ist, wird die Laufzeit jeder Prüfung ignoriert und nicht in der Datenbank gespeichert und ihr Wert ist nicht mehr im Wertebereich sichtbar. Sein Wert steht auch nicht mehr zur Verwendung in Alarm Limit zur Verfügung.

Exit-Code

Die Schaltfläche Einheit ermöglicht die Angabe eines Namens für den Exit-Code der ausführbaren Datei sowie einer Einheit, eines Teilers, einer Beschreibung und einer numerischen Genauigkeit.

Rückgabewerte

Ermöglicht das Hinzufügen einer beliebigen Anzahl von Rückgabewerten durch Klicken auf die Schaltfläche + . Für jeden der Rückgabewerte erscheint eine Einheit- Schaltfläche, mit der Sie den Namen des Rückgabewerts sowie seine Einheit, seinen Divisor, seine Beschreibung und seine numerische Genauigkeit (die Anzahl der Dezimalstellen) angeben können. Wenn keine Rückgabewerte definiert sind, wird nur der Exit-Code gelesen.

Zeichenfolgenwerte

Ermöglicht das Hinzufügen einer beliebigen Anzahl von Zeichenfolgenwerten durch Klicken auf die Schaltfläche + . Für jeden der Zeichenfolgenwerte wird eine Schaltfläche „ Einheit “ angezeigt, mit der der Name der Zeichenfolgenwerte sowie seine Einheit und Beschreibung angegeben werden können. Nur für eine begrenzte Menge bekannter statischer Zeichenketten verwenden, nicht für Zeichenketten, die sich sehr oft ändern (die zB Uhrzeit und Datum enthalten).

Die Dropdown-Liste Tags ermöglicht die Eingabe vordefinierter Variablen in die obigen Felder, z. B. $NAME$ für den Namen des Jobs.

Das Arbeitsverzeichnis der Skriptausführung ist /var/opt/run/eranger/ Kollektor , daher wird die Angabe eines relativen Dateipfads wie bin/script.sh innerhalb des Inline-Skripts oder des Programmpfads auf /var/opt/run/ Kollektor / Kollektor verweisen /bin/script.sh .

Führen Sie Include-Funktionen für Bash, Perl und Python aus

Wenn Sie das Optionsfeld Inline-Skript auswählen, können Sie ein Skript in das große Textfeld eingeben. Die Skriptsprachen Bash, Perl und Python werden unterstützt. Der Execute-Job bietet für diese Sprachen verschiedene Include-Funktionen, um die Skriptausgabe auf Rückgabewerte, Stringwerte und die Info-Meldung abzubilden. Um diese Funktionen nutzen zu können, müssen sie zunächst eingebunden werden, indem Sie mit dem Cursor auf die erste Zeile im Textfeld Inline-Skript zeigen und die entsprechende Include-Funktion für eine der 3 Skriptsprachen aus der Dropdown-Liste Tags auswählen:

Wenn Sie beispielsweise das Funktionselement sh/bash include hinzufügen, wird dem Inline-Skript der folgende Code hinzugefügt:

Jetzt können die folgenden Funktionen innerhalb des Skripts verwendet werden, um numerische Werte und Zeichenfolgen auf Rückgabewerte, Zeichenfolgenwerte und die Infonachricht abzubilden:

Funktion

Beschreibung

setErangerValue

Ordnen Sie einen einzelnen numerischen Wert einem Rückgabewert zu, der durch seinen Index (1-n) identifiziert wird.

setErangerValues

Ordnen Sie mehrere numerische Werte mehreren Rückgabewerten zu und fügen Sie Rückgabewerte gemäß der Anzahl der angegebenen Eingabewerte hinzu

setErangerStringValue

Ordnen Sie eine einzelne Zeichenfolge einem Zeichenfolgenwert zu, der durch seinen Index (1-n) identifiziert wird.

setErangerStringValues

Ordnen Sie mehrere Zeichenfolgen Zeichenfolgenwerten zu und fügen Sie Zeichenfolgenwerte gemäß der Anzahl der angegebenen Eingabezeichenfolgen hinzu

setErangerInfoMessage

Ordnen Sie dem Inhalt der Infonachricht des Jobs einen numerischen Wert oder eine Zeichenfolge zu

addErangerInfoMessage

Fügen Sie dem Inhalt der Infonachricht des Jobs einen numerischen Wert oder eine Zeichenfolge hinzu

getLastErangerValue

Holen Sie sich den Wert der letzten Messung nach Index (1-n). Wenn keine vorherige Messung verfügbar ist, gibt die Funktion 0 zurück

getLastErangerStringValue

Abrufen des Zeichenfolgenwerts aus der letzten Messung nach Index (1-n). Die Funktion gibt einen leeren String zurück, wenn jetzt die vorherige Messung verfügbar ist

outputErangerValues

Wenn mit den obigen Funktionen Rückgabewerte, Zeichenfolgenwerte oder Infonachrichteninhalte hinzugefügt werden, muss diese Funktion als letztes Element im Skript hinzugefügt werden

Werte und Alarmgrenzen ausführen

Wert / Alarm Limit

Beschreibung

Laufzeit

Die Zeit, die zum Ausführen des Befehls oder Skripts benötigt wurde (außer wenn dies durch Aktivieren des Parameters Laufzeit unterdrücken deaktiviert wurde)

Exit-Code

Der Beendigungscode des Befehls oder Skripts

Rückgabewert <0-n>

Ein numerischer Wert mit ganzzahliger oder Gleitkommagenauigkeit. Für alle konfigurierten Rückgabewerte können Alarmgrenzen definiert werden.

Zeichenfolgenwert <0-n>

Ein Zeichenfolgenwert. Nur für eine begrenzte Menge bekannter statischer Zeichenketten verwenden, nicht für Zeichenketten, die sich sehr oft ändern (die zB Uhrzeit und Datum enthalten). Alarmgrenzen können für alle konfigurierten Zeichenfolgenwerte definiert werden.

Fehlercode

Allgemeiner Job-Fehlercode (siehe Abschnitt Job-Fehlercodes )

Beispiele ausführen

Beispiel 1 – Führen Sie einen einzelnen Befehl mit mehreren Befehlszeilenargumenten aus

Die folgenden Parameter führen den sudo-Befehl aus, um ein Skript auszuführen, um den Berichtsdienst in SKOOR Engine neu zu starten:

Es müssen keine Rückgabe- oder String-Werte definiert werden, es wird nur der Exit-Code des kombinierten Befehls überprüft.

Ausgang 1

Sollte der Befehl aus irgendeinem Grund nicht funktionieren, geben Sie einen Dateinamen in das Textfeld Save output to file parameter ein:

Die Standardausgabe und/oder der Standardfehler des Befehls werden in diese Datei umgeleitet. Es kann im Wertbereich des Jobs angezeigt werden:

Klicken Sie auf die Schaltfläche Datei aktualisieren, der Dateiname wird zu einem Link:

Klicken Sie auf den Link, um die Befehlsausgabe in einem separaten Browser-Tab oder -Fenster anzuzeigen:

Running /opt/eranger/bin/eRanger.sh with root privileges...
eRanger Server installation...
waiting up to 15 seconds for 7090 to terminate 

Stopping eranger-report[  OK  ]
Starting eranger-report[  OK  ]

Beispiel 2 – Führen Sie ein Inline-Skript mit Bash-Include-Funktionen aus

Inhalt des Inline-Script -Textfeldes für eine einfache Berechnung einer Zufallszahl:

. /opt/eranger/collector/eranger_exec_values.sh

newValue=$RANDOM
lastValue=$(getLastErangerValue 1)

diffValue=$(expr $newValue - $lastValue)

setErangerValues $newValue $diffValue
outputErangerValues

Zwei Rückgabewerte müssen wie im Inline-Skript konfiguriert definiert werden. Im folgenden Beispiel wurden Neuer Wert und Differenz definiert:

Durch Klicken auf die Schaltfläche Einheit können die Wertdetails angegeben werden:

Ausgang 2

Beispiel 3 – Führen Sie ein Inline-Skript mit Bash-Include-Funktionen aus und verwenden Sie die benutzerdefinierten Eigenschaften des Jobs als Skriptvariablen

Im Folgenden wird ein Skript ausgeführt, das als Variable mit Skriptargumenten angegeben ist, die von einer benutzerdefinierten Eigenschaft übergeben werden. Das Skript lädt eine angegebene Datei (Argument 2) von einem FTP- Server (Argument 1) herunter.

Die benutzerdefinierte Eigenschaft für die Befehlszeilenargumente muss zuerst über das Admin -Menü definiert werden. Klicken Sie auf die Schaltfläche „ Admin “ in der oberen rechten Ecke der Konfigurationsansicht und wählen Sie dann „ Benutzerdefinierte Eigenschaften “ aus der Dropdown-Liste „ Suchen “ aus:


Klicken Sie unten auf dem Bildschirm auf die Schaltfläche +. Ein Abschnitt mit neu hinzugefügten Eigenschaften wird angezeigt:

Geben Sie der benutzerdefinierten Eigenschaft einen Namen und geben Sie dann an, dass diese benutzerdefinierte Eigenschaft nur für Auftragsobjekte verfügbar sein soll:

Klicken Sie auf Übernehmen und suchen Sie dann die neu hinzugefügte Eigenschafts-ID, indem Sie mit der Maus über ihren Namen fahren:

Verlassen Sie das Admin -Menü, indem Sie erneut auf die Schaltfläche Admin in der oberen rechten Ecke klicken. Die benutzerdefinierte Eigenschaft kann jetzt jedem Job hinzugefügt werden.

Fügen Sie es dem Execute-Job hinzu und füllen Sie die Befehlszeilenparameter für das Skript aus, auf das im Inline-Skript verwiesen wird:

In diesem Fall gibt es 2 Kommandozeilenargumente, getrennt durch ein Leerzeichen.

Fügen Sie nun den Inhalt des Textfelds Inline-Skript hinzu:

. /opt/eranger/collector/eranger_exec_values.sh

SCRIPT="/var/opt/run/eranger/bin/ftp_download_local.sh"

PARAMS="$OID_74$"

VALUE=$(${SCRIPT} ${PARAMS})
setErangerValue 1 $VALUE
outputErangerValues

Fügen Sie dann 1 Rückgabewert hinzu:

Das Skript gibt die FTP-Download-Geschwindigkeit in kB/s zurück, daher muss ein Divisor hinzugefügt werden, um in MBit/s umzuwandeln.

Der Hauptvorteil der Verwendung von benutzerdefinierten Eigenschaften zum Einspeisen von Argumenten besteht darin, dass man denselben Inline-Skriptcodeblock für viele Jobs mit einer Jobvorlage wiederverwenden kann (siehe Abschnitt Vorlagen ) und nur die benutzerdefinierte Eigenschaft zwischen den verschiedenen Jobs unterscheiden kann.

Ausgang 3

Beispiel 4 – Ausführen eines Inline-Skripts mit Bash-Include-Funktionen und Verwendung eines Remote-SSH-Aufrufs

Das folgende Inline-Skript führt einen Befehl remote mit dem Befehl ssh aus. Die Annahme ist, dass die ssh-Authentifizierung bereits mit passwortlosen öffentlichen Schlüsseln konfiguriert ist, sodass beim Verbinden mit dem entfernten ssh- Server kein Passwort abgefragt wird.

Der Befehl liest die Anzahl der remote laufenden ddclient- Prozesse. Es wird die interne Variable $DEVICE_ADDRESS$ verwendet.

. /opt/eranger/collector/eranger_exec_values.sh

cmd="ps -u root | grep 'ddclient - ' | wc -l"
num_procs=$(ssh -o ConnectTimeout=15 -o ConnectionAttempts=1 eranger@$DEVICE_ADDRESS$ "$cmd")

setErangerValue 1 $num_procs
outputErangerValues

1 Rückgabewert hinzufügen:

Ausgang 4

Beispiel 5 – Befehl remote über ssh ausführen

Im folgenden Beispiel wird das Kontrollkästchen Remote ausführen verwendet, um SSH-Authentifizierungsdaten eingeben und einen Befehl auf einem Remote-Computer ausführen zu können:

Bei der Remote-Ausführung können keine Rückgabewerte oder String-Werte verwendet werden, es wird nur der Exit-Code geprüft.

Ausgang 5

Beispiel 6 – Ausführen einer WMI-Abfrage für einen Windows 2000- Server und Lesen des Ereignisprotokolls

Verwenden Sie das folgende Inline-Skript :

. /opt/eranger/collector/eranger_exec_values.sh

# this does a wmi query to windows 2000 servers
# for server 2003 upwards, use the dedicated "Agent Eventlog"
# job plugin directly.
# for the query to work, port tcp135 and the portrange tcp1025-tcp65535 
# must be accessible from this collector to the remote windows server

# BEWARE: when querying the eventlog for lots of events, especially events
# of severity 3, the query can take a very long time, sometimes hours.
# However, the maximum allowed runtime of a SKOOR execute job is merely 5
# minutes after which the job will kill this script and exit with a warning

# login credentials for wmi query (needs to be either an administrator 
# account or must have sufficient privileges to do remote wmi queries

USER=skoor
PWD=<fill in password here>

# Filter parameters (uncomment only parameters that are used)

# Logfile can be \'Application\', \'Security', 
# \'System\', or e.g. \'CustomEventLog\'
Logfile=\'Application\'

# Event source (always enclose in \'....\')
SourceName=\'FEP\'

# Event ID
#EventCode=203

# Severity (1=Error, 2=Warning, 3=Information, 
# 4=Security Audit Success, 5=Security Audit Failure)
EventType=1

# Event description (find events that contain the following string(s) 
# anywhere in the event description)
#Message='string1'
#Message='string1|string2' (for filtering multiple strings inside message field, use pipe delimiter)
Message='WSAECONNREFUSED'

# search only events which have been logged
# during the last XXX minutes (always adapt 
# to job execution interval)
Maxage=3

################################################3

Maxagesec=$((Maxage*60))
Tepoch=$(date +%s)
Tstart=$((Tepoch-Maxagesec))
# get start time in UTC
Tstart_datetime=\'$(date -u -d @$Tstart +%Y%m%d%H%M00.000000+000)\'

# construct query
Query="Select Logfile,Message,RecordNumber from Win32_NTLogEvent where Logfile=${Logfile} and TimeWritten>${Tstart_datetime}"
[ ! -z "${SourceName}" ] && Query+=" and SourceName=${SourceName}"
[ ! -z "${EventCode}" ] && Query+=" and EventCode=${EventCode}"
[ ! -z "${EventType}" ] && Query+=" and EventType=${EventType}"
echo "WMI Query is ${Query}"

wmic -U ${USER}%${PWD} //$DEVICE_ADDRESS$ "${Query}" > $DEVICE_NAME$_$ID$_eventlog.out
RC=$?

if [ ! -z "${Message}" ]; then
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | egrep ${Message} | wc -l)
else
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | wc -l)
fi

setErangerValue 1 $Eventcount
setErangerValue 2 $RC
outputErangerValues

Fügen Sie dann 2 Rückgabewerte hinzu:


Ausgang 6

Beispiel 7 - wget-Download mit automatischer Beendigung nach 45 Sekunden

Verwenden Sie die folgende Notation, um sicherzustellen, dass der externe Befehl (in diesem Fall wget) automatisch beendet wird, wenn er länger als 45 Sekunden ausgeführt wird:

(sleep 45; kill -9 -$$) &
wget -O /dev/null http://www.debian.org/netinst.iso