eval

Use o comando eval para calcular o valor de uma expressão e exibir o valor em um novo campo.

Observação

  • Enquanto o comando stats calcula estatísticas com base em campos existentes, o comando eval cria novos campos usando campos existentes e expressões arbitrárias.

  • As funções de processamento de string como indexof e substr consomem muitos recursos. Devido a isso, não é recomendável executar o comando eval com essas funções em relação a um grande número de registros de log ou valores de campo grandes. Em vez disso, extraia esses valores usando as Definições de Campo Estendido (EFD) ou Labels na Origem de Log. Consulte Usar Campos Estendidos em Origens e Usar Labels em Origens.

  • Certifique-se de que o nome do campo usado no comando eval não contenha os caracteres [ e ].

Sintaxe

Operadores e Funções Disponíveis com o Comando

*|eval <new_field_name>=<expression>

A tabela a seguir lista os operadores disponíveis com o comando eval.

Categoria Exemplo

Operadores Aritméticos

+, -, *, /, %

Operadores de Comparação

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

Operadores Lógicos

and, or, not

Operadores Condicionais

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

Vários Operadores de Comparação

in, not in

A tabela a seguir lista as funções disponíveis com o comando eval.

Categoria Exemplo

Funções de String

  • capitalize(String)

    Capitalize o primeiro caractere da string.

  • concat(String, String)

  • contains(String, String)

  • decode64(String)

    Observação: Se o valor da string for um campo, ele deverá fazer distinção entre maiúsculas e minúsculas.

  • encode64(String)

  • indexof (String, String [,int])

    Consulte Detalhes da Função indexof.

  • lastindexof(String, String, int)

    Consulte lastindexof Detalhes da Função.

  • length(String)

  • literal(String)

  • lower(String)

  • ltrim(String, Character)

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

    Consulte Substituir Detalhes da Função.

  • reverse(String)

  • rtrim(String, Character)

  • substr(String, int [, int])

    Consulte Detalhes da Função de subloja.

  • todate(String [, format])

  • toduration(String)

  • tonumber(String)

  • trim(String)

  • trim(String, Character)

  • upper(String)

  • urlDecode(String)

  • urlEncode(String)

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

    Consulte Detalhes da Função url e Cortes Curtos de url Definidos pela Oracle.

Funções Numéricas

Funções de Data

  • dateadd(date, property, amount)

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

  • formatdate(date [,format])

  • now()

Assim como o comando where, você pode usar uma string legível por humanos para manipular o tempo na consulta. Por exemplo, para criar um novo campo chamado 10mins Posteriormente que esteja 10 minutos à frente do valor no campo Tempo:

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

Consulte Strings de Tempo Amigáveis ao Usuário em Comparações.

Funções Condicionais

  • cidrmatch(String, String)

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

Funções de Hash

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

Observação: As funções md5 e sha operam atualmente nos valores de campo em letras minúsculas.

Observação

  • Para a função concat(), você pode inserir tipos de dados numéricos como inteiro, flutuante ou longo. Os campos numéricos que serão convertidos automaticamente nos valores de string correspondentes.

  • Você pode usar || para concatenar n número de entradas. Aqui também, você pode inserir tipos de dados numéricos que serão convertidos automaticamente nos valores de string correspondentes.

Parâmetros

A tabela a seguir lista os parâmetros usados nesse comando, com suas descrições.

Parâmetro Descrição

new_field_name

Especifique o nome do campo em que o valor calculado da expressão deverá ser exibido.

expression

Especifique a expressão cujo valor precisa ser calculado.

Estes são alguns exemplos do 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)

O exemplo a seguir compara os endereços IP no campo srvrhostip com uma faixa de sub-redes.

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

O exemplo a seguir retorna a string "Target".

*|eval newField = literal(Target)

O exemplo a seguir remove os espaços e as tabulações das duas extremidades.

*|eval newField = trim(Label)

O exemplo a seguir remove o caractere correspondente das duas extremidades.

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

O exemplo a seguir remove o caractere correspondente da extremidade esquerda.

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

O exemplo a seguir remove o caractere correspondente do lado direito.

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

O exemplo a seguir define o campo date como Start Date e define o formato da data como MM/dd/yyyy HH:mm.

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

A função toDate também pode ser usada para tratar a época da seguinte forma:

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

O exemplo a seguir define o valor do campo duration como 1.30.

*|eval duration = toduration("1.30")

O exemplo a seguir define o valor do campo duration com um valor numérico que é a diferença de End Time e Start Time.

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

Os exemplos a seguir ilustram o uso das funções de 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()

Você pode usar as funções de hash md5, sha1, sha256 e sha512 com o comando eval para filtrar dados de log. O exemplo a seguir define o valor do campo user com o valor sha1("jane").

*|eval user = sha1("jane")

O exemplo a seguir converte um hexadecimal e n é avaliado como 255:

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

O exemplo a seguir converte um número octal em decimal e n é avaliado como 10:

* | eval n = toNumber('012')

Exemplos da Função unit

Alguns exemplos simples:

* | 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')

Exemplos de unidades comuns, como bytes, moeda e duração:

* | 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'

Execute as três consultas acima na visualização do Bloco com a opção Número do Formato marcada para obter os melhores resultados.

Um campo com uma unidade de tamanho ou tipo de duração seria usado para formatar os valores no gráfico Análise de Link, em histogramas addfields, na Tabela de Links e na visualização Bloco:

'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'

Marque um campo como contendo dólares americanos, milhares de dólares americanos, milhões de dólares americanos ou bilhões de dólares americanos, respectivamente:

| 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)

Tipos suportados para a função unit

Nomes de Unidade:

  • PERCENT | PCT
  • Tamanho dos dados:
    • BYTE
    • KILOBYTE | KB
    • MEGABYTE | MB
    • GIGABYTE | GB
    • TERABYTE | TB
    • PETABYTE | PB
    • EXABYTE | EB
  • Tempo:
    • 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
  • Potência:
    • WATT
    • KILOWATT | kW
    • MEGAWATT | MW
    • GIGAWATT | GW
    • TERAWATT | TW
    • PETAWATT | PW
    • EXAWATT | EW
  • Temperatura:
    • KELVIN | K
    • CELSIUS | C
    • FAHRENHEIT | F
  • Frequência:
    • HERTZ | Hz
    • KILOHERTZ | kHz
    • MEGAHERTZ | MHz
    • GIGAHERTZ | GHz
    • TERAHERTZ | THz
    • PETAHERTZ | PHz
    • EXAHERTZ | EHz

Tipos de Moeda Suportados na Função unit

Você só pode usar essa função para o comando eval sob o comando link. Consulte links de exemplo do comando eval para usar a função em cenários típicos.

Especifique a unidade monetária usando o seguinte 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)

Os sufixos _k, _m e _b são usados para indicar a moeda em milhares, milhões ou bilhões, respectivamente. Para obter uma lista completa de códigos de moeda, consulte Normas ISO.

NLS_Territory Moeda
AFEGANISTÃO AFN
ALBÂNIA ALL
ARGÉLIA DZD
AMÉRICA US$
ANGOLA AOA
ANTÍGUA E BARBUDA XCD
ARGENTINA ARS
ARMÊNIA AMD
ARUBA AWG
AUSTRÁLIA AUD
ÁUSTRIA Euro (EUR)
AZERBAIJÃO AZN
BAHAMAS BSD
BAREIN BHD
BANGLADESH BDT
BARBADOS Até logo
BELARUS BYN
BÉLGICA Euro (EUR)
BELIZE BZD
BERMUDAS BMD
BOLÍVIA BOB
BÓSNIA E HERZEGOVINA BAM
BOTSUANA BWP
BRASIL BRL
BULGÁRIA BGN
CAMBOJA KHR
CAMARÕES XAF
CANADÁ CAD
ILHAS CAYMAN KYD
CHILE CLP
CHINA CNY
COLÔMBIA COP
CONGO - BRAZZAVILLE XAF
CONGO - KINSHASA CDF
COSTA RICA CRC
CROÁCIA HRK
CURACAO ANEXO
CHIPRE Euro (EUR)
CZECH REPUBLIC CZK
DINAMARCA DKK
DJIBUTI DJF
DOMINICA XCD
REPÚBLICA DOMINICANA DOP
EQUADOR US$
EGITO EGP
EL SALVADOR SVC
ESTÔNIA Euro (EUR)
ETIÓPIA ETB
FINLÂNDIA Euro (EUR)
FRANÇA Euro (EUR)
MACEDÔNIA MKD
GABÃO XAF
GEORGIA GEL
ALEMANHA Euro (EUR)
GHANA GHS
GRÉCIA Euro (EUR)
GRANADA XCD
GUATEMALA GTQ
GUIANA GYD
HAITI HTG
HONDURAS HNL
HONG KONG HKD
HUNGRIA HUF
ISLÂNDIA ISK
ÍNDIA INR
INDONÉSIA IDR
IRÃO IRR
IRAQ IQD
IRLANDA Euro (EUR)
ISRAEL ILS
ITÁLIA Euro (EUR)
COSTA DO MARFIM XOF
JAMAICA JMD
JAPÃO JPY
JORDÂNIA JOD
CAZAQUISTÃO KZT
KENYA KES
COREIA KRW
KUWAIT KWD
KYRGYZSTAN KGS
LEI LAC
LETÔNIA Euro (EUR)
LÍBANO LBP
LÍBIA Ano Anterior
LIECHTENSTEIN CHF
LITUANIA Euro (EUR)
LUXEMBURGO Euro (EUR)
MACAU Início do Período
MALAVI MWK
MALÁSIA MYR
MALDIVAS MVR
MALTA Euro (EUR)
MAURITÂNIA MRU
MAURÍCIO MUR
MÉXICO MXN
MOLDÁVIA MDL
MONTENEGRO Euro (EUR)
MARROCOS MAD
MOÇAMBIQUE MZN
MIANMAR MMK
NAMÍBIA NAD
NEPAL NPR
NOVA ZELÂNDIA NZD
NICARÁGUA NIO
NIGÉRIA NGN
NORUEGA NOK
OMAN OMR
PAQUISTÃO PKR
PANAMÁ PAB
PARAGUAI PYG
PERU PEN
FILIPINAS PHP
POLÔNIA PLN
PORTUGAL Euro (EUR)
PORTO RICO US$
CATAR QAR
ROMÊNIA RON
RÚSSIA RUB
SAINT KITTS E NEVIS XCD
SANTA LUCIA XCD
ARÁBIA SAUDITA SAR
SENEGAL XOF
SERBIA RSD
SERRA LEOA SLL
SINGAPURA SGD
ESLOVÁQUIA Euro (EUR)
ESLOVÊNIA Euro (EUR)
SOMÁLIA SOS
ÁFRICA DO SUL ZAR
SUDÃO DO SUL SSP
ESPANHA Euro (EUR)
SRI LANKA LKR
SUDÃO O nas
SURINAME SRD
SUAZILÂNDIA SZL
SUÉCIA SEK
SUÍÇA CHF
SÍRIA SIP
TAIWAN TWD
TANZÂNIA FH
TAILÂNDIA THB
PAÍSES BAIXOS Euro (EUR)
TRINIDAD E TOBAGO Acumulado no Mês
TUNÍSIA TND
TURQUIA TENTAR
TURCOMENISTÃO TMT
UGANDA UGX
UCRÂNIA UAH
EMIRADOS ÁRABES UNIDOS AED
REINO UNIDO GBP
URUGUAI UYU
USBEQUISTÃO UZS
VENEZUELA VERS
VIETNÃ VND
IÊMEN SIM
ZÂMBIA ZMW
ZIMBÁBUE ZWL

indexof Detalhes da Função

A sintaxe da função index0f:

indexof (String, String [,int])

indexof (String, String [,start_pos]): A contagem do índice começa com 0, retorna o índice de correspondência começando com start_pos (se fornecido) e retorna -1 se não houver correspondência.

O exemplo a seguir define o valor do campo newField com a posição .com na string uri.

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

Caso de Uso: Extraia a parte relevante do caminho da API dos Logs de Auditoria do OCI, campo Caminho

O campo Caminho contém um valor como /apis/coordination.k8s.io/v1/namespaces/default/leases/oracle.com-oci.

Você pode extrair o valor coordination.k8s do campo acima seguindo estas etapas:

  • Localize a posição do primeiro e do segundo / usando a função indexOf().
  • Encontre a posição do terceiro /.
  • Extraia os valores após o segundo /, até o terceiro /, usando a função 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

Exemplo de saída:


Caso de Uso: Extraia a parte relevante do caminho da API dos Logs de Auditoria do OCI, campo Caminho

lastindexof Detalhes da Função

A sintaxe da função lastindexof:

lastindexof(String, String, int)

lastindexof (String, String [, end_pos]): A contagem do índice começa com 0, retorna o índice da última ocorrência da substring antes de end_pos (se fornecido) e retorna -1 se não houver correspondência. O argumento end_pos é opcional.

Alguns exemplos de uso da função lastindexof:

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

Caso de Uso: Extraia a Área do campo Tipo nos Logs de Auditoria do OCI

O campo Tipo contém um valor como com.oraclecloud.computeApi.GetInstance.

Para extrair computeAPI do valor acima, você pode usar o seguinte esquema:

  • Identifique a posição do último . usando lastIndexOf().
  • A partir desse deslocamento, identifique a posição do . anterior, usando outro lastIndexOf(), mas fornecendo o deslocamento de onde pesquisar novamente.
  • Extraia o valor entre essas duas posições usando 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

Exemplo de saída:


Caso de Uso: Extrair a Área do campo Tipo nos Logs de Auditoria do OCI

replace Detalhes da Função

A sintaxe da função replace:

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

replace suporta várias substituições em uma única função. Alguns exemplos de uso da função replace:

  • *|eval newField = replace('aabbcc', 'bb', 'xx')
  • *|eval newField = replace('aabbcc', 'bb', 'xx', 'cc', 'yy')
  • Exemplo de várias ações de substituição em uma única função 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 Detalhes da Função

A sintaxe da função substr:

substr(String, int [, int])

substr(String, start_pos, end_pos - 1): a contagem de índices começa com start_pos e termina com end_pos - 1.

No exemplo a seguir, newField é a substring de aabbcc, em que o índice inicial (inclusive) é 2 e o índice final (exclusive) é 4. Observe que, para strings, a contagem de índices começa com 0. Portanto, a substring resultante é bb.

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

Para casos de uso em que a função substr é usada, consulte Detalhes da Função indexof e Detalhes da Função lastindexof.

url Detalhes da Função

A sintaxe da função url:

url(String, Name, Parameter)

Os valores Nome e Parâmetro são opcionais.

  • String: Pode ser um URL ou um dos nomes abreviados predefinidos. Por exemplo:
    eval Link = url('https://www.oracle.com')
  • Nome: Nome Opcional do URL. Por exemplo:
    eval Link = url('https://www.oracle.com', 'Oracle Home Page')
  • Parâmetro: Parâmetro opcional se um atalho for usado para String. Por exemplo:
    eval Link = url('tech', 'Search Oracle', 'ORA-600')

Alguns exemplos de uso da função 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

Exemplos de uso da função url após o 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-Cuts url Definidos pela Oracle

Os atalhos definidos pela Oracle a seguir estão disponíveis para uso com a função url do comando eval.

Curto-Corte URL e Descrição Exemplo

ora

Pesquisar:oracle

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

Gere um link para pesquisar todas as strings especificadas em oracle.com

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

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

tecnologia

oracle-tech

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

Gerar um link para pesquisar nos fóruns de tecnologia da Oracle

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

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

mosca

oracle-mosc

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

Gerar um link para pesquisar fóruns do 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=

Gerar um link para pesquisar usando o Google

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

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

Gerar um link para pesquisar usando o Bing

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

ddg

patoduckgo

https://duckduckgo.com/?q=

Gerar um link para pesquisa usando DuckDuckGo

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

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

so

fluxo de pilha

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

Gerar um link para pesquisar em StackOverflow

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

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

cve

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

Gerar um link para o ID de CVE fornecido

* | 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