Eseguire

Funzione

Esegue un comando o uno script di shell inline (bash, perl, python) sul collettore configurato per il lavoro o su un host remoto specificato dall'indirizzo IP del dispositivo tramite ssh. Il comando da eseguire può essere immesso tramite il percorso del comando con argomenti di comando opzionali o tramite uno script inline.

Allarme

Tempo di esecuzione, Codice di uscita, Valore di ritorno <0-n>, Valore di stringa <0-n>.

I lavori di esecuzione possono essere creati/modificati solo da utenti di tipo Amministratore, poiché consentono di eseguire codice arbitrario sul collettore o sul server di SKOOR (nel caso del collettore-locale).
L'eseguibile o il codice inserito nella casella di testo in linea viene eseguito con i permessi dell'utente che lo ha creato. Pertanto, è possibile eseguire solo comandi limitati, a meno che l'amministratore di Linux (root) non abiliti comandi aggiuntivi utilizzando, ad esempio, sudo.

Esegui in dettaglio

Selezionando la casella di controllo Esegui in remoto, la finestra di dialogo cambia e consente di inserire la porta ssh e le credenziali per eseguire il comando o lo script in remoto:

I lavori eseguiti in remoto non possono inviare file di allarme al server. I file possono essere elaborati solo sul collettore, non sui sistemi remoti.

Selezionando il pulsante di opzione Script in linea, la finestra di dialogo cambia e consente di inserire il codice di scripting in una casella di testo più grande:

Parametri di esecuzione

Parametro

Descrizione

Esegui in remoto

Attivare questa casella di controllo per eseguire il comando o lo script tramite ssh

Porta SSH

La porta TCP su cui è in ascolto il server ssh

Nome utente

Un account utente esistente sulla macchina remota

Password

Una password corretta per l'account utente sulla macchina remota.

Eseguire

Programma:
Eseguire un singolo eseguibile

Script in linea:
Esegue un intero script (sequenza di comandi), consentendo di alimentare l'output dello script con i singoli valori di ritorno, i valori di stringa e il messaggio informativo.

Percorso del programma

Il percorso assoluto del comando (script o binario) da eseguire.

Script in linea

Una casella di testo in cui è possibile inserire comandi e interi script. Per impostazione predefinita, gli script in linea vengono eseguiti con la shell /bin/sh, ma è possibile utilizzare funzioni di inclusione preesistenti (vedere sotto), bash, perl e python (vedere sotto). Un vantaggio dell'aggiunta di script all'interno dello script Inline è che essi vengono memorizzati nel database di configurazione di SKOOR e non è necessario gestire codice esterno a livello di file system.

I commenti possono essere inseriti con un carattere hash (#).

Argomento <n

È possibile passare uno o più argomenti al comando. Fare clic sul pulsante + per aggiungere altri argomenti.

Salva l'output su file

Per impostazione predefinita, il nome del file inserito viene memorizzato in /var/opt/run/eranger/collector/tmp sul collettore SKOOR Engine e conterrà il contenuto dell'output standard e/o dell'errore standard del comando. Si raccomanda vivamente di utilizzare un nome di file univoco, ad esempio utilizzando il tag $ID$ che verrà sostituito dall'id del lavoro (ad esempio my_output_$ID$.out). Se si utilizzano nomi di file semplici, può accadere che più lavori scrivano sullo stesso file.

Sopprimere il tempo di esecuzione

Se questa casella di controllo è attivata, il tempo di esecuzione di ogni controllo viene ignorato e non salvato nel database e il suo valore non è più visibile nella sezione dei valori. Il suo valore non è più disponibile per l'uso nelle specifiche dei limiti di allarme.

Codice di uscita

Il pulsante Unità consente di specificare un nome per il codice di uscita dell'eseguibile, nonché un'unità, un divisore, una descrizione e una precisione numerica.

Valori di ritorno

Consente di aggiungere un numero qualsiasi di valori di ritorno facendo clic sul pulsante +. Per ogni valore di ritorno, appare un pulsante Unità che consente di specificare il nome del valore di ritorno, l'unità, il divisore, la descrizione e la precisione numerica (il numero di cifre decimali). Se non vengono definiti valori di ritorno, viene letto solo il codice di uscita.

Valori stringa

Consente di aggiungere un numero qualsiasi di valori stringa facendo clic sul pulsante +. Per ciascuno dei valori stringa, appare un pulsante Unità che consente di specificare il nome del valore stringa, l'unità e la descrizione. Usare solo per un insieme limitato di stringhe statiche conosciute, non per stringhe che cambiano molto spesso (che contengono, ad esempio, l'ora e la data).

L'elenco a discesa Tag consente di inserire variabili predefinite nei campi precedenti, ad esempio $NAME$ per il nome del lavoro.

La directory di lavoro dell'esecuzione dello script è /var/opt/run/eranger/collector, pertanto specificando un percorso di file relativo come bin/script.sh all'interno del percorso Inline script o Program si farà riferimento a /var/opt/run/eranger/collector/bin/script.sh.

Esecuzione di funzioni di inclusione per bash, perl e python

Selezionando il pulsante di opzione Script in linea è possibile inserire uno script nella casella di testo grande. Sono supportati i linguaggi di scripting Bash, perl e python. Il job Esegui offre varie funzioni di inclusione per questi linguaggi per mappare l'output dello script ai valori di ritorno, ai valori di stringa e al messaggio informativo. Per poter utilizzare queste funzioni, è necessario includerle puntando il cursore sulla prima riga della casella di testo Inline script e selezionando la funzione di inclusione corrispondente a uno dei 3 linguaggi di scripting dall'elenco a discesa Tags:

Ad esempio, l'aggiunta della funzione di inclusione sh/bash aggiunge il seguente codice allo script in linea:

Ora le seguenti funzioni possono essere utilizzate all'interno dello script per mappare valori numerici e stringhe su valori di ritorno, valori di stringa e messaggi informativi:

Funzione

Descrizione

setErangerValue

Mappatura di un singolo valore numerico a un valore di ritorno identificato dal suo indice (1-n)

setErangerValues

Mappa più valori numerici in più valori di ritorno, aggiungendo valori di ritorno in base al numero di valori di ingresso specificati.

setErangerStringValue

Mappa una singola stringa in un valore di stringa identificato dal suo indice (1-n)

setErangerStringValues

Mappa più stringhe in valori di stringa, aggiungendo valori di stringa in base al numero di stringhe di input specificate

setErangerInfoMessaggio

Mappa un valore numerico o una stringa al contenuto del messaggio informativo del lavoro.

addErangerInfoMessaggio

Aggiunge un valore numerico o una stringa al contenuto del messaggio informativo del lavoro.

getLastErangerValue

Ottiene il valore dell'ultima misurazione in base all'indice (1-n). Se non è disponibile alcuna misurazione precedente, la funzione restituisce 0.

getLastErangerStringValue

Ottiene il valore della stringa dall'ultima misurazione per indice (1-n). La funzione restituisce una stringa vuota se non è disponibile alcuna misura precedente.

valori di uscita

Se vengono aggiunti valori di ritorno, valori di stringa o contenuti di messaggi informativi utilizzando le funzioni precedenti, questa funzione deve essere aggiunta come ultimo elemento dello script.

Valori di esecuzione e limiti di allarme

Valore / Limite di allarme

Descrizione

Tempo di esecuzione

Il tempo di esecuzione del comando o dello script (tranne se disattivato selezionando il parametro Sopprimi tempo di esecuzione ).

Codice di uscita

Il codice di uscita del comando o dello script

Valore di ritorno <0-n>

Un valore numerico con precisione intera o in virgola mobile. È possibile definire limiti di allarme su tutti i valori di ritorno configurati.

Valore stringa <0-n>

Un valore di stringa. Utilizzare solo per un insieme limitato di stringhe statiche conosciute, non per stringhe che cambiano molto spesso (che contengono, ad esempio, l'ora e la data). È possibile definire limiti di allarme su tutti i valori di stringa configurati.

Codice di errore

Codice di errore generico del lavoro (vedere la sezione Codici di errore del lavoro).

Esempi di esecuzione

Esempio 1 - Esecuzione di un singolo comando con più argomenti della riga di comando

I seguenti parametri eseguiranno il comando sudo per eseguire uno script per riavviare il servizio di report in SKOOR Engine:

Non è necessario definire valori di ritorno o di stringa, ma verrà controllato solo il codice di uscita del comando combinato.

Uscita 1

Se per qualche motivo il comando non dovesse funzionare, inserire un nome di file nella casella di testo Salva output su file:

L'output standard e/o l'errore standard del comando verranno reindirizzati in quel file. È possibile visualizzarlo nella sezione dei valori del lavoro:

Facendo clic sul pulsante Aggiorna file, il nome del file viene trasformato in un link:

Fare clic sul link per visualizzare l'output del comando in una scheda o finestra separata del browser:

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  ]

Esempio 2 - Esecuzione di uno script in linea con le funzioni bash include

Contenuto della casella di testo di unoscript in linea per un semplice calcolo di un numero casuale:

. /opt/eranger/collector/eranger_exec_values.sh

newValue=$RANDOM
lastValue=$(getLastErangerValue 1)

diffValue=$(expr $newValue - $lastValue)

setErangerValues $newValue $diffValue
outputErangerValues

È necessario definire due valori di ritorno come configurati nello script Inline. Nell'esempio seguente, sono stati definiti Nuovo valore e Differenza:

Facendo clic sul pulsante Unità è possibile specificare i dettagli del valore:

Uscita 2

Esempio 3 - Esecuzione di uno script in linea con le funzioni bash include e utilizzando le proprietà personalizzate del lavoro come variabili di script

Di seguito viene eseguito uno script specificato come variabile con argomenti di script passati da una proprietà personalizzata. Lo script scarica un file specificato (argomento 2) da un server FTP (argomento 1).

La proprietà personalizzata per gli argomenti della riga di comando deve essere definita prima utilizzando il menu Amministrazione. Fare clic sul pulsante Amministrazione nell'angolo superiore destro della vista di configurazione, quindi selezionare Proprietà personalizzate dall'elenco a discesa Cerca:


Fare clic sul pulsante + in fondo alla schermata. Viene visualizzata la sezione Nuove proprietà aggiunte:

Assegnare un nome alla proprietà personalizzata, quindi specificare che questa proprietà personalizzata deve essere disponibile solo per gli oggetti lavoro:

Fare clic su Applica, quindi individuare l'ID della proprietà appena aggiunta passando il mouse sul suo nome:

Uscire dal menu Amministrazione facendo nuovamente clic sul pulsante Amministrazione nell'angolo in alto a destra. La proprietà personalizzata è ora disponibile per essere aggiunta a ogni lavoro.

Aggiungerla al lavoro Esegui e inserire i parametri della riga di comando per lo script a cui si fa riferimento nello script in linea:

In questo caso ci sono 2 argomenti della riga di comando, delimitati da uno spazio.

Ora aggiungete il contenuto della casella di testo dello script in linea:

. /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

Quindi aggiungere 1 valore di ritorno:

Lo script restituisce la velocità di download FTP in kB/s, quindi occorre aggiungere un divisore per convertirla in MBit/s.

Il vantaggio principale dell'uso di proprietà personalizzate per alimentare gli argomenti è che si può riutilizzare lo stesso blocco di codice dello script Inline per molti lavori utilizzando un modello di lavoro (vedere la sezione Modelli) e solo la proprietà personalizzata differisce tra i vari lavori.

Uscita 3

Esempio 4 - Esecuzione di uno script inline con funzioni bash include e utilizzando una chiamata ssh remota

Il seguente script in linea esegue un comando in remoto utilizzando il comando ssh. Si presuppone che l'autenticazione ssh sia già configurata utilizzando chiavi pubbliche senza password, quindi non viene richiesta alcuna password quando ci si connette al server ssh remoto.

Il comando legge il numero di processi ddclient in esecuzione da remoto. Viene utilizzata la variabile interna $DEVICE_ADDRESS$.

. /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

Aggiungere 1 valore di ritorno:

Uscita 4

Esempio 5 - Esecuzione di un comando in remoto via ssh

L'esempio seguente utilizza la casella di controllo Execute remotely per poter inserire le credenziali di autenticazione ssh ed eseguire un comando su un computer remoto:

Durante l'esecuzione da remoto non è possibile utilizzare valori di ritorno o valori di stringa, ma viene controllato solo il codice di uscita.

Uscita 5

Esempio 6 - Esecuzione di una query WMI su un server Windows 2000 e lettura del suo registro eventi

Utilizzate il seguente script in linea:

. /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

Quindi aggiungere 2 valori di ritorno:


Uscita 6

Esempio 7 - Download di wget con terminazione automatica dopo 45 secondi

Utilizzate la seguente notazione per assicurarvi che il comando esterno (wget in questo caso) venga terminato automaticamente se supera i 45 secondi:

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