Parsefile

Funzione

Eseguire il parsing di un file per trovare testi e/o valori, creare valori differenziali. Per ogni operazione di parsing sono possibili fino a 32 valori / valori stringa / valori differenziali / valori di tasso / risultati di confronto / contatori di corrispondenza ed eventi.

Allarmi

Corrispondenze di stringa, conteggi di stringa, valori, valori di stringa, valori diff, valori di frequenza, eventi, età del file, età del contenuto del file, codice di risposta

Speciale: Il lavoro può entrare nello stato Maintenance OK o Maintenance Major, in base ai limiti di allarme configurati.

Dettaglio parsefile

Parametri del parsefile

Parametro

Descrizione

Metodo

Il file da analizzare può essere un file locale (impostazione predefinita) o può essere prelevato prima con uno dei seguenti protocolli:

HTTP
FTP
SFTP
SCP

Se si sceglie uno dei protocolli remoti, vengono visualizzati parametri aggiuntivi per il percorso di origine e l'autenticazione dell'utente. Per i dettagli sulla configurazione, vedere Lavoro Fetchfile.

Esempio: recuperare un file da un server web, prima di analizzarlo:

Il metodo preferito è quello di recuperare un file remoto all'interno del lavoro Parsefile. Un'alternativa è quella di creare un lavoro batch con un lavoro Fetchfile o Agent Fetchfile e un lavoro Parsefile.

Se il sistema remoto è in esecuzione su Windows e SKOOR WinAgent è installato, i file possono essere recuperati anche con WinAgent. WinAgent è elencato nel menu a tendina dei metodi, non appena le proprietà del nome utente e della password dell' agente sono impostate sul dispositivo di lavoro. Su Windows 10, il server OpenSSH può essere installato tra le funzioni opzionali. Dopo aver avviato il relativo servizio, è possibile copiare i file utilizzando scp.

Nome file

Il nome del file da analizzare. Il percorso può essere specificato relativamente alla directory di parsing predefinita sul collettore (definita nel file /etc/opt/eranger/eranger-collector.cfg, normalmente impostato su /var/opt/run/eranger/collector/tmp) o assoluto. Se il file si trova in una sottodirectory della directory predefinita configurata, il nome del file può essere inserito come:

subdir/file.txt

Età del file

Verifica la data e l'ora dell'ultimo accesso al file. Se è più vecchia del valore indicato, il lavoro emette un avviso (File troppo vecchio). L 'età del file può essere inserita in minuti o secondi; sono supportati anche formati come "1h 30m".

Età del contenuto del file

Verifica se il contenuto del file è cambiato. Se non è cambiato durante il tempo inserito, il lavoro emette un avviso (Contenuto del file troppo vecchio). Il formato dell 'età del contenuto del file è lo stesso del parametro Età del file.

Trasformazione → Esecuzione

Se la trasformazione automatica fornita dal lavoro non è sufficiente per qualche motivo, il file può essere pre-elaborato con una delle seguenti opzioni prima di essere analizzato:

Non utilizzato (nessuna preelaborazione)
Dos2unix (obsoleto per i nuovi lavori: converte un file prelevato da un host Windows nel formato UNIX/Linux)
Iconv (converte il contenuto del file da una codifica a un'altra, ad esempio dalla codifica ISO-8859-15 a quella UTF-8). Se si sceglie questa opzione, appaiono altri campi di testo Da e A per inserire le scelte di codifica desiderate).
Comando definito dall'utente (viene visualizzato un campo di testo aggiuntivo in cui è possibile inserire un filtro personalizzato. Il filtro elabora da STDIN a STDOUT. Esempio: grep -v 'unwanted' | sed 's/wrongtext/goodtext/g')

Sequenza

Vedere la sezione successiva

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

Trasformazioni standard dei file

Se un file è stato prelevato da un sistema diverso da Linux, alcuni caratteri speciali devono essere adattati per il parsing. L'elenco seguente mostra quali casi vengono gestiti automaticamente dal lavoro:

  • I caratteri di ritorno a capo di Windows vengono rimossi (in precedenza, l'opzione dos2unix transform lo faceva).

  • Se il file è codificato in UTF-8 con BOM (Byte Order Mark), il BOM viene rimosso.

  • Se il file è codificato in unicode (big-endian UTF-16 o little-endian UTF-16)

    • Se non è definita alcuna trasformazione, il file viene convertito in UTF-8 prima dell'analisi.

    • Se è definita una trasformazione, non viene fatto nulla al file (si presume che la trasformazione gestisca il file correttamente).

Se la trasformazione non riesce, i codici di risposta e di errore del lavoro visualizzeranno i seguenti messaggi:

  • Il codice di risposta 11 (Errore di trasformazione del file) viene sempre visualizzato e deve essere configurato come limite di allarme.

  • Il codice di errore 1 (errore di sistema) o 2 (errore interno) può essere visualizzato in aggiunta.

Sequenza di parsefile

Comportamento generale

  • Se il file non viene trovato, il codice di risposta viene impostato a 1(File non trovato) e l'esecuzione viene terminata.

  • Se è stata definita l'età del file e/o l'età del contenuto del file, questi controlli vengono effettuati prima di analizzare il file.

  • Se il file è troppo vecchio, il codice di risposta viene impostato a 2(File troppo vecchio), ma il file viene comunque analizzato.

  • Se il contenuto del file è troppo vecchio, il codice di risposta è impostato su 3(Contenuto del file troppo vecchio), ma il file viene comunque analizzato.

  • Se un file contiene più di 100000 righe, il codice di risposta viene impostato a 4(File troppo lungo) e l'esecuzione viene terminata. Il limite predefinito può essere aumentato o rimosso aggiungendo la seguente riga nel file di configurazione dello SKOOR Engine /opt/eranger/etc/eranger-collector.cfg:

    parsefile_line_limit = 1000000                     raise limit to a million lines
    parsefile_line_limit = 0                           remove limit altogether


  • Quando si aggiungono nuovi valori, valori stringa, valori Diff e così via, è possibile inserire un massimo di 32 voci nella sequenza di analisi per ogni tipo di valore. Ad esempio, quando si aggiungono 3 valori usando la voce Get value, si inizia con l'aggiunta del valore Get con l'indice 1, poi 2, poi 3, con un numero di indici crescente. L'interfaccia utente consente di selezionare solo un indice massimo basato sul numero di elementi della sequenza attualmente configurati, in modo che l'elenco a discesa per la selezione dell'indice non occupi troppo spazio.

Voci disponibili nell'elenco a discesa del filtro di sequenza

  • Imposta

    • Filtro (include)

      • Tutte le righe del file che non contengono l'espressione vengono ignorate, ad esempio inserendo "localhost" (senza virgolette) verranno considerate solo le righe contenenti "localhost"; le altre righe vengono saltate.

    • Filtro (escludere)

      • Funziona al contrario, cioè come filtro negativo.

      • Tutte le righe contenenti l'espressione vengono ignorate per analizzare il resto della sequenza.

    • Definire il delimitatore

      • Il delimitatore di colonna predefinito è lo spazio bianco (1 spazio, più spazi consecutivi, tabulazioni). In questo modo le righe vengono divise in parole.

      • È possibile scegliere un delimitatore diverso. Inserire una stringa di 1 o più caratteri come ";" o "COL". Durante una sequenza, il delimitatore può essere impostato e reimpostato più volte. Per resettare, lasciare il campo Testo vuoto.

      • Il conteggio delle colonne inizia da 0 (zero).

    • Modalità Syslog

      • Se questa opzione è impostata, l'analisi continua con la prima nuova riga del file aggiunta dall'ultima esecuzione del lavoro.

      • Se il file è stato ruotato, il file ruotato viene utilizzato a partire dall'ultima posizione EOF, in modo da non perdere dati.

    • Ignora caso

      • Se questa opzione è impostata, le maiuscole vengono ignorate per i confronti tra le stringhe.

    • Ignora non trovato

      • Se una riga, un'espressione o una colonna non viene trovata, il codice di risposta non viene impostato su 7 Stringa non trovata, ma l'esecuzione del lavoro viene terminata.

    • Continua dopo il non trovato

      • Se questa opzione è impostata, l'analisi viene continuata dopo che una riga o una colonna non è stata trovata.

    • Rileva overflow on/off

      • Se questa opzione è attivata, qualsiasi parametro di valore Diff successivo nella sequenza ignorerà i valori inferiori al valore misurato nell'esecuzione del lavoro precedente (sono ammesse solo differenze positive).

      • Questa funzione è utilizzata soprattutto per i contatori. L'impostazione può essere disattivata più avanti nella sequenza.

    • Ottenere il timestamp (rate)

      • È possibile leggere un timestamp da un file per effettuare calcoli esatti utilizzando il parametro di sequenza Ottieni valore tasso. Ad esempio, se il file analizzato è generato da un'applicazione eseguita in modo asincrono.

      • Il timestamp nel file deve essere stampato in unità di secondi, ms o µs.

  • Trova
    I parametri seguenti si riferiscono alle righe. L'ambito del parametro successivo è la riga trovata dal parametro corrente. Se una riga richiesta non esiste, il codice di risposta viene impostato a 5(riga non trovata) e l'esecuzione viene terminata, tranne nel caso in cui sia impostato Continua dopo non trovato.

    • Vai alla riga #

      • Il puntatore di parsing viene posizionato all'inizio della riga corrispondente.

    • Vai alla riga successiva

      • Il puntatore di parsing viene posizionato all'inizio della riga successiva.

    • Vai alla prima riga con

      • Il puntatore di analisi viene posizionato all'inizio della prima riga che valuta la stringa/espressione.

      • Se non è possibile trovare una riga con tale espressione e viene impostato "Continua dopo non trovato", il puntatore di parsing viene posizionato sul primo carattere della prima riga del file e viene elaborato il resto della sequenza.

    • Passa alla riga successiva con

      • Il puntatore di analisi viene posizionato all'inizio della riga successiva che valuta la stringa/espressione.

      • Se non è possibile trovare una riga con tale espressione e viene impostato "Continua dopo non trovato", il puntatore di parsing viene posizionato al primo carattere della riga successiva e viene elaborato il resto della sequenza.

    • Vai all'ultima riga con

      • Il puntatore di analisi viene posizionato all'inizio dell'ultima riga che valuta la stringa/espressione.

      • Se non è possibile trovare una riga con tale espressione ed è impostato "Continua dopo non trovato", il puntatore di parsing viene posizionato al primo carattere della prima riga del file e viene elaborato il resto della sequenza.

  • Ricerca basata sul delimitatore
    I seguenti comandi dipendono dalla definizione di un delimitatore. Se non viene definito alcun delimitatore, vengono utilizzati spazi bianchi (spazi o tabulazioni) come delimitatori.

    • Vai alla colonna #

      • Il puntatore di analisi si posiziona sul primo carattere della colonna corrispondente (0..n) nella riga corrente.

      • Se la colonna non viene trovata, il codice di risposta viene impostato a 6(Colonna non trovata) e l'esecuzione viene terminata.

      • Se la colonna non viene trovata e viene impostato Continua dopo non trovato, la posizione del puntatore di parsing non viene modificata.

      • Per impostazione predefinita, l'ambito dei seguenti comandi di stringa è l'intero file; se uno dei comandi di riga è stato richiamato in precedenza, l'ambito è la riga corrente.

      • Se il campo viene lasciato vuoto, il codice di errore viene impostato a 7(parametro non valido) e l'esecuzione viene terminata.

    • Vai alla prima stringa

      • A seconda dell'ambito, si cerca la prima occorrenza della stringa nell'intero file / nella riga corrente che valuta l'espressione.

      • Se viene trovata, il puntatore di parsing viene posizionato sul primo carattere che valuta l'espressione e quindi incrementato della lunghezza dell'espressione.

      • In caso contrario, l'esecuzione viene terminata e il codice di risposta viene impostato su 7(Stringa non trovata), tranne nel caso in cui sia stato impostato Ignore not found o Continue after not found.

    • Vai alla stringa successiva

      • Come sopra, ma la ricerca inizia dalla posizione corrente e il parser cercherà l'occorrenza successiva.

    • Vai all'ultima stringa

      • Come sopra, ma il parser cerca l'ultima occorrenza di un'espressione.

I seguenti parametri supportano la gestione degli eventi secondo il lavoro Eventlog dell'agente e possono tracciare fino a 4 eventi.

  • Evento

    • Imposta eventoX

      • Un evento viene impostato quando una riga corrisponde a una determinata espressione o stringa.

      • È possibile configurare e impostare fino a 32 eventi.

    • Azzera eventoX

      • Un evento viene resettato quando una riga successiva corrisponde a una determinata espressione.

      • È possibile configurare e impostare fino a 32 eventi di reset.

    • Azzera eventoX dopo

      • Un evento viene resettato dopo un determinato timeout (ad esempio, 10m = 10 minuti).

      • È possibile configurare e impostare fino a 32 timeout.

      • La condizione di reset viene valutata solo in fase di esecuzione del lavoro. Se un evento è stato impostato e non vengono trovate nuove stringhe corrispondenti durante la successiva esecuzione del lavoro, l'evento verrà resettato se viene raggiunto il timeout sopra indicato.

  • Valori

    • Ottieni valoreX

      • A partire dalla posizione corrente viene cercato e assegnato un valore numerico, se trovato.

      • In caso contrario, il codice di risposta viene impostato a 8(valore non trovato) e l'esecuzione viene terminata.

      • Il puntatore di analisi viene impostato sul primo carattere dopo il valore trovato.

        Premendo il pulsante Unità si apre la seguente finestra di dialogo:


        Qui è possibile specificare

        • il nome del valore da restituire (opzionale)

        • la sua unità di misura (ad esempio, secondi, opzionale)

        • un divisore per il quale dividere il valore (opzionale)

        • la precisione dell'uscita numerica (ad esempio, 1,000).

    • Ottieni valore diffX

      • A partire dalla posizione corrente viene cercato un valore numerico e viene assegnata la differenza con il valore trovato durante l'ultima esecuzione.

      • Il puntatore di parse viene impostato sul primo carattere dopo il valore trovato.

    • Ottenere il valore del tassoX

      • Il valore del tasso rappresenta la differenza tra il valore corrente e l'ultimo valore diviso per il tempo (secondi) trascorso tra le due misurazioni:

      • (Valnow -Vallast) / (tnow - tlast)

      • Di solito per questo calcolo si prende il timestamp dell'esecuzione del lavoro. Tuttavia, può anche essere letto dal file utilizzando la voce Ottieni timestamp (tasso) (vedere sopra).

      • Se la differenza di timestamp è <= 0, non viene generato alcun nuovo valore di tasso.

    • Ottieni valore stringaX

      • Consente di ricevere un valore di stringa da un file. Usare questa funzione solo per le stringhe che non cambiano spesso, cioè quando la stringa è una delle poche stringhe conosciute come parte del testo analizzato.

      • La stringa può essere mappata in un valore numerico utilizzando i campi di configurazione accessibili facendo clic sul pulsante Unità.

    • Confronta stringaX

      • L'espressione (che può essere una semplice stringa, ma anche un'espressione regolare) viene valutata e come valore di ritorno viene assegnato 1(Trovato) o 0(Non trovato).

      • Il nome del valore di ritorno e il testo visualizzato accanto al valore di ritorno possono essere modificati facendo clic sul pulsante Enum a destra di questo parametro. Si apre la seguente finestra di dialogo:


        che mostrerà quanto segue per un confronto riuscito nella sezione Valori:
        Stato di controllo: 1 (lo stato è OK)
        invece del valore predefinito:
        Confronta risultato1: 1 (Trovato)

        Questo permette di mappare il valore di ritorno a un messaggio specifico.

      • I caratteri speciali ^ o $ possono essere utilizzati per cercare espressioni all'inizio o alla fine di una riga. Ad esempio, immettendo "^AAA" (senza virgolette) si otterrà il risultato Found se la stringa "AAA" si trova all'inizio della riga, mentre si otterrà il risultato Not found se la riga contiene ma inizia con qualcosa di diverso da "AAA". Allo stesso modo, l'immissione di "AAA$" troverà la stringa solo se si trova alla fine della riga.

      • Se viene immesso un insieme di combinazioni stringa/valore nel formato "1=AAA, 2=BBB" o "1=AAA,2=BBB,0=*" e viene trovata una stringa dell'insieme dopo la posizione corrente sulla riga corrente, viene assegnato il numero appropriato come valore di uscita (il secondo esempio restituisce 0 per le stringhe non presenti nell'insieme). In questo modo è possibile ottenere più valori di ritorno rispetto a quelli predefiniti di 0 o 1. Inoltre, questi valori di ritorno possono essere assegnati come valore di uscita. Inoltre, questi valori di ritorno possono essere ulteriormente mappati in messaggi di uscita utilizzando il campo Enum.

      • I caratteri speciali che di solito fanno parte di un'espressione regolare, ad esempio "(", devono essere evasi con una barra rovesciata per essere abbinati correttamente.

      • Il puntatore di analisi viene impostato sul primo carattere dopo l'espressione valutata che non sia uno spazio vuoto, una tabulazione o una barra verticale (| o ¦) o sulla colonna successiva se è stato definito un delimitatore.

    • Conteggio delle corrispondenze di stringaX

      • Se è stato emesso un parametro di riga nella sequenza precedente, vengono contate tutte le occorrenze di una stringa nella riga corrente, altrimenti vengono contate tutte le occorrenze della stringa nell'intero file.

      • Il puntatore di analisi non viene spostato.

    • Testo del messaggio informativo

      • Il testo dalla posizione corrente del puntatore di parsing alla fine della riga viene copiato nel messaggio informativo. Se non c'è testo, il codice di risposta viene impostato a 9(Testo per info non trovato) e l'esecuzione viene terminata.

      • Il puntatore di parser non viene spostato.

Valori di parsefile e limiti di allarme

Il lavoro di parsefile può entrare negli stati di manutenzione Maintenance OK o Maintenance Major, a seconda degli altri limiti di allarme configurati. Ad esempio, se è configurato il seguente limite di allarme:

Il lavoro entrerà nello stato Maintenance OK se il confronto del testo corrisponde a una determinata stringa o espressione e se altrimenti si trova nello stato Ok. Questo può essere usato per mettere il lavoro e il suo dispositivo padre (la manutenzione si propaga da un lavoro al suo dispositivo) in modalità di manutenzione, a seconda di ciò che viene trovato durante l'analisi di un file che contiene informazioni sullo stato di manutenzione, ad esempio da altri sistemi di monitoraggio come Manutenzioni. Tutti gli altri limiti di allarme riportati di seguito possono essere utilizzati anche nel limite di allarme di manutenzione.

Valore / Limite di allarme

Descrizione

Evento1-X

Verifica se è stato attivato un evento in base al parametro Imposta sequenza eventi di cui sopra.

Valore di ritorno1-X

Valore numerico definito dall'utente in base al parametro di sequenza Get value di cui sopra.

Tasso valore1-X

Valore numerico definito dall'utente in base al parametro di sequenza Get rate value di cui sopra.

Diff valore1-X

Valore numerico di diff definito dall'utente in base al parametro di sequenza Get diff value di cui sopra.

Stringa valore1-X

Valore stringa definito dall'utente in base al parametro di sequenza Get string value di cui sopra.

Confronta risultato1-X

Valore definito dall'utente in base al parametro Compare string value sequence di cui sopra.

Contatore di partite1-X

Valore definito dall'utente in base al parametro di sequenza Count string matches di cui sopra.

Codice di risposta

0 Nessun errore
-1 Errore generale
1 File non trovato
2 File troppo vecchio
3 Contenuto del file troppo vecchio
4 File troppo lungo
5 Linea non trovata
6 Colonna non trovata
7 Stringa non trovata
8 Valore non trovato
9 Testo per Info non trovato
10 Impossibile recuperare il file
11 Impossibile trasformare il file

Codice di errore

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

Esempi di Parsefile

Esempio 1 - Analizzare un file file.txt con il seguente contenuto per leggere i 3 valori nelle ultime 3 righe:

11;OK;33;44.9888;MK;Duration (average): 203.6533s
Open cases:
10
8
1

La configurazione del lavoro si presenta come segue:

La definizione dell 'unità del primo elemento del valore Get è:

Le altre due definizioni di unità sono simili, rispettivamente con i nomi Minor e Major.

Uscita 1

Esempio 2 - Analizzare lo stesso file.txt ed estrarre i valori dalla prima riga in base alle colonne

La definizione Enum dell'elemento Confronta stringa 1 recita:

Testo intero: 0=Stato è buono,1=Stato non è buono,2=Stato è sconosciuto

La definizione dell'unità per il valore Get 1 recita:

Si noti l'aumento della precisione, per poter leggere valori numerici in virgola mobile.

Uscita 2

Esempio 3 - Cerca una riga contenente il nome del server utilizzando i tag variabili. Rimanere su quella riga e ottenere i valori MeasurementValue1 e CPU_Usage

Il contenuto del file è:

Timestamp=Fri Oct 31 09:55:20 CET 2017
ServerName=myserver01;MeasurementValue1=1.11;CPU_Usage=10%;EnumValue1=OK;
ServerName=myserver02;MeasurementValue1=1.22;CPU_Usage=22%;EnumValue1=BAD;

Il nome del dispositivo è myserver01.

Le definizioni delle unità sono:

L'uso dei tag di SKOOR Engine consente di copiare i lavori su dispositivi diversi e di farli funzionare con il nome corretto del dispositivo.

Uscita 3

Esempio 4 - Lettura di un timestamp da un file generato regolarmente e lettura del valore di rate per ottenere il numero di pacchetti in entrata e in uscita su un'interfaccia di rete

Il file viene generato regolarmente con il seguente contenuto da un lavoro di esecuzione con il seguente contenuto di script in linea:

date +%s%N | cut -c1-13
netstat -I=eth0

La prima riga stampa il timestamp (secondi da 1.1.1970) con precisione msec, la seconda riga stampa le statistiche di ricezione/trasmissione sull'interfaccia di rete eth0. Il file generato è:

1512726065120
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0  5761332      0      0      0  2932100      0      0      0 BMRU

I valori della velocità (pacchetti in entrata e in uscita) sono indipendenti dagli intervalli di esecuzione del lavoro execute e del lavoro parsefile. Di solito si mettono il job execute e il job parse sotto un job Batch e si assegna loro un intervallo di esecuzione di No repetition, e solo il job Batch ha un intervallo di esecuzione.

Il lavoro di parsefile si presenta come segue:

Le definizioni delle unità sono:

Output 4

I valori vengono stampati dopo la seconda esecuzione del lavoro (il valore del tasso deve essere confrontato con la misurazione precedente):

Esempio 5 - Generare eventi dal contenuto analizzato

Leggere un file generato da un lavoro esterno e cercare determinate stringhe. Generare un evento1 quando viene trovata la stringa Errore . Azzerare l'evento dopo un certo periodo di tempo. Genera anche un evento2 se viene trovata la stringa Process mysqld terminated . Resettare il secondo evento solo se la stringa Process mysqld started viene trovata più avanti nel file o durante l'esecuzione del lavoro successivo.

In questo esempio, il primo elemento della sequenza di analisi imposta il parametro Syslog mode. In questo modo si assicura che vengano analizzati solo i dati nuovi del file. Le parti più vecchie del file che sono state analizzate durante l'ultima esecuzione del lavoro non vengono più considerate per le esecuzioni successive. Se la prima esecuzione del lavoro trova la stringa Errore nel file, imposta l'Evento1. Se non vengono trovate nuove stringhe di errore durante le successive 10 esecuzioni del lavoro (l'intervallo del lavoro è impostato su 1 minuto), l'evento viene resettato.

Il meccanismo degli eventi consente al lavoro di tornare allo stato OK dopo un certo periodo di tempo, pur avendo la possibilità di attivare un'e-mail di allarme quando viene impostato un evento.

Le definizioni di Enum sono:

I limiti di allarme sono configurati come segue:

Uscita 5