Creare un parser
Creando un parser, si definisce 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 Observability & Management. In Log Analytics, fare clic su Amministrazione.
-
Le risorse di amministrazione sono elencate nel riquadro di navigazione a sinistra in Amministrazione. Fare clic su Parser.
- Nella pagina Parser fare clic su Crea.
- Selezionare tra le opzioni Tipo regex, Tipo JSON, Tipo XML o Tipo delimitato.
Viene visualizzata la pagina Crea parser.
In caso di Tipo di regex, per impostazione predefinita viene visualizzata la pagina Crea parser in modalità Guidata. Continuare in questa modalità se si desidera che Oracle Log 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 Log Analytics fornisce molti parser definiti da Oracle per le origini log, ad esempio i log di dump Hotspot Java, 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 all'elenco completo dei parser e delle origini log supportati dall'interfaccia utente di Oracle Log 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 barra di ricerca. 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 modificare, se necessario.
-
Modifica: viene visualizzata la finestra di dialogo Modifica parser. È possibile modificare le proprietà del parser qui.
-
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 Log Analytics in più aree, è possibile esportare e importare di nuovo il contenuto della configurazione del parser. È inoltre possibile utilizzare questa opzione se si desidera memorizzare una copia delle definizioni all'esterno di Oracle Log Analytics. Vedere Importa ed esporta contenuto configurazione.
-
Elimina: potrebbe essere necessario eliminare alcuni dei parser precedenti o inutilizzati. Per eliminare il parser, confermare nella finestra di dialogo Elimina parser. È 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.
Gestione dell'ora di inserimento log nel parser
Esistono due modi per analizzare l'ora della voce di log da una voce di log. Per i parser di espressioni regolari, è possibile analizzare i componenti orari quali giorno, mese, ora, minuto e così via. In alternativa è possibile utilizzare la macro TIMEDATE che tenta di rilevare e analizzare automaticamente il formato dell'ora e della data.
-
Parcheggio del tempo mediante componenti orari - Disponibile solo per i parser di tipi di espressioni regolari:
Per la raccolta dei log basata sugli agenti, questo tipo di analisi viene eseguito sul lato cloud. Quindi l'uso della CPU è il minimo sul loro host.
I campi riportati di seguito sono disponibili come componenti orari da utilizzare nel parser del tipo di espressione regolare. È possibile estrarre i campi pertinenti dalla voce di log e mapparli a ciascuno dei campi sottostanti corrispondenti:
Nome campo Tipo di dati Descrizione AM/PM Stringa Indica se l'ora è AM o PM nell'ora di inserimento del log Day Lungo Componente giorno dell'ora di inserimento log Ora (formato 12 ore) Lungo Componente Ora (formato 12 ore) dell'ora di inserimento del log Ora (formato 24 ore) Lungo Componente Ora (formato 24 ore) dell'ora di inserimento del log Millisecondi Lungo Componente in millisecondi dell'ora di inserimento log Minuto Lungo Componente in minuti dell'ora di inserimento log Mese (nome lungo) Stringa Componente relativo al mese dell'ora di immissione del log con nome esteso. Esempio: January.Mese (numero) Lungo Componente mensile dell'ora di inserimento log come numero da 1-12Mese (abbreviazione) Stringa Componente mensile dell'ora di inserimento del log come nome breve, ad esempio Jan.Second Lungo Secondo componente dell'ora di inserimento log Ora Indicatore orario Ora e data della voce di log, ad esempio Jan 1, 2000 13:01:01:000 UTC.Fuso orario Stringa Valore del fuso orario memorizzato nell'ora di registrazione, ad esempio PST,EST,UTCe così via.Differenza fuso orario Stringa Offset del fuso orario memorizzato nell'ora di inserimento del log, ad esempio -8:00.Anno (2 cifre) Lungo Componente anno dell'ora di inserimento log con 2 cifre Anno (4 cifre) Lungo Componente anno dell'ora di inserimento log con 4 cifre -
Quando Oracle Log Analytics inserisce e analizza i log, viene creato un nuovo campo
Timee tutti i valori dei componenti vengono accumulati insieme per creare il valore per tale campoTime. -
Se nella voce di log mancano valori di granularità inferiore quali minuto, secondo o millisecondo, vengono impostati 0. Se mancano valori di granularità più grandi necessari per l'analisi, ad esempio anno o mese, Oracle Log Analytics tenta di determinare il valore più probabile possibile utilizzando le euristiche disponibili, ad esempio il fuso orario dell'host, l'ora dell'ultima modifica del file e così via. Ad esempio, se il mese corrente è febbraio 2026 e un log viene incluso per il marzo senza un anno, Oracle Log Analytics potrebbe determinare che l'anno è 2025 in assenza di altre informazioni. 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 quando si includono i log mediante il caricamento su richiesta o il Management Agent. Vedere Carica log su richiesta e Imposta raccolta di log continua mediante Management Agent.
-
Quando una voce di log non dispone di un indicatore orario, il parser crea e visualizza l'indicatore orario in base all'ora di raccolta dei dati di log.
-
Quando un record di log contiene un indicatore orario, ma il fuso orario non è definito, il parser utilizza il fuso orario del Management Agent.
Quando si utilizza Management Agent, se il fuso orario non viene rilevato correttamente, è possibile impostare manualmente il fuso orario nei file di configurazione dell'agente. Vedere Specifica manuale del fuso orario e della codifica dei caratteri per i file.
Quando si caricano i log utilizzando il caricamento su richiesta, è possibile specificare il fuso orario insieme al caricamento per forzare il fuso orario se non è possibile rilevarlo correttamente. Se si utilizza l'interfaccia CLI, vedere Riferimento riga di comando: Log Analytics - Caricamento. Se si utilizza l'API REST, vedere API Log Analytics - Caricamento.
-
Quando un file di log contiene record di log con più fusi orari, il parser può supportare fino a 11 fusi orari.
-
Quando un file di log visualizza alcune voci di log con un fuso orario e altre senza, il parser utilizza il fuso orario trovato in precedenza per quelle che mancano di un fuso orario.
-
Quando si inseriscono i log mediante Management Agent, se il fuso orario o l'offset del fuso orario non sono indicati nei record di log, Oracle Log Analytics confronta l'ora dell'ultima modifica del sistema operativo con l'indicatore orario dell'ultima voce di log per determinare il fuso orario appropriato.
-
-
Parcheggio dell'ora e della data mediante la macro
TIMEDATE:-
Oracle Log Analytics offre anche la possibilità di consentire che tenti automaticamente di determinare l'ora di inserimento del log utilizzando la macro
TIMEDATE.Per utilizzare la macro
TIMEDATE, utilizzarla nell'espressione regolare, come mostrato nell'esempio seguente, in cui si sostituisce l'intera posizione in cui si trovano l'ora effettiva, i dati e qualsiasi fuso orario, i dettagli di offset del fuso orario con{TIMEDATE}.Voce di log di esempio:
2005-Aug-05 12:45:23,123 AM PST Host1 system:Sample log entryEsempio di espressione regolare:
{TIMEDATE}\s+([^\s]+)\s+([^:]+):\s+(.*)In tal caso, l'espressione iniziale della voce è
{TIMEDATE}\s+. -
Per i parser di tipo JSON, XML e CSV, quando si assegna un campo nella voce di log a qualsiasi campo Oracle Log Analytics di tipo dati timestamp, viene utilizzata automaticamente la macro
TIMEDATE. -
Il campo
Timeviene sempre utilizzato per l'ora di inserimento del log. -
Se ad alcune voci di log non è assegnato un anno, Oracle Log 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 quando si includono i log mediante il caricamento su richiesta o il Management Agent. Vedere Carica log su richiesta e Imposta raccolta di log continua mediante Management Agent.
-
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 Log Analytics.
-
Per la raccolta dei log basata su agente, quando si utilizza la macro
TIMEDATEper l'analisi del tempo, l'analisi viene eseguita sul lato agente. Quindi utilizza più CPU sul lato agente. Pertanto, si consiglia di utilizzare i componenti orario quando si sa che il formato è sempre lo stesso. La macroTIMEDATEviene utilizzata quando il formato dell'ora viene modificato all'interno del file di log o quando il formato dell'ora è sconosciuto prima della scrittura del parser.
-
Crea parser tipo espressione regolare
Per impostazione predefinita, viene visualizzata la pagina Crea parser in modalità guidata. Continuare in questa modalità se si desidera che Oracle Log 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.
-
Immettere il nome del parser nel campo Nome. Ad esempio, immettere
Custom Audit Logs. -
Facoltativamente, fornire una descrizione appropriata al parser per una facile identificazione.
-
Nel campo Contenuto log di esempio incollare il contenuto di 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 Espressione regolare di analisi 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 visualizza 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 dell'espressione regolare finale per raccogliere il record di log. Le stesse regole di formato si applicano per l'espressione finale di quella dell'espressione Entry Start.
Se necessario, selezionare la casella di controllo Gestione dell'intero file come singola voce di log. Questa opzione consente di analizzare e memorizzare un intero file di log come una singola voce di log. Ciò è particolarmente utile durante l'analisi delle origini di log come i log di dump Hotspot Java, l'elenco RPM dei log dei pacchetti e così via. Se la voce di log contiene molto testo da cercare, è possibile scegliere di 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. Se abilitata, è possibile visualizzare il contenuto del log originale con il testo RAW.
-
Nella scheda Campi selezionare il campo pertinente in cui memorizzare ogni 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 come 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 di 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 nell'ordine seguente:
- Mese (breve nome)
- Day
- Anno (4 cifre)
- Nome host (server)
- Servizio
- Messaggio
-
-
Nella scheda Funzioni fare clic su Aggiungi funzione per aggiungere facoltativamente una funzione alle voci di log di pre-elaborazione. Vedere Voci di log pre-elaborazione.
-
Fare clic sulla scheda Test del parser per visualizzare il modo in cui il parser appena creato estrae i valori dal contenuto del log.
È possibile visualizzare le voci di 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 di corrispondenza indica quale parte dell'espressione ha funzionato in verde e la parte non riuscita in rosso. Ciò consente di identificare la parte dell'espressione regolare da correggere.
È 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 richiede troppi passi, potrebbe comportare un uso maggiore della CPU sull'host dell'agente e un'elaborazione dei log più lenta. Ciò ritarderà la disponibilità delle voci di log in Log Explorer. In casi estremi in cui l'espressione regolare è troppo costosa, saltiamo l'analisi della voce di log e di tutte le altre voci raccolte nello stesso periodo di raccolta.
Se l'espressione regolare non riesce, accanto al pulsante Esegui test viene visualizzata l'icona LoganAI
. Tenere presente che l'icona viene visualizzata solo se l'amministratore ha abilitato LoganAI per la tenancy e l'area correnti. Fare clic su questa icona per ricevere il suggerimento da LoganAI per correggere l'espressione regolare. LoganAI genera una nuova espressione regolare che potrebbe funzionare per l'utente. Fornisce un confronto tra le espressioni vecchie e nuove. È possibile selezionare Accetta suggerimento per utilizzare l'espressione regolare suggerita da LoganAI, in base alla quale la vecchia espressione regolare viene sostituita con la nuova espressione regolare e il test del parser viene eseguito di nuovo automaticamente. In caso contrario, è possibile fare di nuovo clic sull'icona per utilizzare LoganAI per generare l'espressione regolare. La nuova espressione regolare potrebbe non essere uguale a quella suggerita in precedenza da LoganAI.
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, tutti gli avanzamenti già eseguiti nella creazione del parser di tipo Regex andranno persi.
Crea parser tipo JSON
Se ciascuna voce di log non contiene i dati di log contestuali/di intestazione, è possibile arricchire 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 sull'intestazione specificando una funzione di dettaglio dell'intestazione effettuando le operazioni riportate di seguito.
-
Creare innanzitutto un parser di contenuto di intestazione fornendo il contenuto di log di esempio utilizzando il quale è possibile identificare il percorso JSON per raccogliere le informazioni di intestazione.
-
Definire un secondo parser per analizzare il corpo rimanente della voce di log.
-
Al parser del corpo, aggiungere un'istanza della funzione Dettagli intestazione e selezionare il parser di 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.
Vedere un argomento aggiuntivo: Gestione di più forme JSON in un singolo parser JSON
Per creare un parser JSON:
-
Immettere il nome del parser nel campo Parser. Ad esempio, immettere
Custom API Log. -
Selezionare il tipo di parser come JSON.
-
Facoltativamente, fornire una descrizione appropriata al parser per una facile identificazione.
-
Nel campo Contenuto log di esempio incollare il contenuto di 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 come 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 il percorso JSON voce di log dal menu. - Nella scheda Funzioni fare clic su Aggiungi funzione per aggiungere facoltativamente una funzione alle voci di log di pre-elaborazione con la funzione parser intestazione. Vedere Voci di log pre-elaborazione.
- Dopo aver selezionato i campi, andare alla scheda Test del 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 sono presenti più voci di log JSON con nodo radice $ per la stessa origine, 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. Tenere presente 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 |
Ora |
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 questo caso, entrambi possono essere mappati a un singolo campo Messaggio. La chiave corrispondente 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 sia key_C che key_D, il campo primo viene memorizzato nel campo Messaggio.
Crea parser tipo XML
-
Immettere il nome del parser nel campo Parser. Ad esempio, immettere
Custom Database Audit Log. -
Selezionare il tipo di parser XML.
-
Facoltativamente, fornire una descrizione appropriata al parser per una facile 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 Log 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 posizione per rilevare più valori di un elemento in un percorso XML, come nel caso di array di elementi. Ad esempio, per il contenuto del log di esempio 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 di posizione non è abilitata, si è limitati al percorso XML
/ListOfTrackingFields/TrackingField/Name, che rileva solo il primo valore diName. Se si abilita la consapevolezza di posizione, vengono rilevati i seguenti 5 valori diNamenell'elementoTrackingField:NameA,NameB,NameC,NameD,NameE, se sono configurati tutti i percorsi XML corrispondenti. -
Nel menu Percorso XML voce di log, selezionare l'elemento XML adatto per i record di log di interesse. Per il contenuto di log dell'esempio precedente ExampleA, selezionare
/AuditRecord.In base alla selezione del percorso XML, i campi vengono selezionati e visualizzati nella scheda Campi. Nell'esempio precedente il contenuto del log, gli elementi evidenziati si qualificano per i campi. Per il percorso XML di esempio
/AuditRecord, il percorso XML del campo è/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 come 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 di tipo delimitato
-
Immettere il nome del parser. Ad esempio, immettere
Comma Separated Custom App Log. -
Facoltativamente, fornire una descrizione appropriata al parser per una facile identificazione.
-
Selezionare il tipo di parser Delimitato.
-
In Delimitatore, selezionare il tipo di delimitatore utilizzato nei log per separare i campi, ad esempio comma, punto e virgola, spazio o scheda. Se è diverso dalle opzioni elencate, selezionare Altro e specificare il carattere delimitatore nello spazio fornito.
Prendere in considerazione il contenuto del log di esempio riportato di seguito.
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880ZNell'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,localche contiene un carattere delimitatore (,) e un qualificatore di testo non viene utilizzato. Quindi i dati che si verificano dopo il delimitatore (local) verranno considerati come il valore del campo successivo.Nel contenuto di log di esempio del passo precedente, il qualificatore è il doppio apice (
").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 proprio accanto al delimitatore in modo che il valore della stringa corrisponda. Ad esempio, in,"host,local",, il carattere di spazio dopo il primo delimitatore viene rimosso. Inoltre, viene rimosso il carattere di spazio prima dell'ultimo delimitatore. Pertanto, il valore effettivo del campo stringa corrispondente èhost,local, come si può vedere nel risultato del test del parser in seguito. -
Facoltativamente, in Intestazione incollare la riga di intestazione del log che può essere mappata alla Colonna intestazione nella scheda Campi. Ad esempio:
name, hostname, pid, level, msg, timeQuando si specifica un'intestazione, tutte le righe di log nei log effettivi che corrispondono esattamente all'intestazione vengono filtrate.
-
Nel campo Contenuto log di esempio incollare il contenuto di un file di log che si desidera analizzare, ad esempio:
helloapi,"host,local", 65427, 29, start, 2021-08-28T17:39:44.880ZIn 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 eseguire il mapping selettivo solo per 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 come 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 del 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.
Mappa 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 sia 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 Log 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.
Tenere presente che nell'esempio descritto il contenuto del log dispone di un wrapper JSON. Tuttavia, è possibile eseguire queste operazioni anche se il contenuto e i wrapper del log originale 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, effettuare le operazioni riportate di seguito.
-
In base al tipo di contenuto del log originale, identificare o creare un parser per prelevare 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 successivamente.
-
In base al tipo di contenuto del wrapper, creare il parser seguendo la procedura descritta in Crea parser.
Questo parser verrà definito parser wrapper nei passi successivi.
-
Per il parser wrapper, fornire un esempio di contenuto di log con wrapper sul contenuto del log originale.
In caso di parser JSON, il percorso radice predefinito selezionato è
$. Se si desidera modificare il percorso radice JSON, espandere la sezione Opzioni avanzate e selezionare il percorso JSON voce di log dal menu. -
Nella scheda Campi, corrispondente al campo di base con il contenuto di 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 unzipoBase64 decodeda 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 il parser mappato selezionato includa anche un parser mappato. Oracle Log Analytics supporta due livelli di parser mappati nidificati. Ad esempio, Wrapper-parser contiene mapped-parser-1 contenente mapped-parser-2.
- 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 del parser eseguire il test del parser per verificare che lo stato della corrispondenza e i campi selezionati dal contenuto del log di esempio.
Voci log pre-elaborazione
Oracle Log Analytics fornisce le seguenti funzioni che consentono di pre-elaborare le voci di log e arricchire le voci di log risultanti:
Per preelaborare le voci di log durante la creazione di un parser, fare clic sulla scheda Funzioni, quindi fare clic 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 pertinenti.
Per testare il risultato dell'applicazione della funzione sul 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 dettaglio intestazione
Questa funzione consente di arricchire 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 voci nel corpo.
Questa funzione arricchisce ogni voce del corpo del log con i campi della voce del log di intestazione. Database Trace Files è uno degli esempi di tali log.
Per acquisire l'intestazione e i campi corrispondenti per l'arricchimento 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 del contenuto dell'intestazione di espressioni regolari:
-
In questi tipi di log, l'intestazione appare principalmente da qualche parte all'inizio nel file di log, seguito da altre voci. Vedere quanto riportato di seguito.
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 CRSNell'esempio precedente, utilizzando la funzione Dettagli intestazione, Oracle Log Analytics arricchisce le voci del 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 backorderNell'esempio precedente sono disponibili quattro voci di log che devono essere acquisite in Oracle Log 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, effettuare le operazioni riportate di seguito.
-
Definire un parser per l'intestazione che analizzerà i campi server e 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 del corpo, aggiungere un'istanza della funzione Dettagli intestazione e selezionare il parser di 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 di log dei dettagli vengono integrate con i campi delle voci di log dell'intestazione. I campi evidenziati nella voce di log dei dettagli integrati sono i campi copiati dalla voce di 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 di log dell'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. Il campo dai dettagli viene prelevato in questo caso. -
PATH JSON: intestazione =
$.metadata, dettagli =$.datapoints[*]In questo esempio, il primo blocco contiene sia l'intestazione che i dettagli, mentre il secondo blocco contiene 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 di log dell'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} -
JSON PATH: 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 di log dell'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"} -
PATH 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 del log Header1:
{"region":"phx1","resourceId":"ocid1.stream.oc1.phx.1"}Voce del 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} -
PATH JSON: Header1 =
$.hdr1, Header2 =$.hdr2, Dettagli =$.bodyIn questo caso, la voce di log dell'intestazione è associata alla voce di log dei dettagli se entrambi 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 di log dell'intestazione:
{"id":"data_id_ERROR1","error":"hdr1_error1"}Voce del log dei dettagli:
{"id":"data_id_ERROR2","error":"body_ERROR2"}Voce di log dell'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 di log Dettagli il valore di
errorviene prelevato dai dettagli quando lo stesso elemento è disponibile nell'intestazione e nei dettagli. -
PATH JSON: intestazione =
$, Details1 =$.JDBC, Details2 =$.THREADSIn questo caso, una singola voce di log di intestazione è associata a più voci di log di dettaglio:
{ "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 seguenti):
{ "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 aggiungerlo ad altre righe di log in modo condizionale in base a determinati pattern. Ad esempio, è possibile utilizzare questa funzionalità per aggiungere gli indicatori orari mancanti ai log delle query generali e lenti di MySQL.
La funzione find-replace ha i seguenti attributi:
-
Espressione regolare corrispondente: l'espressione regolare corrispondente a ogni riga di log e al testo del gruppo denominato dell'espressione regolare corrispondente viene salvata in memoria da utilizzare nell'espressione di sostituzione.
-
Se l'espressione catch corrisponde a una riga completa, l'espressione replace 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. Pertanto, non è 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 corrispondenti all'espressione catch. Pertanto, non è 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 nell'espressione Trova. 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 Espressione regolare recupero, Trova espressione regolare e Sostituisci espressione regolare per visualizzare la descrizione del campo, dell'espressione di esempio, del contenuto di esempio e dell'azione eseguita. Per aggiungere altre espressioni Catch, fare clic su Aggiungi espressione in Espressione regolare Catch.
Esempi:
- L'obiettivo di questo esempio è ottenere l'indicatore orario dalla riga di log contenente il testo
# Time:e aggiungerlo alle righe di log con# User@Hostsenza indicatore orario.Considerare i dati di log indicati di seguito.
# 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 recupero, Trova espressione regolare e Sostituisci espressione regolare possono essere i seguenti:
-
Il valore Catch Regular Expression deve corrispondere alla riga di log dell'indicatore orario e salvarlo nella memoria con il nome timestr è
^(?<timestr>^# Time:.*). -
Il valore Trova espressione regolare per trovare le righe in 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@hostin ogni riga di log incontrata durante la pre-elaborazione del log. -
-
L'obiettivo di questo esempio è rilevare più parametri e sostituirli in più posizioni nei dati di log.
Considerare i dati di log indicati di seguito.
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 recupero, Trova espressione regolare e Sostituisci espressione regolare possono essere i seguenti:
-
The Catch Regular Expression value to obtain the
fooandinitusers 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 che presentano il 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 initNel risultato precedente dell'esempio, è possibile 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 che ha rilevato 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 alcuno dei due. Logging Analytics estrae le informazioni necessarie mediante la funzione Offset temporale. Oracle Log Analytics estrae le informazioni richieste e assegna l'indicatore orario a ciascun record di log.
Questi sono alcuni degli scenari e le soluzioni corrispondenti per l'assegnazione dell'indicatore orario utilizzando la funzione di offset orario:
| Contenuto log di esempio | Scenario | Soluzione |
|---|---|---|
|
Il file di log contiene l'indicatore orario nei log iniziali e presenta offset in un secondo momento. |
Selezionare l'indicatore orario dai record di log iniziali e assegnarlo ai record di log successivi modificati con gli offset di tempo. |
|
Il file di log contiene log iniziali con offset di tempo e nessun log degli indicatori orari precedenti. |
Selezionare l'indicatore orario dai record di log successivi e assegnarlo ai record di log precedenti modificati con gli offset di tempo. 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 di tempo e nessun indicatore orario. |
indicatore orario dall'ultima ora di modifica del file: dopo che tutti i record di log sono stati attraversati, l'indicatore orario viene calcolato sottraendo l'offset temporale calcolato dall'ultima ora di modifica del file. indicatore orario da nome file: quando questa opzione è selezionata nell'interfaccia utente, l'indicatore orario viene prelevato dal nome file nel formato specificato dall'espressione dell'indicatore orario. |
Gli offset 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 parser per estrarre l'indicatore orario e l'offset dell'indicatore orario dai record di log. Nella finestra di dialogo Aggiungi funzione effettuare le operazioni riportate di seguito.
-
Dove trovare l'indicatore orario?: per specificare da dove deve essere prelevato l'indicatore orario, selezionare tra Nome file, Ora ultima modifica file e Voce log. Per impostazione predefinita, è selezionata l'opzione Nome file.
Se questa opzione non viene specificata, la ricerca dell'indicatore orario viene eseguita nel seguente ordine:
- Attraversare i record di log e cercare una corrispondenza con il parser indicatore orario, che verrà specificato nel passo successivo.
- Selezionare l'ora dell'ultima modifica del file come indicatore orario.
- Se 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 valori riportati di seguito.
- Se nel passo 1 è stato selezionato Nome file:
Espressione timestamp: 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 file di un log di esempio che può essere utilizzato per eseguire il test delle impostazioni precedenti.
-
Se nel passo 1 è stato selezionato 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 data/ora: 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
secemsec. Si consideri, ad esempio, il record di log seguente:15 25 hostA debug services startedÈ possibile utilizzare l'espressione
(?<sec>\d+)\s+(?<msec>\d+)per estrarre i secondi (15) e i millisecondi (25) e aggiungerli come offset temporale all'indicatore orario di base per impostare l'indicatore orario del record di log.Prendere in considerazione un altro record di log di esempio:
15.25 hostA debug services startedÈ possibile utilizzare l'espressione
(?<sec>\d+.\d+)per estrarre15.25come secondi, che rappresenta15secondi e250millisecondi, e aggiungerli come offset temporale all'indicatore orario di base per impostare l'indicatore orario del record di log. -
Dopo le selezioni effettuate nei passi precedenti, il contenuto del log viene visualizzato nel campo Log di esempio.
Per eseguire il test delle impostazioni, fare clic su Test.
È possibile visualizzare il confronto tra il contenuto del log originale e il tempo calcolato in base alle specifiche.
-
Per salvare la funzione di offset orario precedente, fare clic su Aggiungi.