eval

Utilizzare il comando eval per calcolare il valore di un'espressione e visualizzare il valore in un nuovo campo.

Nota

  • Mentre il comando stats calcola le statistiche in base ai campi esistenti, il comando eval crea nuovi campi utilizzando campi esistenti ed espressioni arbitrarie.

  • Le funzioni di elaborazione delle stringhe, ad esempio indexof e substr, richiedono più risorse. A causa di ciò, l'esecuzione del comando eval con queste funzioni su un numero elevato di record di log o su valori di campo di grandi dimensioni non è consigliata. Estrarre invece questi valori utilizzando le definizioni campi estesi (EFD) o le etichette nell'origine log. Vedere Usa campi estesi nelle origini e Usa etichette nelle origini.

  • Assicurarsi che il nome del campo utilizzato nel comando eval non contenga i caratteri [ e ].

Sintassi

Operatori e funzioni disponibili con il comando

*|eval <new_field_name>=<expression>

La tabella seguente elenca gli operatori disponibili con il comando eval.

Categoria Esempio

Operatori Arithmetic

+, -, *, /, %

Operatori di confronto

=, !=, <, >, <=, >=

Operatori logici

and, or, not

Operatori condizionali

if(<expression>,<expression>,<expression>)

Più operatori di confronto

in, not in

La tabella seguente elenca le funzioni disponibili con il comando eval.

Categoria Esempio

Funzioni di stringa

  • capitalize(String)

    Capitalizzare il primo carattere della stringa.

  • concat(String, String)

  • contains(String, String)

  • decode64(String)

    Nota: se il valore stringa è un campo, deve fare distinzione tra maiuscole e minuscole.

  • encode64(String)

  • indexof (String, String [,int])

    Vedere indexof Function Details.

  • lastindexof(String, String, int)

    Vedere lastindexof Function Details.

  • length(String)

  • literal(String)

  • lower(String)

  • ltrim(String, Character)

  • replace(String, String, String, String, String, ..)

    Vedere Sostituisci dettagli funzione.

  • reverse(String)

  • rtrim(String, Character)

  • substr(String, int [, int])

    Vedere Dettagli funzione secondaria.

  • todate(String [, format])

  • toduration(String)

  • tonumber(String)

  • trim(String)

  • trim(String, Character)

  • upper(String)

  • urlDecode(String)

  • urlEncode(String)

  • url(String [, Name [, Parameter]])

    Vedere Dettagli funzione URL e Tagli brevi URL definiti da Oracle.

Funzioni numeriche

Funzioni data

  • dateadd(date, property, amount)

  • dateset(date, property, value [, property, value])

  • formatdate(date [,format])

  • now()

Analogamente al comando where, è possibile utilizzare una stringa leggibile dall'utente per modificare il tempo nella query. Ad esempio, per creare un nuovo campo denominato 10mins in seguito con un anticipo di 10 minuti rispetto al valore nel campo Ora, procedere come segue.

* | eval '10mins Later' = Time + 10mins

Vedere Stringhe temporali user-friendly nei confronti.

Funzioni condizionali

  • cidrmatch(String, String)

  • if(<expression>, <expression>, <expression>)

Funzioni hash

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

Nota: le funzioni md5 e sha operano attualmente sui valori dei campi minuscoli.

Nota

  • Per la funzione concat(), è possibile immettere tipi di dati numerici come numero intero, a virgola mobile o lungo. I campi numerici da convertire automaticamente nei valori stringa corrispondenti.

  • È possibile usare il comando || per concatenare il numero di input n. Anche in questo caso è possibile inserire tipi di dati numerici che verranno convertiti automaticamente nei corrispondenti valori di stringa.

Parametri

La tabella seguente elenca i parametri utilizzati in questo comando e le relative descrizioni.

Parametro descrizione;

new_field_name

Specificare il nome del campo in cui deve essere visualizzato il valore calcolato dell'espressione.

expression

Specificare l'espressione per la quale deve essere calcolato il valore.

Di seguito sono riportati alcuni esempi del comando eval.

*|eval newField = 'foo'
*|eval newField = 123
*|eval newField = upper(Target)
*|eval newField = length('hello world')
*|eval s =capitalize(severity)
*|eval newField = concat(host, concat (':', port))
*|eval n = contains(uri, '.com')
*|eval s = decode64(value)
*|eval s = encode64(uri)
*|eval s = reverse(Command)
*|eval newField = host || ':'|| port
*|eval newField = round(123.4)
*|eval newField = floor(4096/1024)+Length
*|eval newField = if (max(Length)(Target), length(Severity)) <= 20, 'OK', 'ERROR')
*|eval newField = urlDecode('http%3A%2F%2Fexample.com%3A893%2Fsolr%2FCORE_0_0%2Fquery')
*|eval s = urlEncode(uri)
*|eval newField = 'Host Name (Destination)' in (host1, host2)

L'esempio seguente confronta gli indirizzi IP nel campo srvrhostip con un intervallo di sottoreti.

*|eval newField = if (cidrmatch(srvrhostip, '192.0.2.254/25') = 1, 'local', 'not local')

Il seguente esempio restituisce la stringa "Target".

*|eval newField = literal(Target)

Nell'esempio seguente vengono rimossi gli spazi e le linguette da entrambe le estremità.

*|eval newField = trim(Label)

Nell'esempio seguente viene rimosso il carattere corrispondente da entrambe le estremità.

*|eval newField = trim('User Name',h)

L'esempio seguente rimuove il carattere corrispondente dall'estremità sinistra.

*|eval newField = ltrim('Error ID',0)

L'esempio seguente rimuove il carattere corrispondente dall'estremità destra.

*|eval newField = rtrim('OS Process ID',2)

Nell'esempio seguente il campo date viene impostato su Start Date e il formato della data viene definito come MM/dd/yyyy HH:mm.

*|eval date = toDate('Start Date', 'MM/dd/yyyy HH:mm')

La funzione toDate può anche essere utilizzata per gestire l'epoca come segue:

... | where 'Start Time' > toDate(1405544998000)

Nell'esempio seguente il valore del campo duration viene impostato su 1.30.

*|eval duration = toduration("1.30")

Nell'esempio seguente il valore del campo duration viene impostato su un valore numerico che corrisponde alla differenza tra End Time e Start Time.

*|eval duration = formatDuration('End Time' - 'Start Time')

Gli esempi riportati di seguito illustrano l'uso delle funzioni data.

*| eval lastHour = dateAdd(now(), hour, -1)
*| eval midnight = dateSet(now(), hour, 0, minute, 0, sec, 0, msec, 0)
*| eval timeOnly = formatDate(now(), 'HH:mm:ss')
*| eval now = now()

È possibile utilizzare le funzioni hash md5, sha1, sha256 e sha512 con il comando eval per filtrare i dati di log. Nell'esempio seguente viene impostato il valore del campo user con il valore sha1("jane").

*|eval user = sha1("jane")

L'esempio seguente converte un'esadecimale in un valore decimale e n restituisce 255:

* | eval n = toNumber('0xFF')

L'esempio seguente converte un numero ottale in un numero decimale e n restituisce 10:

* | eval n = toNumber('012')

Esempi per la funzione unit

Alcuni semplici esempi:

* | eval newField = unit('Content Size', KB)
* | eval 'File Size (bytes)' = unit('File Size', 'byte')
* | eval 'File Size (KB)' = unit('File Size'/1024, 'kb')
* | eval 'File Size (MB)' = unit('File Size'/(1024*1024), 'mb')
* | eval 'Time Taken (Sec)' = unit(Time/1000, 'SEC')

Esempi di unità comuni come byte, valuta e durata:

* | eval Vol = unit('Content Size Out', byte) | stats sum(Vol) as 'Total Volume'
* | eval Sales = unit('Sales Amount', currency_usd) | stats sum('Sales') as 'Total Sales'
* | eval 'Disk Read Time' = unit('Disk Read Time (millis)', ms) | stats avg('Disk Read Time') as 'Avg Disk Read Time'

Eseguire le tre query precedenti nella visualizzazione Casella con l'opzione Numero formato selezionata per ottenere i risultati migliori.

Un campo con dimensioni o durata di tipo unità viene utilizzato per formattare i valori nel grafico Analisi collegamento, negli istogrammi campi aggiuntivi, nella tabella collegamenti e nella visualizzazione casella:

'Log Source' = 'FMW WebLogic Server Access Logs'
| link span = 5minute Time, Server
| stats avg('Duration')     as 'Raw Avg. Duration'
        avg('Content Size') as 'Raw Avg. Transfer Size'
| eval 'Average Duration'      = unit('Raw Avg. Duration', ms)
| eval 'Average Transfer Size' = unit('Raw Avg. Transfer Size', byte)
| classify 'Start Time', 'Average Duration', 
          'Average Transfer Size' as 'Response Time vs. Download Sizes'

Contrassegnare un campo come contenente dollari USA, migliaia di dollari USA, milioni di dollari USA o miliardi di dollari USA, rispettivamente:

| eval 'Amount in USD' = unit('Sales Price', currency_usd)
| eval 'Amount in Thousands (USD)' = usd('Quarterly Sales', currency_usd_thousand)
| eval 'Amount in Millions (USD)' = usd('Annual Profit', currency_usd_million)
| eval 'Amount in Billions (USD)' = usd('Annual Sales', currency_usd_billion)

Tipi supportati per la funzione unit

Nomi unità:

  • PERCENT | PCT
  • Dimensione dati:
    • BYTE
    • KILOBYTE | KB
    • MEGABYTE | MB
    • GIGABYTE | GB
    • TERABYTE | TB
    • PETABYTE | PB
    • EXABYTE | EB
  • Ora:
    • MILLISECOND | MS
    • S | SEC | SECS | SECOND | SECONDS
    • M | MIN | MINS | MINUTE | MINUTES
    • H | HR | HRS | HOUR | HOURS
    • D | DAY | DAYS
    • W | WEEK | WEEKS
    • MON | MONTH | MONTHS
    • Y | YR | YRS | YEAR | YEARS
    • MICRO | µs
  • Potenza:
    • WATT
    • KILOWATT | kW
    • MEGAWATT | MW
    • GIGAWATT | GW
    • TERAWATT | TW
    • PETAWATT | PW
    • EXAWATT | EW
  • Temperatura:
    • KELVIN | K
    • CELSIUS | C
    • FAHRENHEIT | F
  • la frequenza:
    • HERTZ | Hz
    • KILOHERTZ | kHz
    • MEGAHERTZ | MHz
    • GIGAHERTZ | GHz
    • TERAHERTZ | THz
    • PETAHERTZ | PHz
    • EXAHERTZ | EHz

Tipi di valuta supportati nella funzione unit

Questa funzione può essere utilizzata solo per il comando eval con il comando link. Per informazioni sull'utilizzo della funzione negli scenari standard, vedere i collegamenti di esempio del comando eval.

Specificare l'unità di valuta utilizzando il seguente formato:

eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_k)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_m)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_b)

I suffissi _k, _m e _b vengono utilizzati per indicare la valuta in migliaia, milioni o miliardi, rispettivamente. Per un elenco completo dei codici valuta, vedere ISO Standards.

NLS_Territory Valuta
AFGHANISTAN AFN
ALBANIA ALL
ALGERIA DZD
AMERICA USD
ANGOLA AOA
ANTIGUA E BARBUDA XCD
ARGENTINA ARS
ARMENIA AMD
ARUBA AWG
AUSTRALIA AUD
AUSTRIA EURO
AZERBAIJAN AZN
BAHAMAS BSD
BAHREIN BHD
BANGLADESH BDT
BARBADOS BBD
BIELORUSSIA BYN
BELGIO EURO
BELIZE BZD
BERMUDA BMD
BOLIVIA Linea business
BOSNIA-ERZEGOVINA BAM
BOTSWANA BWP
BRASILE BRL
BULGARIA BGN
CAMBOGIA KHR
CAMERUN XAF
CANADA CAD
ISOLE CAYMAN KYD
CILE CLP
CINA CNY
COLOMBIA COPPIA
CONGO BRAZZAVILLE XAF
CONGO KINSHASA CDF
COSTA RICA CRC
CROAZIA HRK
CURAÇAO ANG
CIPRO EURO
REPUBBLICA CECA CZK
DANIMARCA DKK
GIBUTI DJF
DOMINICA XCD
REPUBBLICA DOMINICANA DOP
ECUADOR USD
EGITTO EGP
EL SALVADOR SVC
ESTONIA EURO
ETIOPIA ETB
FINLANDIA EURO
FRANCIA EURO
FYR MACEDONIA MKD
GABON XAF
GEORGIA GEL
GERMANIA EURO
GHANA GHS
GRECIA EURO
GRENADA XCD
GUATEMALA Totale generale
GUYANA GYD
HAITI HTG
HONDURAS HNL
HONG KONG HKD
UNGHERIA HUF
ISLANDA ISK
INDIA INR
INDONESIA IDR
IRAN IRR
IRAQ IQD
IRLANDA EURO
ISRAELE ILS
ITALIA EURO
COSTA D'AVORIO XOF
GIAMAICA JMD
GIAPPONE JPY
GIORDANIA JOD
KAZAKHISTAN KZT
KENYA KES
COREA KRW
KUWAIT KWD
KIRGHIZISTAN KGS
LAOS LAVORO
LETTONIA EURO
LIBANO LBP
LIBIA LYD
LIECHTENSTEIN CHF
LITUANIA EURO
LUSSEMBURGO EURO
MACAO MOP
MALAWI MWK
MALESIA MYR
MALDIVE MVR
MALTA EURO
MAURITANIA MRU
MAURITIUS MUR
MESSICO MXN
MOLDAVIA MDL
MONTENEGRO EURO
MAROCCO MAD
MOZAMBICO MZN
MYANMAR MMK
NAMIBIA NAD
NEPALE NPR
NUOVA ZELANDA NZD
NICARAGUA NIO
NIGERIA NGN
NORVEGIA NOK
OMAN SMO
PAKISTAN Chiave primaria
PROVINCIA DI PANAMA Bancomat
PARAGUAY PICCOLO
PERIODO PENNA
FILIPPINE PHP
POLONIA PLN
PORTOGALLO EURO
PORTORICO USD
QATAR QAR
ROMANIA RON
RUSSIA RUB
SAINT KITTS E NEVIS XCD
SAINT LUCIA XCD
ARABIA SAUDITA SAR
SENEGAL XOF
SERBIA RSD
SIERRA LEONE SLL
SINGAPORE SGD
SLOVACCHIA EURO
SLOVENIA EURO
SOMALIA SOS
SUDAFRICA ZAR
SUDAN DEL SUD SSP
SPAGNA EURO
SRI LANKA LKR
SUDAN SDG
SURINAME SRD
SVIZZERA SZL
SVEZIA SEK
SVIZZERA CHF
SIRIA SIP
TAIWAN TWD
TANZANIA TZ
TAILANDIA THB
PAESI BASSI EURO
TRINIDAD E TOBAGO Progressivo periodo
TUNISIA TND
TURCHIA PROVA
TURKMENISTAN TMT
UGANDA UGX
UCRAINA UAH
EMIRATI ARABI UNITI AED
REGNO UNITO GBP
URUGUAY UYU
UZBEKISTAN UZS
VENEZUELA VES
VIETNAM VND
YEMEN
ZAMBIA ZMW
ZIMBABWE ZWL

indexof Dettagli funzione

La sintassi della funzione index0f:

indexof (String, String [,int])

indexof (String, String [,start_pos]): il conteggio degli indici inizia con 0, restituisce l'indice della corrispondenza a partire da start_pos (se fornito) e restituisce -1 se nessuna corrispondenza.

Nell'esempio seguente viene impostato il valore del campo newField con la posizione .com nella stringa uri.

*|eval newField = indexOf(uri, '.com')

Caso d'uso: estrarre la parte pertinente del percorso API dal campo Log di audit OCI, Percorso

Il campo Percorso contiene un valore simile a /apis/coordination.k8s.io/v1/namespaces/default/leases/oracle.com-oci.

È possibile estrarre il valore coordination.k8s dal campo precedente effettuando le operazioni riportate di seguito.

  • Trovare la posizione del primo e del secondo / utilizzando la funzione indexOf().
  • Trova la posizione del terzo /.
  • Estrarre i valori dopo il secondo /, fino al terzo /, utilizzando la funzione substr().
'Log Source' = 'OCI Audit Logs'
| eval firstPos = indexOf(Path, '/')
| eval secondPos = indexOf(Path, '/', firstPos + 1)
| eval API = substr(Path, secondPos + 1, indexOf(Path, '/', secondPos + 1))
| link Path, API

Output di esempio:


Caso d'uso: estrarre la parte pertinente del percorso API dal campo Log di audit OCI, Percorso

lastindexof Dettagli funzione

La sintassi della funzione lastindexof:

lastindexof(String, String, int)

lastindexof (String, String [, end_pos]): il conteggio degli indici inizia con 0, restituisce l'indice dell'ultima occorrenza della sottostringa prima di end_pos (se fornito) e restituisce -1 se non viene trovata alcuna corrispondenza. L'argomento end_pos è facoltativo.

Alcuni esempi per l'utilizzo della funzione lastindexof:

*|eval n = lastindexof(uri, '.com')

Caso d'uso: estrarre l'area dal campo Tipo nei log di audit OCI

Il campo Tipo contiene un valore simile a com.oraclecloud.computeApi.GetInstance.

Per estrarre computeAPI dal valore precedente, è possibile utilizzare lo schema seguente:

  • Identificare la posizione dell'ultimo . utilizzando lastIndexOf().
  • Da questo offset, identificare la posizione del precedente ., utilizzando un altro lastIndexOf(), ma fornendo l'offset da dove eseguire la ricerca indietro.
  • Estrarre il valore tra queste due posizioni utilizzando substr().
'Log Source' = 'OCI Audit Logs' 
| eval lastDot = lastIndexOf(Type, '.') 
| eval prevDot = lastIndexOf(Type, '.', lastDot - 1) 
| eval Area    = substr(Type, prevDot + 1, lastDot) 
| link Type, Area

Output di esempio:


Caso d'uso: estrarre l'area dal campo Tipo nei log di audit OCI

replace Dettagli funzione

La sintassi della funzione replace:

replace(String, String, String, String, String, ..)

replace supporta più sostituzioni in una singola funzione. Alcuni esempi per l'utilizzo della funzione replace:

  • *|eval newField = replace('aabbcc', 'bb', 'xx')
  • *|eval newField = replace('aabbcc', 'bb', 'xx', 'cc', 'yy')
  • Esempio di più azioni di sostituzione in una singola funzione replace:

    * | eval CopiedURL = 'https://cloud.oracle.com/loganalytics/explorer?viz=<VIZ>&encodedQuery=<QUERY>&startTime=<START_TIME>&endTime=<END_TIME>&region=us-phoenix-1&tenant=testtenant'| eval Query = encode64('* | stats count as "Log Records" by "Log Source"') 
    | eval 'Start Epoch' = toString(toNumber(toDate(dateRelative(30day)))) 
    | eval 'End Epoch' = toString(toNumber(now())) 
    | eval Viz = pie 
    | eval URL = replace(CopiedURL, '<VIZ>', Viz, '<QUERY>', Query, '<START_TIME>', 'Start Epoch', '<END_TIME>', 'End Epoch')

substr Dettagli funzione

La sintassi della funzione substr:

substr(String, int [, int])

substr(String, start_pos, end_pos - 1): il conteggio degli indici inizia con start_pos e termina con end_pos - 1.

Nell'esempio seguente, newField è la sottostringa di aabbcc dove l'indice iniziale (incluso) è 2 e l'indice finale (escluso) è 4. Per le stringhe, il conteggio degli indici inizia con 0. La sottostringa risultante è quindi bb.

*|eval newField = substr('aabbcc', 2, 4)

Per i casi d'uso in cui viene utilizzata la funzione substr, vedere indexof Function Details e lastindexof Function Details.

url Dettagli funzione

La sintassi della funzione url:

url(String, Name, Parameter)

I valori Nome e Parametro sono facoltativi.

  • Stringa: può essere un URL o uno dei nomi brevi predefiniti. Ad esempio:
    eval Link = url('https://www.oracle.com')
  • Nome: nome facoltativo per l'URL. Ad esempio:
    eval Link = url('https://www.oracle.com', 'Oracle Home Page')
  • Parametro: parametro facoltativo se si utilizza un collegamento per la stringa. Ad esempio:
    eval Link = url('tech', 'Search Oracle', 'ORA-600')

Alcuni esempi per l'utilizzo della funzione url:

  • * | stats latest(Status) as Status
     | eval ‘HTTP Status Code’ = url(‘https://www.google.com/search?q=http+code+’, Status, Status)
  • Status != null
     | eval 'HTTP Status Code' = url('https://www.google.com/search?q=http+code+', Status, Status)
     | stats count by Status

Esempi di utilizzo della funzione url dopo il comando link:

  • * | link status
     | eval ‘HTTP Status Code’ = url(‘https://www.google.com/search?q=http+code+’, Status, Status)
  • * | link Type
     | stats latest(Status) as Status
     | eval ‘HTTP Status Code’ = url(‘[https://www.google.com/search?q=http+code+]’, Status, Status)

Short-cut url definiti da Oracle

I seguenti collegamenti definiti da Oracle sono disponibili per l'uso con la funzione url per il comando eval.

Short-Cut URL e descrizione Esempio

ora

ricerca:oracle

https://www.google.com/search?q=site:oracle.com%20

Generare un collegamento per cercare tutte le stringhe specificate in oracle.com

eval Help = url('ora', 'Search Oracle', 'ORA-600')

eval Help = url('search:oracle', 'Search Oracle', 'ORA-600')

tecnologia

tecnologia oracle

https://community.oracle.com/tech/search?query=

Genera un collegamento per cercare nei forum della tecnologia Oracle

eval Help = url('tech', 'Search Oracle Tech Forums', 'ORA-600')

eval Help = url('oracle-tech', 'Search Oracle Tech Forums', 'ORA-600')

mosc

oracle-mosc

https://community.oracle.com/mosc/search?query=

Generare un collegamento per cercare nei forum di My Oracle Support

eval Help = url('mosc', 'Search Oracle Support', 'ORA-600')

eval Help = url('oracle-mosc', 'Search Oracle Support', 'ORA-600')

google https://www.google.com/search?q=

Genera un collegamento per la ricerca utilizzando Google

eval 'More Info' = url('google', 'Search using Google', 'ORA-600')

bing https://www.bing.com/search?q=

Generare un collegamento per la ricerca utilizzando Bing

eval 'More Info' = url('bing', 'Search using Bing', 'ORA-600')

dg

anatra

https://duckduckgo.com/?q=

Generare un collegamento per la ricerca utilizzando DuckDuckGo

eval 'More Info' = url('ddg', 'Search using DuckDuckGo', 'ORA-600')

eval 'More Info' = url('duckduckgo', 'Search using DuckDuckGo', 'ORA-600')

così

stackoverflow

https://stackoverflow.com/search?q=

Generare un collegamento per la ricerca in StackOverflow

eval 'More Info' = url('so', 'Search using StackOverflow', 'ORA-600')

eval 'More Info' = url('stackoverflow', 'Search using StackOverflow', 'ORA-600')

cv

https://www.cve.org/CVERecord?id=

Genera un collegamento per l'ID CVE specificato

* | link

| eval 'CVE Details' = url(cve, 'CVE-2021-22931 - Improper Null Termination in Node.js', 'CVE-2021-22931')

Generates a link to https://www.cve.org/CVERecord?id=CVE-2021-22931