Creare un parser
La creazione di un parser consente di definire come estrarre le voci di log da un file di log e come estrarre i campi da una voce di log.
-
Aprire il menu di navigazione e fare clic su Osservabilità e gestione. In Logging Analytics, fare clic su Amministrazione. Viene visualizzata la pagina Panoramica dell'amministrazione.
-
Le risorse di amministrazione sono elencate nel riquadro di navigazione a sinistra in Risorse. Fare clic su Pars.
- Nella pagina Pars, fare clic su Crea.
- Selezionare dalle opzioni Tipo espressione regolare, Tipo JSON, Tipo XML o Tipo delimitato.
Viene visualizzata la pagina Crea parser.
In caso di Tipo espressione regolare, per impostazione predefinita viene visualizzata la pagina Crea parser nella modalità Guidato. Continuare in questa modalità se si desidera che Logging Analytics generi l'espressione regolare per analizzare i log dopo aver selezionato i campi. Se si desidera scrivere un'espressione regolare per l'analisi, passare alla modalità Avanzate.
È inoltre possibile creare un parser utilizzando un parser definito da Oracle come modello. Selezionare un parser definito da Oracle nella pagina Parser, fare clic su Duplica e modificare i valori nei campi in base alle proprie esigenze.
Oracle Logging Analytics fornisce molti parser definiti da Oracle per le origini log, ad esempio i log di Java Hotspot Dump, più sistemi, ad esempio Linux, Siebel, PeopleSoft e così via, nonché per i tipi di entità, ad esempio Oracle Database, Oracle WebLogic Server e Oracle Enterprise Manager Cloud Control. È possibile accedere alla lista completa dei parser e delle origini log supportati dall'interfaccia utente di Oracle Logging Analytics.
Per eseguire altre azioni sul parser, nella pagina Parser selezionare il Tipo di creazione del parser e limitare la ricerca del parser selezionando il Tipo di parser nella sezione Filtri. Dopo aver identificato il parser, fare clic sull'icona Azioni nella riga del parser:
-
Visualizza dettagli: viene visualizzata la pagina dei dettagli del parser. Visualizzare i dettagli del parser e modificarli, se necessario.
-
Modifica: viene visualizzata la finestra di dialogo Modifica parser. Qui è possibile modificare le proprietà del parser.
-
Duplica: fare clic su questa opzione se si desidera creare un duplicato del parser esistente, dopo di che è possibile modificare il duplicato per personalizzarlo.
- Esporta definizione: se si utilizza Oracle Logging Analytics in più aree, è possibile esportare e reimportare il contenuto della configurazione del parser. È inoltre possibile utilizzare questa opzione se si desidera memorizzare una copia delle definizioni al di fuori di Oracle Logging Analytics. Vedere Importazione ed esportazione del contenuto della configurazione.
-
Elimina: potrebbe essere necessario eliminare alcuni parser precedenti o non utilizzati. Per eliminare il parser, confermare nella finestra di dialogo Elimina entità. È possibile eliminare un parser solo se non dispone di origini dipendenti.
argomenti:
Suggerimento per l'accesso facilitato: per utilizzare la tastiera per selezionare il contenuto per l'estrazione dei campi dai log, utilizzare i tasti ALT+arrow.
Crea parser tipo espressione regolare
Per impostazione predefinita, viene visualizzata la pagina Crea parser nella modalità Guidato. Continuare in questa modalità se si desidera che Logging Analytics generi l'espressione regolare per analizzare i log dopo aver selezionato i campi. Per la modalità guidata, vedere Video: Uso di RegEx Parser Builder. Se si desidera scrivere un'espressione regolare per l'analisi, passare alla modalità Avanzate e continuare con i passi riportati di seguito.
-
Nel campo Nome, immettere il nome del parser. Ad esempio, immettere
Custom Audit Logs
. -
Facoltativamente, fornire una descrizione appropriata al parser per facilitare l'identificazione.
-
Nel campo Contenuto log di esempio incollare i contenuti da un file di log che si desidera analizzare, ad esempio:
Jun 20 2020 15:19:29 hostabc rpc.gssd: ERROR: can't open clnt5aa9: No such file or directory Jul 29 2020 11:26:28 hostabc kernel: FS-Cache: Loaded Jul 29 2020 11:26:28 hostxyz kernel: FS-Cache: Netfs 'nfs' registered for caching Aug 8 2020 03:20:01 slc08uvu rsyslogd-2068: could not load module '/lib64/rsyslog/lmnsd_gtls.so', rsyslog error -2078 [try http://www.rsyslog.com/e/2068 ] Aug 8 2020 03:20:36 0064:ff9b:0000:0000:0000:0000:1234:5678 rsyslogd-2066: could not load module '/lib64/rsyslog/lmnsd_gtls.so', dlopen: /lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: Too many open files [try http://www.rsyslog.com/e/2066 ] Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: from=root, size=263, class=0, nrcpts=1, msgid=<201611130336.uAD3a6o5009542@hostname.example.com>, relay=root@localhost Sep 13 2020 03:36:06 hostnam sendmail: uAD3a6o5009542: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30263, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (uAD3a6KW009543 Message accepted for delivery) Sep 20 2020 08:11:03 hostnam sendmail: STARTTLS=client, relay=userv0022.example.com, version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256]]>
Voce di log su più righe perché le voci 4 e 5 si estendono su più righe.
-
Nel campo Analizza espressione regolare immettere l'espressione regolare per analizzare i campi. Ogni coppia di parentesi indica la clausola di espressione regolare da estrarre in un singolo campo.
L'espressione di analisi è univoca per ogni tipo di log e dipende dal formato delle voci di log effettive. In questo esempio, immettere:
(\w+)\s+(\d+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+([^\s]+)\s+([^:]+):\s+(.*)
Nota
-
Non includere spazi prima o dopo il contenuto.
-
L'espressione regolare deve corrispondere al testo completo del record di log.
-
Se nell'espressione di analisi sono stati inclusi caratteri nascosti, l'interfaccia Crea parser genera un messaggio di avvertenza:
Parser expression has some hidden control characters.
Per disabilitare questa risposta predefinita, deselezionare la casella di controllo Mostra caratteri di controllo nascosti quando viene visualizzato il messaggio di errore.
Per ulteriori informazioni sulla creazione di espressioni di analisi, vedere Espressioni di analisi di esempio.
-
-
Selezionare l'intervallo di record di log appropriato.
La voce di log può essere una singola riga o più righe. Se sono state scelte più righe, immettere l'espressione iniziale del record di log.
È necessario definire l'espressione regolare come regola minima necessaria per identificare correttamente l'inizio di una nuova voce di log. Nell'esempio, l'espressione iniziale può essere:(\w+)\s+(\d+)\s+(\d+)\s+
Indica che l'inizio di una nuova voce di log si verifica ogni volta che una nuova riga inizia con il testo che corrisponde all'espressione iniziale di questa voce.
Facoltativamente, è possibile immettere anche l'espressione finale. Utilizzare Espressione finale per indicare la fine del record di log. Quando un record di log viene scritto nel file per un lungo periodo di tempo e si desidera assicurarsi che venga raccolta l'intera voce di log, utilizzare l'espressione regolare di fine. L'agente attende che venga trovata una corrispondenza con il pattern regex finale per raccogliere il record di log. Per l'espressione finale si applicano le stesse regole di formato di Espressione Entry Start.
Se necessario, selezionare la casella di controllo Gestisci l'intero file come singola voce di log. Questa opzione consente di analizzare e memorizzare un intero file di log come singola voce di log. Ciò è particolarmente utile quando si analizzano le origini log, ad esempio i log di dump di Java Hotspot, la lista RPM dei log dei package e così via. Se la voce di log contiene molto testo da cercare, è consigliabile selezionare la casella di controllo Abilita ricerca di testo non elaborato su questo contenuto. Questa opzione consente di cercare i record di log con il campo Testo non elaborato. Quando l'opzione è abilitata, è possibile visualizzare il contenuto del log originale con il testo RAW.
-
Nella scheda Campi, selezionare il campo pertinente per memorizzare ciascun valore acquisito dall'espressione regolare.
Per creare un nuovo campo, fare clic sull'icona
. Viene visualizzata la finestra di dialogo Crea campo definito dall'utente. Immettere i valori per Nome, Tipo di dati, Descrizione e utilizzare la casella di controllo Campo con più valori, se applicabile per i log. Per informazioni sui valori da immettere, vedere Creare un campo. Per rimuovere il campo selezionato nella riga, fare clic sull'icona
.
Per ogni valore acquisito, selezionare il campo in cui si desidera memorizzare i dati. Il primo campo acquisito nell'esempio può essere immesso come indicato di seguito.
-
Nome campo: mese (nome breve)
-
Tipo dati campo: STRING
-
Descrizione campo: componente Mese dell'ora di inserimento del log come nome breve, ad esempio Gen
-
Espressione campo:
(\w{3})
Nell'esempio di log precedente, mappare i campi nel seguente ordine:
- Mese (abbreviazione)
- Day
- Anno (4 cifre)
- Nome host (server)
- Servizio
- Messaggio
-
-
Nella scheda Funzioni, fare clic su Aggiungi funzione per aggiungere facoltativamente una funzione alle voci del log di pre-elaborazione. Vedere Immissioni log pre-elaborazione.
-
Fare clic sulla scheda Test parser per visualizzare le modalità di estrazione dei valori dal contenuto del log da parte del parser appena creato.
È possibile visualizzare le voci del log dal contenuto di esempio fornito in precedenza. Utilizzare questa opzione per determinare se il parser definito funziona correttamente.
Se l'espressione regolare non riesce per una voce di log, lo stato della corrispondenza mostra quale parte dell'espressione ha funzionato in verde e la parte non riuscita in rosso. Ciò consente di identificare quale parte dell'espressione regolare deve essere corretta.
È possibile visualizzare la lista degli eventi che non hanno superato il test del parser e i dettagli dell'errore. È inoltre possibile visualizzare il conteggio dei passi che può dare un'idea di quanto sia costosa l'espressione regolare. Idealmente questo valore dovrebbe essere il più basso possibile. Qualsiasi cosa sotto i 1000 può essere accettabile, ma a volte è necessario un regex più costoso. Se l'espressione regolare esegue troppi passi, l'utilizzo della CPU nell'host dell'agente potrebbe aumentare e rallentare l'elaborazione dei log. Ciò ritarderà la disponibilità delle voci di log in Log Explorer. Nei casi estremi in cui l'espressione regolare è troppo costosa, salteremo l'analisi della voce di registro e di qualsiasi altra voce raccolta nello stesso periodo di raccolta.
Fare clic su Salva per salvare il nuovo parser appena creato.
Per interrompere la creazione del parser, fare clic su Annulla. Quando si fa clic su Annulla, si perderanno eventuali progressi già compiuti nella creazione del parser di tipo Regex.
Analisi di ora e data mediante la macro TIMEDATE
-
Oracle Logging Analytics consente inoltre di analizzare l'ora e la data disponibili nei file di log utilizzando la macro
TIMEDATE
.Pertanto, per i log che utilizzano il formato di espressione
TIMEDATE
, l'espressione di analisi precedente deve essere scritta come:{TIMEDATE}\s+([^\s]+)\s+([^:]+):\s+(.*)
In tal caso, l'espressione iniziale della voce è
{TIMEDATE}\s+
. -
Se alcune voci di log non hanno un anno assegnato nel log, Oracle Logging Analytics tenta di identificare l'anno in base alle informazioni disponibili, ad esempio il fuso orario dell'host, l'ora dell'ultima modifica del file e così via. Il caricamento su richiesta consente all'utente di fornire informazioni per la risoluzione di date ambigue. Inoltre, è possibile utilizzare l'impostazione di override del fuso orario durante l'inclusione dei log mediante il caricamento su richiesta o il Management Agent. Vedere Carica log su richiesta e Imposta raccolta di log continui dagli host.
-
Se l'ora e la data non vengono specificate nel parser per un file di log analizzato come singolo record di log, durante la raccolta dei log mediante Management Agent viene presa in considerazione l'ora dell'ultima modifica del file di log. Se durante la raccolta non è possibile stabilire l'ora e la data di una voce di log, le voci di log verranno memorizzate con la data e l'ora in cui i log sono stati inclusi in Oracle Logging Analytics.
Crea parser tipo JSON
Se ognuna delle voci di log non contiene i dati di log contestuali o di intestazione, è possibile integrare le voci di log con i dati di log di intestazione pertinenti. È possibile pre-elaborare le voci di log e arricchire il contenuto con informazioni di intestazione specificando una funzione di dettaglio di intestazione attenendosi alla procedura riportata di seguito.
-
Creare innanzitutto un parser contenuto intestazione fornendo il contenuto del log di esempio che consente di identificare il percorso JSON per recuperare le informazioni sull'intestazione.
-
Definire un secondo parser per analizzare il corpo rimanente della voce di log.
-
Al parser corpo aggiungere un'istanza della funzione Dettagli intestazione e selezionare il parser intestazione definito nel passo 1.
-
Aggiungere il parser del corpo definito nel passo 2 a un'origine log e associare l'origine log a un'entità per avviare la raccolta log.
Visualizza l'argomento aggiuntivo: Gestione di più forme JSON in un singolo parser JSON
Per creare un parser JSON, effettuare le operazioni riportate di seguito.
-
Nel campo Parser, immettere il nome del parser. Ad esempio, immettere
Custom API Log
. -
Selezionare il tipo di parser come JSON.
-
Facoltativamente, fornire una descrizione appropriata al parser per facilitare l'identificazione.
-
Nel campo Contenuto log di esempio incollare i contenuti da un file di log che si desidera analizzare, ad esempio:
{ "name": "helloapi", "hostname": "banana.local", "pid": 40442, "level": 30, "req": { "method": "GET", "url": "/hello?name=paul", "headers": { "user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1/2/3", "host": "0.0.0.0:8080", "accept": "*/*" }, "remoteAddress": "127.0.0.1", "remotePort": 59834 }, "msg": "start", "time": "2012-03-28T17:39:44.880Z", "v": 0 }
In base al contenuto del log di esempio, i campi vengono selezionati e visualizzati nella scheda Campi, come nell'esempio riportato di seguito.
- Nella scheda Campi, per il percorso JSON specifico, selezionare il nome del campo dai campi definiti disponibili.
Per creare un nuovo campo, fare clic sull'icona
. Viene visualizzata la finestra di dialogo Crea campo definito dall'utente. Immettere i valori per Nome, Tipo di dati, Descrizione e utilizzare la casella di controllo Campo con più valori, se applicabile per i log. Per informazioni sui valori da immettere, vedere Creare un campo. Per rimuovere il campo selezionato nella riga, fare clic sull'icona
.
Il percorso radice predefinito selezionato è
$
. Se si desidera modificare il percorso radice JSON, espandere la sezione Opzioni avanzate e selezionare Percorso JSON voce di log dal menu. - Nella scheda Funzioni, fare clic su Aggiungi funzione per aggiungere facoltativamente una funzione alle voci del log di pre-elaborazione con la funzione parser intestazione. Vedere Immissioni log pre-elaborazione.
- Dopo aver selezionato i campi, andare alla scheda Test parser per visualizzare lo stato della corrispondenza e i campi selezionati dal contenuto del log di esempio.
- Fare clic su Salva per salvare il nuovo parser appena creato.
Per interrompere la creazione di un parser di tipo JSON e passare alla creazione di un parser di tipo regex, in Tipo, selezionare Regex.
Gestione di più forme JSON in un singolo parser JSON
Se per la stessa origine sono presenti più voci di log JSON con nodo radice $
, aggiungere tutti i log JSON di esempio al contenuto di esempio di un parser e mappare l'unione dei campi contenuti in tutti gli esempi.
Ad esempio, è possibile disporre di un parser JSON e di un'origine che utilizza tale parser. Si consideri che questo log può avere due forme. Inserire entrambe le voci del log di esempio (forme) nel campo Contenuto di esempio come indicato di seguito.
{ "key_A":value1, "key_B":value2, "key_C":value3, "key_E":value4, "key_F",value5 } { "key_A":value6, "key_B":value7, "key_D":value8, "key_G":value9, "key_H":value10 }
Quindi, nell'elenco dei campi del parser, è possibile visualizzare le chiavi key_A
, key_B
, key_C
, key_D
, key_E
, key_F
, key_G
e key_H
da mappare.
È possibile mappare queste chiavi ai campi come indicato di seguito.
Chiave | Campo |
---|---|
key_A |
Tempo |
key_B |
IP host (client) |
key_C |
Messaggio |
key_D |
Messaggio |
key_E |
Severità |
key_F |
Nome utente |
key_G |
Componente |
key_H |
Servizio |
Nell'esempio precedente, le chiavi JSON key_C
e key_D
vengono visualizzate in log diversi. Questi sono considerati reciprocamente esclusivi. In genere, key_C
e key_D
non vengono visualizzati insieme in una forma di log. In tal caso, entrambi possono essere mappati a un singolo campo Messaggio. Qualunque chiave corrisponda, viene memorizzata nel campo Messaggio.
Se key_C
e key_D
non si escludono a vicenda e in una terza forma di voce di log vengono visualizzati insieme sia key_C
che key_D
, nel campo primo viene memorizzato il Messaggio.
Crea parser tipo XML
-
Nel campo Parser, immettere il nome del parser. Ad esempio, immettere
Custom Database Audit Log
. -
Selezionare il tipo di parser come XML.
-
Facoltativamente, fornire una descrizione appropriata al parser per facilitare l'identificazione.
-
Nel campo Contenuto log di esempio incollare il contenuto di un file di log che si desidera analizzare, ad esempio il seguente ExampleA:
<AuditRecord><Audit_Type>1</Audit_Type><Session_ld>201073</Session_ld><Statementid>13</Statementid><Entryld>6</Entryld> <Extended_Timestamp>2016-09-09T01:26:07.832814Z</Extended_Timestamp><DB_User>SYSTEM</DB_User><OS_User>UserA</OS_User><Userhost>host1</Userhost> <OS_Process>25839</OS_Process><Terminal>pts/4</Terminal><Instance_Number>0</Instance_Number><Object_Schema>HR</Object_Schema> <Object_Name>EMPLOYEES</Object_Name><Action>17</Action> <Returncode>0</Returncode><Sen>§703187</Sen><AuthPrivileges>--------¥-----</AuthPrivileges> <Grantee>SUMON</Grantee> <Priv_Used>244</Priv_Used><DBID>2791516383</DBID><Sql_Text>GRANT SELECT ON hr.employees TO sumon</Sql_Text></AuditRecord>
In base al contenuto del log di esempio, Oracle Logging Analytics identifica automaticamente l'elenco degli elementi XML che rappresentano i record di log.
-
Facoltativamente, abilitare la casella di controllo Ignora spazio di nomi per ignorare lo spazio di nomi nel percorso XML.
-
Facoltativamente, abilitare la casella di controllo Abilita consapevolezza posizionale per rilevare più valori di un elemento in un percorso XML, ad esempio nel caso di un array di elementi. Ad esempio, per il seguente esempio, il contenuto del log ExampleB:
<ListOfTrackingFields> <TrackingField> <Name>NameA</Name> </TrackingField> <TrackingField> <Name>NameB</Name> </TrackingField> <TrackingField> <Name>NameC</Name> </TrackingField> <TrackingField> <Name>NameD</Name> </TrackingField> <TrackingField> <Name>NameE</Name> </TrackingField> </ListOfTrackingFields>
Se la consapevolezza della posizione non è abilitata, si sarebbe limitati al percorso XML
/ListOfTrackingFields/TrackingField/Name
, che rileverebbe solo il primo valore diName
. Se si abilita la consapevolezza posizionale, vengono rilevati i 5 valori seguenti diName
sotto l'elementoTrackingField
:NameA
,NameB
,NameC
,NameD
,NameE
, se sono configurati tutti i percorsi XML corrispondenti. -
Nel menu Percorso XML inserimento log selezionare l'elemento XML adatto per i record di log di interesse. Per il contenuto del log di esempio precedente ExampleA, selezionare
/AuditRecord
.In base alla selezione del percorso XML, i campi vengono selezionati e visualizzati nella scheda Campi. Nel contenuto del log di esempio precedente, gli elementi evidenziati si qualificano per i campi. Per il percorso XML di esempio
/AuditRecord
, il percorso XML del campo sarebbe/AuditRecord/<highlighted_element>
, ad esempio/AuditRecord/Audit_Type
. -
Nella scheda Campi, per il percorso XML specifico, selezionare il nome del campo dai campi definiti disponibili.
Per creare un nuovo campo, fare clic sull'icona
. Viene visualizzata la finestra di dialogo Crea campo definito dall'utente. Immettere i valori per Nome, Tipo di dati, Descrizione e utilizzare la casella di controllo Campo con più valori, se applicabile per i log. Per informazioni sui valori da immettere, vedere Creare un campo. Per rimuovere il campo selezionato nella riga, fare clic sull'icona
.
-
Dopo aver selezionato i campi, andare alla scheda Test parser per visualizzare lo stato della corrispondenza.
-
Fare clic su Salva per salvare il nuovo parser appena creato.
Per interrompere la creazione di un parser di tipo XML e passare alla creazione di un parser di tipo regex, in Tipo, selezionare Regex.
Crea parser tipo delimitato
-
Immettere il nome del parser. Ad esempio, immettere
Comma Separated Custom App Log
. -
Facoltativamente, fornire una descrizione appropriata al parser per facilitare l'identificazione.
-
Selezionare il tipo di parser come Delimitato.
-
In Delimitatore selezionare il tipo di delimitatore utilizzato nei log per separare i campi, ad esempio virgola, punto e virgola, spazio o scheda. Se è diverso dalle opzioni elencate, selezionare Altro e specificare il carattere delimitatore nello spazio fornito.
Considerare il contenuto del log di esempio riportato di seguito.
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z
Nell'esempio precedente, la virgola (
,
) è il delimitatore.Assicurarsi che il carattere Delimitatore specificato sia diverso dal qualificatore selezionato successivamente.
-
Facoltativamente, selezionare il Qualificatore utilizzato per il ritorno a capo del testo di un campo nei log. Selezionare Preventivo doppio o Preventivo singolo.
Il qualificatore di testo viene utilizzato quando i delimitatori sono contenuti nei dati del campo. Si consideri uno scenario in cui field1 ha il valore
host,local
che contiene un carattere delimitatore (,) e non viene utilizzato un qualificatore di testo. Quindi i dati che si verificano dopo il delimitatore (local
) saranno considerati come il valore del campo successivo.Nel contenuto del log di esempio del passo precedente, il qualificatore è rappresentato dalle virgolette (
"
).Nota
Per i valori dei campi della stringa del tipo di dati, anche il carattere di spazio prima e dopo il qualificatore verrà considerato come parte della stringa. Assicurarsi che il qualificatore sia posizionato a destra accanto al delimitatore in modo che il valore della stringa corrisponda. Ad esempio, in,"host,local",
viene rimosso lo spazio dopo il primo delimitatore. Inoltre, il carattere di spazio prima dell'ultimo delimitatore viene rimosso. Pertanto, il valore effettivo del campo stringa corrispondente èhost,local
, come si può vedere in seguito nel risultato del test del parser. -
Facoltativamente, in Intestazione incollare la riga di intestazione del log che può essere quindi mappata alla colonna di intestazione nella scheda Campi. Ad esempio:
name, hostname, pid, level, msg, time
Quando si specifica un'intestazione, vengono filtrate tutte le righe di log nei log effettivi che corrispondono esattamente all'intestazione.
-
Nel campo Contenuto log di esempio incollare i contenuti da un file di log che si desidera analizzare, ad esempio:
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880Z
In base al contenuto del log di esempio, i campi vengono selezionati e visualizzati nella scheda Campi, come nell'esempio riportato di seguito.
- Nella scheda Campi, per la colonna di intestazione, selezionare il nome del campo dai campi definiti disponibili. È tuttavia possibile mappare in modo selettivo solo le colonne di intestazione preferite e non è necessario mappare il campo per ogni colonna di intestazione.
Per creare un nuovo campo, fare clic sull'icona
. Viene visualizzata la finestra di dialogo Crea campo definito dall'utente. Immettere i valori per Nome, Tipo di dati, Descrizione e utilizzare la casella di controllo Campo con più valori, se applicabile per i log. Per informazioni sui valori da immettere, vedere Creare un campo. Per rimuovere il campo selezionato nella riga, fare clic sull'icona
.
- Dopo aver selezionato i campi, andare alla scheda Test parser per visualizzare lo stato della corrispondenza e i campi selezionati dal contenuto del log di esempio.
- Fare clic su Crea parser per salvare il nuovo parser appena creato.
Per interrompere la creazione di un parser di tipo delimitato e passare alla creazione di un tipo diverso di parser, selezionarlo in Tipo.
Mappare il campo base a un parser
Se il contenuto del log originale contiene informazioni aggiuntive, è possibile mappare il campo base che contiene il contenuto del log originale a un parser ed estrarre i campi nel record di log originale.
Consideriamo che il contenuto del log originale è come mostrato di seguito:
####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>
Quando lo stesso contenuto di log viene inviato prima a OCI Logging e poi tramite Hub connettore inviato a Oracle Logging Analytics, viene aggiunto un wrapper JSON al contenuto di log originale. Ad esempio:
{
"data": {
"Labels": "LogPath:/u01/APPLTOP/instance/wlslogs/FADomain/servers/ServiceServer_1/logs/ServiceServer_1.log;ServiceName:Host;ServiceType:Oracle_Host;LogSet:TEST_POD;HostName:examplehost.oraclecloud.com;IP:192.0.2.1;WLS:NA;Domain:NA;AppName:myApp;Customer:CompanyA, (U.S.) Corp;CustomerType:NonHypercare;PODType:TEST;PODSize:S0;DC:CDC;Version:11.13.20.10.0;",
"action": "ACTION",
"msg": "####<Feb 01, 2021 10:28:27 AM PST> <Info> <Diagnostics> <soaapps.example.com> <excstg_soa> <[ACTIVE] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <kernel_version> <123456> <[severity-value:64] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-320145> <Size based data retirement operation completed on archive HarvestedDataArchive. Retired 9,720 records in 11,242 ms.>"
},
"id": "123123123",
"oracle": {
"compartmentid": "ocid1.compartment.oc1..aaaaaaaauniqueID",
"ingestedtime": "2021-02-01T18:32:49.204Z",
"loggroupid": "ocid1.loggroup.oc1.iad.amaaaaaauniqueID",
"logid": "ocid1.log.oc1.iad.amaaaaaayuniqueID",
"tenantid": "ocid1.tenancy.oc1..aaaaaaaaetuniqueID"
},
"source": "FA-APPS",
"specversion": "1.0",
"time": "2021-02-01T11:48:43.091Z",
"type": "FA Unified Apps Logs"
}
Nell'esempio precedente, il contenuto del log originale è presente nel campo di base $.data.msg
.
Nell'esempio descritto, il contenuto del log dispone di un wrapper JSON. Tuttavia, è possibile seguire questi passi anche se il contenuto e i wrapper di log originali sono in qualsiasi formato di parser supportato e i log vengono inclusi in qualsiasi metodo supportato.
Per estrarre i campi nel contenuto del log originale, attenersi alla procedura riportata di seguito.
-
In base al tipo di contenuto del log originale, identificare o creare un parser per recuperare i campi pertinenti dal contenuto del log originale. Vedere Creare un parser.
Questo parser verrà utilizzato come parser mappato all'interno del parser wrapper che verrà creato in seguito.
-
In base al tipo di contenuto del wrapper, creare il parser corrispondente attenendosi alla procedura descritta in Crea un parser.
Questo parser verrà definito parser wrapper nei passi successivi.
-
Per il parser wrapper, fornire il contenuto del log di esempio con un wrapper sul contenuto del log originale.
Nel caso del parser JSON, il percorso radice predefinito selezionato è
$
. Se si desidera modificare il percorso radice JSON, espandere la sezione Opzioni avanzate e selezionare Percorso JSON voce di log dal menu. -
Nella scheda Campi corrispondente al campo di base che contiene il contenuto del log originale, fare clic sul menu Azioni
e selezionare Mappa campi tramite un parser. Viene visualizzata la finestra di dialogo in cui è possibile selezionare il parser.
Nell'esempio precedente, la riga per la quale è necessario aggiungere un parser mappato è
$.data.msg
.In un parser wrapper è possibile mappare un solo campo base a un parser mappato.
-
Nella finestra di dialogo Esegui mapping dei campi tramite un parser, selezionare il parser che utilizza i campi del campo base da estrarre.
Facoltativamente, selezionare una delle azioni
Base64 decode and unzip
oBase64 decode
da eseguire sul campo:- Base64 decodifica ed estrai: selezionare questa opzione se il campo base è un file zip con codifica Base64. Il campo base viene quindi decodificato e decompresso prima dell'applicazione del parser mappato. Poiché il campo base è un file zip codificato, l'applicazione del parser mappato determina l'identificazione di uno o più record di log. Questi record di log vengono visualizzati come Contenuto log originale in Esplora log. Tuttavia, il contenuto del log wrapper non viene visualizzato. Se il parser wrapper contiene mapping di campi, verranno visualizzati anche tali campi.
Questa azione può essere eseguita solo sui log raccolti utilizzando Management Agent.
- Base64 decode: selezionare questa opzione se il campo base è codificato in Base64 nel contenuto del log originale. Il campo base viene decodificato prima dell'applicazione del parser mappato. Inoltre,
- Utilizzare l'opzione Salva nel campo per salvare la stringa decodificata in un campo.
- Se si desidera salvare il valore del campo di base decodificato come Contenuto log originale in modo che venga visualizzato come record di log in Esplora log, selezionare l'opzione Sostituisci contenuto log originale. Se questa opzione è selezionata, il valore del campo base decodificato viene salvato nel campo Contenuto log originale e il contenuto del log wrapper viene salvato nel campo Testo RAW.
Fare clic su Mappa campi. La scheda Campi ora mostra che il campo di base è mappato al parser mappato selezionato e all'elenco di campi estratti.
È possibile che al parser mappato selezionato sia incluso anche un parser mappato. Oracle Logging Analytics supporta due livelli di parser mappati nidificati. Ad esempio, parser wrapper contiene parser-1 mappato contiene parser-2 mappato.
- Base64 decodifica ed estrai: selezionare questa opzione se il campo base è un file zip con codifica Base64. Il campo base viene quindi decodificato e decompresso prima dell'applicazione del parser mappato. Poiché il campo base è un file zip codificato, l'applicazione del parser mappato determina l'identificazione di uno o più record di log. Questi record di log vengono visualizzati come Contenuto log originale in Esplora log. Tuttavia, il contenuto del log wrapper non viene visualizzato. Se il parser wrapper contiene mapping di campi, verranno visualizzati anche tali campi.
-
Dopo aver selezionato i campi rimanenti, nella scheda Test parser eseguire il test del parser per verificare lo stato della corrispondenza e i campi selezionati dal contenuto del log di esempio.
Voci di log pre-elaborazione
Oracle Logging Analytics offre le funzioni riportate di seguito che consentono di pre-elaborare le voci di log e di arricchire le voci di log risultanti.
Per pre-elaborare le voci di log durante la creazione di un parser, fare clic sulla scheda Funzioni, quindi sul pulsante Aggiungi funzione.
Nella finestra di dialogo Aggiungi funzione risultante, immettere un nome per la funzione, selezionare la funzione richiesta e specificare i valori di campo rilevanti.
Per verificare il risultato dell'applicazione della funzione nel contenuto del log di esempio, fare clic su Test. Viene visualizzato un risultato comparativo che consente di determinare la correttezza dei valori dei campi.
Funzione dettagli intestazione
Questa funzione consente di integrare le voci di log con i campi dell'intestazione dei file di log. Questa funzione è particolarmente utile per i log che contengono un blocco di corpo come intestazione e quindi le voci nel corpo.
Questa funzione arricchisce ogni voce del corpo del log con i campi della voce del log dell'intestazione. Database Trace Files è uno degli esempi di questi log.
Per acquisire l'intestazione e i relativi campi corrispondenti per l'integrazione delle voci di log del corpo basate sul tempo, al momento della creazione del parser, selezionare il parser contenuto intestazione corrispondente nella finestra di dialogo Aggiungi funzione.
Esempi di parser contenuto intestazione espressioni regolari:
-
In questi tipi di log, l'intestazione viene visualizzata principalmente all'inizio del file di log, seguita da altre voci. Vedere quanto segue:
Trace file /scratch/emga/DB1212/diag/rdbms/lxr1212/lxr1212_1/trace/lxr1212_1_ora_5071.trc Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options ORACLE_HOME = /scratch/emga/DB1212/dbh System name: Linux Node name: slc00drj Release: 2.6.18-308.4.1.0.1.el5xen Version: #1 SMP Tue Apr 17 16:41:30 EDT 2012 Machine: x86_64 VM name: Xen Version: 3.4 (PVM) Instance name: lxr1212_1 Redo thread mounted by this instance: 1 Oracle process number: 35 Unix process pid: 5071, image: oracle@slc00drj (TNS V1-V3) *** 2020-10-12 21:12:06.169 *** SESSION ID:(355.19953) 2020-10-12 21:12:06.169 *** CLIENT ID:() 2020-10-12 21:12:06.169 *** SERVICE NAME:(SYS$USERS) 2020-10-12 21:12:06.169 *** MODULE NAME:(sqlplus@slc00drj (TNS V1-V3)) 2020-10-12 21:12:06.169 *** CLIENT DRIVER:() 2020-10-12 21:12:06.169 *** ACTION NAME:() 2020-10-12 21:12:06.169 2020-10-12 21:12:06.169: [ GPNP]clsgpnp_dbmsGetItem_profile: [at clsgpnp_dbms.c:345] Result: (0) CLSGPNP_OK. (:GPNP00401:)got ASM-Profile.Mode='legacy' *** CLIENT DRIVER:(SQL*PLUS) 2020-10-12 21:12:06.290 SERVER COMPONENT id=UTLRP_BGN: timestamp=2020-10-12 21:12:06 *** 2020-10-12 21:12:10.078 SERVER COMPONENT id=UTLRP_END: timestamp=2020-10-12 21:12:10 *** 2020-10-12 21:12:39.209 KJHA:2phase clscrs_flag:840 instSid: KJHA:2phase ctx 2 clscrs_flag:840 instSid:lxr1212_1 KJHA:2phase clscrs_flag:840 dbname: KJHA:2phase ctx 2 clscrs_flag:840 dbname:lxr1212 KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS *** 2020-10-12 21:12:39.222 Stopping background process SMCO *** 2020-10-12 21:12:40.220 ksimdel: READY status 5 *** 2020-10-12 21:12:47.628 ... KJHA:2phase WARNING!!! Instance:lxr1212_1 of kspins type:1 does not support 2 phase CRS
Per l'esempio precedente, utilizzando la funzione Dettagli intestazione, Oracle Logging Analytics arricchisce le voci di log del corpo basate sul tempo con i campi del contenuto dell'intestazione.
-
Osservare l'esempio di log seguente:
Server: prodsrv123 Application: OrderAppA 2020-08-01 23:02:43 INFO DataLifecycle Starting backup process 2020-08-01 23:02:43 ERROR OrderModule Order failed due to transaction timeout 2020-08-01 23:02:43 INFO DataLifecycle Backup process completed. Status=success 2020-08-01 23:02:43 WARN OrderModule Order completed with warnings: inventory on backorder
Nell'esempio precedente sono disponibili quattro voci di log che devono essere acquisite in Oracle Logging Analytics. Il nome del server e il nome dell'applicazione vengono visualizzati solo all'inizio del file di log. Per includere il nome del server e il nome dell'applicazione in ogni voce di log:
-
Definire un parser per l'intestazione che analizzerà i campi del server e dell'applicazione:
Server:\s*(\S+).*?Application:\s*(\S+)
-
Definire un secondo parser per analizzare il corpo rimanente del log:
{TIMEDATE}\s(\S+)\s(\S+)\s(.*)
-
Al parser corpo aggiungere un'istanza della funzione Dettagli intestazione e selezionare il parser intestazione definito nel passo 1.
-
Aggiungere il parser del corpo definito nel passo 2 a un'origine log e associare l'origine log a un'entità per avviare la raccolta log.
Sarà quindi possibile ottenere quattro voci di log con il nome del server e il nome dell'applicazione aggiunti a ciascuna voce.
-
Esempi di parser contenuto intestazione JSON:
Di seguito sono riportati alcuni esempi di vari casi per Header-Detail. Le voci del log dei dettagli sono integrate con i campi delle voci del log dell'intestazione. I campi evidenziati nella voce del log dei dettagli integrati sono i campi copiati dalla voce del log dell'intestazione.
-
PATH JSON: intestazione =
$
, dettagli =$.data
{ "id" : "id_ERROR1", "data": { "id" : "id_data_ERROR1", "childblock0": { "src": "127.0.0.1" }, "childblocks": [ { "childblock": { "srchost1": "host1_ERROR1" } }, { "childblock": { "srchost2": "host2_ERROR1" } } ], "hdr": { "time_ms": "2021-05-21T04:27:18.89714589Z", "error": "hdr_ERROR1" } }, "compartmentName": "comp_name_ERROR1", "eventName": "GetBucket_ERROR1" }
Voci di log estratte e integrate:
Voce log intestazione:
{"id":"id_ERROR1","compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1"}
Voce del log dei dettagli:
{"compartmentName":"comp_name_ERROR1","eventName":"GetBucket_ERROR1", "id": "id_data_ERROR1", "childblock0":{"src":"127.0.0.1"},"childblocks":[{"childblock":{"srchost1":"host1_ERROR1"}},{"childblock":{"srchost2":"host2_ERROR1"}}],"hdr":{"time_ms":"2021-05-21T04:27:18.89714589Z","error":"hdr_ERROR1"}}
Il campo
id
è disponibile sia nell'intestazione che nei dettagli. In questo caso il campo dei dettagli viene selezionato. -
PATH JSON: intestazione =
$.metadata
, dettagli =$.datapoints[*]
In questo esempio, il primo blocco ha sia l'intestazione che i dettagli, ma il secondo blocco ha solo la voce di log dei dettagli.
{ "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170000, "value":1.1, "count":11 }, { "timestamp":1652942171001, "value":1.2, "count":12 } ], "metadata":{ "displayName":"Get Messages 1", "unit":"count1" } } { "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170002, "value":2.1, "count":21 }, { "timestamp":1652942171003, "value":3.2, "count":32 } ] }
Voci di log estratte e integrate:
Voce log intestazione:
{"displayName":"Get Messages 1","unit":"count1"}
Voce del log dei dettagli:
{"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}
Voce del log dei dettagli:
{"displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}
Voce del log dei dettagli:
{"timestamp":1652942170002,"value":2.1,"count":21}
Voce del log dei dettagli:
{"timestamp":1652942171003,"value":3.2,"count":32}
-
PATH JSON: intestazione =
$.instanceHealths:[*]
, dettagli =$.instanceHealths[*].instanceHealthChecks[*]
{ "reportType": "Health Status Report 1", "instanceHealths": [ { "instanceHealthChecks": [ { "HealthCheckName": "Check-A1", "Result": "Passed", "time": "2022-11-17T06:05:01Z" }, { "HealthCheckName": "Check-A2", "Result": "Passed", "time": "2022-11-17T06:05:01Z" } ], "Datacenter-A" : "Remote A" } ] }
Voci di log estratte e integrate:
Voce log intestazione:
{"Datacenter-A":"Remote A"}
Voce del log dei dettagli:
{"Datacenter-A":"Remote A", "HealthCheckName":"Check-A1","Result":"Passed","time":"2022-11-17T06:05:01Z"}
Voce del log dei dettagli:
{"Datacenter-A":"Remote A", "HealthCheckName":"Check-A2","Result":"Passed","time":"2022-11-17T06:05:01Z"}
-
percorso JSON: Header1 =
$.dimensions
, Header2 =$.metadata
, dettagli =$.datapoints[*]
In questo esempio vengono applicate due intestazioni diverse.
{ "namespace":"oci_streaming", "resourceGroup":null, "name":"GetMessagesThroughput.Count1", "dimensions":{ "region":"phx1", "resourceId":"ocid1.stream.oc1.phx.1" }, "datapoints":[ { "timestamp":1652942170000, "value":1.1, "count":11 }, { "timestamp":1652942171001, "value":1.2, "count":12 } ], "metadata":{ "displayName":"Get Messages 1", "unit":"count1" } }
Voci di log estratte e integrate:
Voce di log Header1:
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1"}
Voce di log Header2:
{"displayName":"Get Messages 1","unit":"count1"}
Voce del log dei dettagli:
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942170000,"value":1.1,"count":11}
Voce del log dei dettagli:
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1", displayName":"Get Messages 1","unit":"count1", "timestamp":1652942171001,"value":1.2,"count":12}
-
percorso JSON: Header1 =
$.hdr1
, Header2 =$.hdr2
, dettagli =$.body
In questo caso, la voce di log dell'intestazione viene associata alla voce di log dei dettagli se entrambe si trovano nello stesso blocco.
{ "hdr1": { "module": "mod1", "error": "hdr1_error1" } } { "body": { "id": "data_id_ERROR2", "error": "body_ERROR2" } } { "hdr2": { "module": "mod3", "error": "hdr2_error3" } "body": { "id": "data_id_ERROR4", "error": "body_ERROR4" } }
Voci di log estratte e integrate:
Voce log intestazione:
{"id":"data_id_ERROR1","error":"hdr1_error1"}
Voce del log dei dettagli:
{"id":"data_id_ERROR2","error":"body_ERROR2"}
Voce log intestazione:
{"module":"mod3","error":"hdr2_error3"}
Voce del log dei dettagli:
{"module":"mod3", "id":"data_id_ERROR4","error":"body_ERROR4"}
Si noti che nella seconda voce del log Dettagli il valore di
error
viene selezionato dai dettagli quando lo stesso elemento è disponibile nell'intestazione e nei dettagli. -
PATH JSON: intestazione =
$
, Details1 =$.JDBC
, Details2 =$.THREADS
In questo caso, la voce di log a singola intestazione è associata a più voci di log dei dettagli:
{ "time": "2024-09-10T00:20:00", "instance": "GBOSBMXR1PR", "name": "gbosbmxr1pr_server_2", "JDBC": [ { "name":"XXAlsGoldXADS", "Status": "Running", "Url": "jdbc:oracle:thin:@PSOAPR1" } ], "THREADS": [ { "name": "[HOGGING][ACTIVE] ExecuteThread 56 ", "WORKMGR": "OneWayJTACoordinatorWM", "CATEGORY": "Internal", "APPNAME": "None" } ] }
Voci di log estratte e integrate:
Voce di log dell'intestazione (applicata alle voci di log dei dettagli riportate di seguito):
{ "time": "2024-09-10T00:20:00", "instance": "GBOSBMXR1PR", "name": "gbosbmxr1pr_server_2" }
Voce del log dei dettagli:
{ "name":"XXAlsGoldXADS", "Status": "Running", "Url": "jdbc:oracle:thin:@PSOAPR1" }
Voce del log dei dettagli:
{ "name": "[HOGGING][ACTIVE] ExecuteThread 56 ", "WORKMGR": "OneWayJTACoordinatorWM", "CATEGORY": "Internal", "APPNAME": "None" }
Trova funzione di sostituzione
Questa funzione consente di estrarre il testo da una riga di log e di aggiungerlo ad altre righe di log in modo condizionale in base a determinati pattern. Ad esempio, è possibile utilizzare questa funzionalità per aggiungere indicatori orari mancanti ai log di query generali e lenti MySQL.
La funzione find-replace dispone dei seguenti attributi:
-
Espressione regolare di recupero: l'espressione regolare corrispondente a ogni riga di log e il testo del gruppo denominato dell'espressione regolare corrispondente viene salvata in memoria per essere utilizzata nell'espressione di sostituzione.
-
Se l'espressione Catch corrisponde a una riga completa, l'espressione Sostituisci non verrà applicata alla riga di log successiva. Questo per evitare di avere la stessa linea due volte nei casi in cui si desidera anteporre una linea mancante.
-
Una riga corrispondente all'espressione Catch non verrà elaborata per l'espressione Find. Non è pertanto possibile eseguire un'operazione di ricerca e sostituzione nella stessa riga di log.
-
È possibile specificare più gruppi con nomi diversi.
-
-
Trova espressione regolare: questa espressione regolare specifica il testo da sostituire con il testo corrispondente ai gruppi denominati nell'espressione Catch nelle righe di log.
-
Il pattern da abbinare deve essere raggruppato.
-
L'espressione Find non viene eseguita sulle righe che corrispondono all'espressione catch. Non è pertanto possibile eseguire un'operazione di ricerca e sostituzione nella stessa riga di log.
-
L'espressione Find può avere più gruppi. Il testo corrispondente in ciascun gruppo verrà sostituito dal testo creato dall'espressione di sostituzione.
-
-
Sostituisci espressione regolare: questa notazione personalizzata indica il testo per sostituire i gruppi trovati in Trova espressione. I nomi dei gruppi devono essere racchiusi tra parentesi.
-
Il nome del gruppo deve essere racchiuso tra parentesi.
-
È possibile includere il testo statico.
-
Il testo creato dall'espressione di sostituzione sostituirà il testo corrispondente in tutti i gruppi dell'espressione di ricerca.
-
Fare clic sull'icona ? accanto ai campi Interrompi espressione regolare, Trova espressione regolare e Sostituisci espressione regolare per visualizzare la descrizione del campo, dell'espressione campione, del contenuto di esempio e dell'azione eseguita. Per aggiungere altre espressioni Catch, fare clic su Aggiungi espressione in Interrompi espressione regolare.
Esempi:
- L'obiettivo di questo esempio è quello di ottenere l'indicatore orario dalla riga di log contenente il testo
# Time:
e aggiungerlo alle righe di log che fissano con# User@Host
senza indicatore orario.Considerare i seguenti dati di log:
# Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 1 # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1 select @@version_comment limit 1; # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2 SET timestamp=1454579783; SELECT DATABASE();
I valori degli attributi Espressione regolare di recupero, Trova espressione regolare e Sostituisci espressione regolare possono essere:
-
Il valore Espressione regolare catch per corrispondere alla riga di log dell'indicatore orario e salvarla nella memoria con il nome timestr è
^(?<timestr>^# Time:.*)
. -
Il valore Trova espressione regolare per trovare le righe a cui deve essere anteposta la riga di log dell'indicatore orario è
(^)# User@Host:.*
. -
Il valore Sostituisci espressione regolare per sostituire l'inizio delle righe di log che contengono l'indicatore orario mancante è
(timestr)
.
Dopo aver aggiunto la funzione find-replace, si noterà la seguente modifica nelle righe di log:
# Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 1 # Query_time: 0.001320 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1 select @@version_comment limit 1; # Time: 160201 1:55:58 # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 2 SET timestamp=1454579783; SELECT DATABASE();
Nel risultato precedente dell'esempio, è possibile notare che la funzione find-replace ha inserito l'indicatore orario prima della voce
User@host
in ogni riga di log rilevata durante la pre-elaborazione del log. -
-
L'obiettivo di questo esempio è quello di acquisire più parametri e sostituirli in più posizioni nei dati di log.
Considerare i seguenti dati di log:
160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 160203 21:23:54 Child process "proc2" - 160203 21:23:54 Child process "proc3" -
Nelle righe di log precedenti, la seconda e la terza riga non contengono i dati utente. Pertanto, la funzione find-replace deve selezionare i valori dalla prima riga del log e sostituire i valori nella seconda e nella terza riga.
I valori degli attributi Espressione regolare di recupero, Trova espressione regolare e Sostituisci espressione regolare possono essere:
-
The Catch Regular Expression value to obtain the
foo
andinit
users info from the first log line and save it in the memory with the parameters user1 and user2 is^.*?owner\s+(?<user1>\w+)\s*,\s*.*?parent\s+(?<user2>\w+).*
. -
Il valore Trova espressione regolare per trovare le righe con il carattere trattino (
-
) è.*?(-).*
. -
Il valore Sostituisci espressione regolare è
, owner (user1), UNKNOWN, parent (user2)
.
Dopo aver aggiunto la funzione find-replace, si noterà la seguente modifica nelle righe di log:
160203 21:23:54 Child process "proc1", owner foo, SUCCESS, parent init 160203 21:23:54 Child process "proc2", owner foo, UNKNOWN, parent init 160203 21:23:54 Child process "proc3", owner foo, UNKNOWN, parent init
Nel risultato precedente dell'esempio, si può notare che la funzione find-replace ha inserito le informazioni user1 e user2 al posto della voce di carattere trattino (
-
) in ogni riga di log rilevata durante la pre-elaborazione del log. -
Funzione offset orario
Per alcuni record di log mancherà l'indicatore orario, altri avranno solo l'offset temporale e altri ancora non avranno nessuno dei due. Oracle Logging Analytics estrae le informazioni necessarie e assegna l'indicatore orario a ogni record di log.
Di seguito sono riportati alcuni scenari e le soluzioni corrispondenti per l'assegnazione dell'indicatore orario mediante la funzione di offset temporale.
Contenuto log di esempio | Scenario | Soluzione |
---|---|---|
|
Il file di log contiene l'indicatore orario nei log iniziali e gli offset vengono visualizzati in un secondo momento. |
Selezionare l'indicatore orario dai record di log iniziali e assegnarlo ai record di log successivi rettificati in base agli offset ore. |
|
Il file di log contiene log iniziali con offset temporali e nessun log indicatore orario precedente. |
Selezionare l'indicatore orario dai record di log successivi e assegnarlo ai record di log precedenti modificati in base agli offset ore. Quando l'offset temporale viene reimpostato tra, ovvero in un record di log si verifica un offset temporale più piccolo, viene corretto considerando come riferimento l'indicatore orario del record di log precedente. |
|
Il file di log contiene record di log con solo offset ore e nessun indicatore orario. |
indicatore orario dall'ora dell'ultima modifica: dopo aver attraversato tutti i record di log, l'indicatore orario viene calcolato sottraendo l'offset temporale calcolato dall'ora dell'ultima modifica del file. indicatore orario da nome_file: quando questa opzione è selezionata nell'interfaccia utente, l'indicatore orario viene selezionato dal nome del file nel formato specificato dall'espressione indicatore orario. |
Gli intervalli di tempo delle voci di log saranno relativi all'indicatore orario corrispondente in precedenza. Si fa riferimento a questo indicatore orario come indicatore orario di base in questo documento.
Utilizzare la funzione di offset orario del parser per estrarre l'indicatore orario e l'offset dell'indicatore orario dai record di log. Nella finestra di dialogo Aggiungi funzione:
-
Dove trovare l'indicatore orario?: per specificare da dove deve essere selezionato l'indicatore orario, selezionare Nome file, Ora ultima modifica file e Voce di log. Per impostazione predefinita, è selezionato Nome file.
Se questa opzione non viene specificata, la ricerca dell'indicatore orario viene eseguita nel seguente ordine:
- Esaminare i record di log e cercare una corrispondenza con il parser indicatore orario, che verrà specificato nel passo successivo.
- Selezionare il file ora dell'ultima modifica come indicatore orario.
- Se l'ora dell'ultima modifica non è disponibile per il file, selezionare l'ora di sistema come indicatore orario.
- Cercare una corrispondenza con l'espressione dell'indicatore orario nel nome file, che verrà specificata nel passo successivo.
-
In base alla selezione dell'origine dell'indicatore orario, specificare i seguenti valori:
- Se nel passo 1 è stato selezionato Nome file:
Espressione indicatore orario: specificare l'espressione regolare per trovare l'indicatore orario nel nome del file. Per impostazione predefinita, utilizza la direttiva
{TIMEDATE}
.Nome file di esempio: specificare il nome del file di un log di esempio che può essere utilizzato per eseguire il test delle impostazioni precedenti.
-
Se nel passo 1 è stata selezionata l'opzione Ora ultima modifica file, selezionare Ora ultima modifica file di esempio.
-
Se nel passo 1 è stata selezionata l'opzione Voce di log, selezionare il parser dal menu Parser indicatore orario per specificare il formato dell'indicatore orario.
- Se nel passo 1 è stato selezionato Nome file:
-
Espressione offset indicatore orario: specificare l'espressione regolare per estrarre l'offset temporale in secondi e millisecondi per assegnare l'indicatore orario a un record di log. Sono supportati solo i gruppi
sec
emsec
. Ad esempio,(?<sec>\d+)\.(?<msec>\d+)
.Si consideri il record di log di esempio riportato di seguito.
15.225 hostA debug services started
L'espressione di offset di esempio seleziona
15
secondi e225
millisecondi come offset temporale dal record di log. -
Dopo le selezioni effettuate nei passi precedenti, il contenuto del log viene visualizzato nel campo Log di esempio.
Fare clic su Test per eseguire il test delle impostazioni.
È possibile visualizzare il confronto tra il contenuto del log originale e il tempo calcolato in base alle specifiche.
-
Per salvare la funzione di offset temporale sopra riportata, fare clic su Aggiungi.