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 über ssh angegeben wird. Der auszuführende Befehl kann entweder über den Pfad des Befehls mit optionalen Befehlsargumenten oder über ein Inline-Skript eingegeben werden. |
|---|---|
Alarmierung | Laufzeit, Exit-Code, Rückgabewert <0-n>, Zeichenfolgenwert <0-n> |
Ausführungsaufträge dürfen nur von Benutzern vom Typ „Administrator” erstellt/bearbeitet werden, da sie die Ausführung von beliebigem Code auf dem SKOOR Collector oder Server (im Falle des kollektorlokalen) ermöglichen.
Die in das Inline-Textfeld eingegebene ausführbare Datei oder der Code wird mit den Berechtigungen des Benutzers „eranger” ausgeführt. Daher können nur begrenzte Befehle ausgeführt werden, es sei denn, der Linux-Administrator (root) aktiviert zusätzliche Befehle, z. B. mit sudo.
Ausführungsdetails
Wenn Sie das Kontrollkästchen „Remote ausführen“ aktivieren, ändert sich das Dialogfeld und Sie können den SSH-Port und die Anmeldedaten eingeben, 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 das Dialogfeld und Sie können Skriptcode in ein größeres Textfeld eingeben:
Ausführungsparameter
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 empfangsbereit ist |
Benutzername | Ein vorhandenes Benutzerkonto auf dem Remote-Rechner |
Passwort | Ein korrektes Passwort für das Benutzerkonto auf dem Remote-Rechner |
Ausführen | Programm: Inline-Skript: |
Programm-Pfad | 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 mit der Shell /bin/sh ausgeführt, aber mit Hilfe von vordefinierten Include-Funktionen (siehe unten) können auch Bash-, Perl- und Python-Skripte verwendet werden (siehe unten). Ein Vorteil des Hinzufügens von Skripten innerhalb des Inline-Skripts besteht darin, dass diese in der SKOOR-Konfigurationsdatenbank gespeichert werden und kein externer Code auf Dateisystemebene verwaltet werden muss. Kommentare können mit einem Hash-Zeichen (#) eingegeben werden. |
Argument <n> | Ein oder mehrere Argumente können an den Befehl übergeben werden. Klicken Sie auf die Schaltfläche „+“, um weitere Argumente hinzuzufügen. |
Ausgabe in Datei speichern | Standardmäßig wird der hier eingegebene Dateiname unter /var/opt/run/eranger/collector/tmp auf dem SKOOR Engine Collector gespeichert und enthält die Standardausgabe und/oder Standardfehlerinhalte des Befehls. Es wird dringend empfohlen, einen eindeutigen Dateinamen zu verwenden, z. B. durch Verwendung des Tags $ID$, das durch die Job-ID ersetzt wird (z. B. my_output_$ID$.out). Wenn einfache Dateinamen verwendet werden, kann es vorkommen, 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 im Abschnitt „Werte” nicht mehr sichtbar. Der Wert steht auch nicht mehr für die Verwendung in Spezifikationen für Alarm Limit zur Verfügung. |
Exit-Code | Über die Schaltfläche „Einheit“ können Sie einen Namen für den Exit-Code der ausführbaren Datei sowie eine Einheit, einen Divisor, eine Beschreibung und eine numerische Genauigkeit angeben. |
Rückgabewerte | Durch Klicken auf die Schaltfläche „+“ können beliebig viele Rückgabewerte hinzugefügt werden. Für jeden Rückgabewert wird eine Schaltfläche „Einheit“ angezeigt, über die der Name des Rückgabewerts sowie seine Einheit, sein Divisor, seine Beschreibung und seine numerische Genauigkeit (die Anzahl der Dezimalstellen) festgelegt werden 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, über die Sie den Namen des Zeichenfolgenwerts sowie seine Einheit und Beschreibung angeben können. Verwenden Sie diese Option nur für eine begrenzte Anzahl bekannter statischer Zeichenfolgen, nicht für Zeichenfolgen, die sich sehr häufig ändern (die z. B. die Uhrzeit und das Datum enthalten). |
Über die Dropdown-Liste „Tags“ können vordefinierte Variablen in die Felder oben eingegeben werden, z. B. $NAME$ für den Namen des Auftrags.
Das Arbeitsverzeichnis für die Skriptausführung ist /var/opt/run/eranger/Kollektor, sodass die Angabe eines relativen Dateipfads wie bin/script.sh im Inline-Skript oder Programm-Pfad auf /var/opt/run/eranger/Kollektor/bin/script.sh verweist.
Ausführen von Include-Funktionen für Bash, Perl und Python
Durch Auswahl des Optionsfelds „Inline-Skript“ kann ein Skript in das große Textfeld eingegeben werden. Die Skriptsprachen Bash, Perl und Python werden unterstützt. Der Job „Ausführen“ bietet verschiedene Include-Funktionen für diese Sprachen, um die Skriptausgabe auf Rückgabewerte, Zeichenfolgenwerte und die Informationsmeldung abzubilden. Um diese Funktionen nutzen zu können, müssen sie zunächst eingefügt werden, indem Sie den Cursor auf die erste Zeile im Textfeld „Inline-Skript“ setzen und die entsprechende Include-Funktion für eine der drei Skriptsprachen aus der Dropdown-Liste „Tags“ auswählen:
Wenn Sie beispielsweise die Include-Funktion „sh/bash“ hinzufügen, wird der folgende Code zum Inline-Skript hinzugefügt:
Nun können die folgenden Funktionen innerhalb des Skripts verwendet werden, um numerische Werte und Zeichenfolgen auf Rückgabewerte, Zeichenfolgenwerte und die Informationsmeldung abzubilden:
Funktion | Beschreibung |
|---|---|
setErangerValue | Ordnet einen einzelnen numerischen Wert einem Rückgabewert zu, der durch seinen Index (1-n) identifiziert wird. |
setErangerValues | Ordnet mehrere numerische Werte mehreren Rückgabewerten zu und fügt Rückgabewerte entsprechend 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 entsprechend der Anzahl der angegebenen Eingabezeichenfolgen hinzu. |
setErangerInfoMessage | Ordnen Sie einen numerischen Wert oder eine Zeichenfolge dem Inhalt der Informationsmeldung des Auftrags zu. |
addErangerInfoMessage | Fügt einen numerischen Wert oder eine Zeichenfolge zum Inhalt der Informationsmeldung des Auftrags hinzu |
getLastErangerValue | Ruft den Wert der letzten Messung anhand des Index (1-n) ab. Wenn keine vorherige Messung verfügbar ist, gibt die Funktion 0 zurück |
getLastErangerStringValue | Ruft den Zeichenfolgenwert aus der letzten Messung anhand des Index (1-n) ab. Die Funktion gibt eine leere Zeichenfolge zurück, wenn keine vorherige Messung verfügbar ist |
outputErangerValues | Wenn Rückgabewerte, Zeichenfolgenwerte oder Inhaltsinformationen mithilfe der oben genannten Funktionen hinzugefügt werden, muss diese Funktion als letztes Element im Skript hinzugefügt werden. |
Werte und Alarm Limits ausführen
Wert / Alarm Limit | Beschreibung |
|---|---|
Laufzeit | Die Zeit, die zur Ausführung des Befehls oder Skripts benötigt wurde (außer wenn dies durch Aktivieren des Parameters „Laufzeit unterdrücken” deaktiviert wurde). |
Exit-Code | Der Exit-Code des Befehls oder Skripts |
Rückgabewert <0-n> | Ein numerischer Wert mit ganzzahliger oder Gleitkommagenauigkeit. Für alle konfigurierten Rückgabewerte können Alarm Limits definiert werden. |
Zeichenfolgenwert <0-n> | Ein Zeichenfolgenwert. Verwenden Sie diesen nur für eine begrenzte Anzahl bekannter statischer Zeichenfolgen, nicht für Zeichenfolgen, die sich sehr häufig ändern (die z. B. Uhrzeit und Datum enthalten). Alarm Limits können für alle konfigurierten Zeichenfolgenwerte definiert werden. |
Fehlercode | Generischer Job-Fehlercode (siehe Abschnitt „Job-Fehlercodes“) |
Beispiele ausführen
Beispiel 1 – Ausführen eines einzelnen Befehls mit mehreren Befehlszeilenargumenten
Mit den folgenden Parametern wird der Befehl „sudo“ ausgeführt, um ein Skript zum Neustarten des Berichtsdienstes in SKOOR Engine auszuführen:
Es müssen keine Rückgabewerte oder Zeichenfolgenwerte definiert werden, es wird nur der Exit-Code des kombinierten Befehls überprüft.
Ausgabe 1
Sollte der Befehl aus irgendeinem Grund nicht funktionieren, geben Sie einen Dateinamen in das Textfeld „Ausgabe in Datei speichern“ ein:
Die Standardausgabe und/oder Standardfehlerausgabe des Befehls werden in diese Datei umgeleitet. Sie kann im Abschnitt „Wert“ des Auftrags angezeigt werden:
Klicken Sie auf die Schaltfläche „Datei aktualisieren“, woraufhin der Dateiname zu einem Link wird:
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 – Ausführen eines Inline-Skripts mit Bash-Include-Funktionen
Inhalt des Inline-Skript-Textfelds 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 „New Value“ und „Difference“ definiert:
Durch Klicken auf die Schaltfläche „Einheit“ können die Wertdetails angegeben werden:
Ausgabe 2
Beispiel 3 – Ausführen eines Inline-Skripts mit Bash-Include-Funktionen und Verwendung der benutzerdefinierten Eigenschaften des Jobs als Skriptvariablen
Im Folgenden wird ein Skript ausgeführt, das als Variable mit Skriptargumenten angegeben ist, die aus einer benutzerdefinierten Eigenschaft übergeben werden. Das Skript lädt eine bestimmte Datei (Argument 2) von einem FTP-Server (Argument 1) herunter.
Die benutzerdefinierte Eigenschaft für die Befehlszeilenargumente muss zunächst über das Menü „Admin“ 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 auf die Schaltfläche „+“ am unteren Bildschirmrand. Der Abschnitt „Neu hinzugefügte Eigenschaften“ wird angezeigt:
Geben Sie der benutzerdefinierten Eigenschaft einen Namen und legen Sie fest, dass diese benutzerdefinierte Eigenschaft nur für Jobobjekte verfügbar sein soll:
Klicken Sie auf „Übernehmen“ und suchen Sie die neu hinzugefügte Eigenschafts-ID, indem Sie mit der Maus über den Namen fahren:
Beenden Sie das Admin-Menü, indem Sie erneut auf die Schaltfläche „Admin“ in der oberen rechten Ecke klicken. Die benutzerdefinierte Eigenschaft kann nun zu jedem Job hinzugefügt werden.
Fügen Sie sie zum Job „Ausführen“ hinzu und geben Sie die Befehlszeilenparameter für das Skript ein, auf das im Inline-Skript verwiesen wird:
In diesem Fall gibt es zwei Befehlszeilenargumente, die durch ein Leerzeichen getrennt sind.
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 einen Rückgabewert hinzu:
Das Skript gibt die FTP-Download-Geschwindigkeit in kB/s zurück, daher muss ein Divisor hinzugefügt werden, um die Umrechnung in MBit/s vorzunehmen.
Der Hauptvorteil der Verwendung benutzerdefinierter Eigenschaften zur Übermittlung von Argumenten besteht darin, dass man denselben Inline-Skript-Codeblock für viele Jobs unter Verwendung einer Jobvorlage (siehe Abschnitt „Vorlagen“) wiederverwenden kann und nur die benutzerdefinierte Eigenschaft zwischen den verschiedenen Jobs unterschiedlich ist.
Ausgabe 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. Dabei wird davon ausgegangen, dass die ssh-Authentifizierung bereits mit passwortlosen öffentlichen Schlüsseln konfiguriert ist, sodass bei der Verbindung mit dem Remote-ssh-Server kein Passwort abgefragt wird.
Der Befehl liest die Anzahl der remote ausgeführten ddclient-Prozesse. Dabei 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
Fügen Sie 1 Rückgabewert hinzu:
Ausgabe 4
Beispiel 5 – Befehl remote über ssh ausführen
Im folgenden Beispiel wird das Kontrollkästchen „Remote ausführen“ verwendet, um die Anmeldedaten für die ssh-Authentifizierung einzugeben und einen Befehl auf einem Remote-Computer auszuführen:
Bei der Remote-Ausführung können keine Rückgabewerte oder Zeichenfolgenwerte verwendet werden, es wird nur der Exit-Code überprüft.
Ausgabe 5
Beispiel 6 – Ausführen einer WMI-Abfrage auf einem Windows 2000-Server und Lesen seines 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:
Ausgabe 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 läuft:
(sleep 45; kill -9 -$$) & wget -O /dev/null http://www.debian.org/netinst.iso


























