eval

Utilisez la commande eval pour calculer la valeur d'une expression et afficher cette valeur dans un nouveau champ.

Remarque

  • Pendant que la commande stats calcule les statistiques en fonction des champs existants, la commande eval crée des champs à l'aide de champs existants et d'expression arbitraire.

  • Les fonctions de traitement de chaîne telles que indexof et substr consomment beaucoup de ressources. Pour cette raison, l'exécution de la commande eval avec ces fonctions sur un grand nombre d'enregistrements de journal ou sur des valeurs de champ importantes n'est pas recommandée. Extrayez plutôt ces valeurs à l'aide des définitions de champ étendu (EFD) ou des libellés de votre source de journal. Reportez-vous à Utilisation de champs étendus dans les sources et à Utilisation de libellés dans les sources.

  • Assurez-vous que le nom de champ utilisé dans la commande eval ne contient pas les caractères [ et ].

Syntaxe

Opérateurs et fonctions disponibles avec la commande

*|eval <new_field_name>=<expression>

Le tableau suivant répertorie les opérateurs disponibles avec la commande eval.

Catégorie Exemple

Opérateurs arithmétiques

+, -, *, /, %

Opérateurs de comparaison

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

Opérateurs logiques

and, or, not

Opérateurs conditionnels

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

Opérateurs de comparaison multiples

in, not in

Le tableau suivant répertorie les fonctions disponibles avec la commande eval.

Catégorie Exemple

Fonctions de chaîne

  • capitalize(String)

    Mettez en majuscule le premier caractère de la chaîne.

  • concat(String, String)

  • contains(String, String)

  • decode64(String)

    Remarque : si la valeur de chaîne est un champ, il doit être sensible à la casse.

  • encode64(String)

  • indexof (String, String [,int])

    Reportez-vous à la section indexof Function Details.

  • lastindexof(String, String, int)

    Reportez-vous à Détails de la fonction lastindexof.

  • length(String)

  • literal(String)

  • lower(String)

  • ltrim(String, Character)

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

    Reportez-vous à Détails de la fonction de remplacement.

  • reverse(String)

  • rtrim(String, Character)

  • substr(String, int [, int])

    Reportez-vous à Détails de la fonction Substr.

  • todate(String [, format])

  • toduration(String)

  • tonumber(String)

  • trim(String)

  • trim(String, Character)

  • upper(String)

  • urlDecode(String)

  • urlEncode(String)

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

    Reportez-vous à Détails de la fonction url et à Réductions d'URL définies par Oracle.

Fonctions numériques

Fonctions de date

  • dateadd(date, property, amount)

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

  • formatdate(date [,format])

  • now()

Comme pour la commande where, vous pouvez utiliser une chaîne lisible par l'utilisateur pour manipuler le temps dans la requête. Par exemple, pour créer un champ nommé 10mins Later qui a 10 minutes d'avance sur la valeur du champ Time :

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

Reportez-vous à Chaînes de temps conviviales dans les comparaisons.

Fonctions conditionnelles

  • cidrmatch(String, String)

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

Fonctions de hachage

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

Remarque : les fonctions md5 et sha fonctionnent actuellement sur les valeurs de champ en minuscules.

Remarque

  • Pour la fonction concat(), vous pouvez entrer des types de données numériques (entier, nombre à virgule flottante, long, etc.). Les champs numériques sont remplacés automatiquement par les valeurs de chaîne correspondantes.

  • Vous pouvez utiliser || pour concaténer un nombre n d'entrées. Ici aussi, vous pouvez entrer des types de données numériques qui sont automatiquement remplacés par les valeurs de chaîne correspondantes.

Paramètres

Le tableau suivant répertorie les paramètres utilisés dans cette commande, ainsi que leur description.

Paramètre Description

new_field_name

Indiquez le nom du champ dans lequel la valeur calculée de l'expression doit être affichée.

expression

Indiquez l'expression pour laquelle la valeur doit être calculée.

Voici quelques exemples de commande 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'exemple suivant compare les adresses IP du champ srvrhostip avec une plage de sous-réseaux.

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

L'exemple suivant renvoie la chaîne "Target".

*|eval newField = literal(Target)

L'exemple suivant enlève les espaces et les tabulations des deux extrémités.

*|eval newField = trim(Label)

L'exemple suivant enlève le caractère correspondant des deux extrémités.

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

L'exemple suivant enlève le caractère correspondant de l'extrémité gauche.

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

L'exemple suivant enlève le caractère correspondant de l'extrémité droite.

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

L'exemple suivant définit le champ date sur Start Date et définit le format de la date sur MM/dd/yyyy HH:mm.

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

La fonction toDate peut également être utilisée pour gérer l'époque comme suit :

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

L'exemple suivant définit la valeur du champ duration sur 1.30.

*|eval duration = toduration("1.30")

L'exemple suivant définit la valeur du champ duration sur une valeur numérique qui correspond à la différence entre End Time et Start Time.

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

Les exemples suivants illustrent l'utilisation des fonctions de date.

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

Vous pouvez utiliser les fonctions de hachage MD5, SHA1, SHA256 et SHA512 avec la commande eval pour filtrer les données de journal. L'exemple suivant définit la valeur du champ user avec la valeur sha1("jane").

*|eval user = sha1("jane")

L'exemple suivant convertit un hexadécimal en décimal et n est évalué à 255 :

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

L'exemple suivant convertit un nombre octal en nombre décimal et n est évalué à 10 :

* | eval n = toNumber('012')

Exemples pour la fonction unit

Quelques exemples 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')

Exemples d'unités courantes telles que les octets, la devise et la durée :

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

Exécutez les trois requêtes ci-dessus sur la visualisation en mosaïque avec l'option Numéro de format cochée pour obtenir les meilleurs résultats.

Un champ avec une unité de taille ou de durée est utilisé pour formater les valeurs dans le graphique d'analyse de lien, ajouter des champs, les histogrammes, la table de liens et la visualisation de mosaïque :

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

Marquez un champ comme contenant des dollars américains, des milliers de dollars américains, des millions de dollars américains ou des milliards de dollars américains, respectivement :

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

Types pris en charge pour la fonction unit

Noms d'unité :

  • PERCENT | PCT
  • Taille des données:
    • BYTE
    • KILOBYTE | KB
    • MEGABYTE | MB
    • GIGABYTE | GB
    • TERABYTE | TB
    • PETABYTE | PB
    • EXABYTE | EB
  • Durée :
    • 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
  • Puissance :
    • WATT
    • KILOWATT | kW
    • MEGAWATT | MW
    • GIGAWATT | GW
    • TERAWATT | TW
    • PETAWATT | PW
    • EXAWATT | EW
  • Température:
    • KELVIN | K
    • CELSIUS | C
    • FAHRENHEIT | F
  • Fréquence :
    • HERTZ | Hz
    • KILOHERTZ | kHz
    • MEGAHERTZ | MHz
    • GIGAHERTZ | GHz
    • TERAHERTZ | THz
    • PETAHERTZ | PHz
    • EXAHERTZ | EHz

Types de devise pris en charge dans la fonction unit

Vous pouvez utiliser cette fonction pour la commande eval uniquement sous la commande link. Reportez-vous à des exemples de liens de commande eval pour utiliser la fonction dans des scénarios standard.

Indiquez l'unité monétaire au format suivant :

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)

Les suffixes _k, _m et _b sont utilisés pour indiquer la devise en milliers, millions ou milliards, respectivement. Pour obtenir la liste complète des codes devise, reportez-vous à la section Normes ISO.

NLS_Territory Symbole monétaire
AFGHANISTAN AFN
ALBANIE ALL
ALGERIE DZD
AMERIQUE EUR
ANGOLA AOA
ANTIGUA ET BARBUDA XCD
ARGENTINE RA
ARMÉNIE AMD
ARUBA JFA
AUSTRALIE AUD
AUTRICHE EUR
AZERBAÏDJAN AZN
BAHAMAS BSD
BARHEIN BHD
BANGLADESH BDT
BARBADE BBD
BÉLARUS BYN
BELGIQUE EUR
BELIZE BZD
BERMUDES BMD
BOLIVIE BOB
BOSNIE-HERZÉGOVINE BAM
BOTSWANA BWP
BRESIL BRL
BULGARIE BGN
CAMBODGE KHR
CAMEROUN XAF
CANADA CA
ÎLES CAÏMANS KYD
CHILE CLP
CHINE CNY
COLOMBIE CdA
CONGO-BRAZZAVILLE XAF
CONGO KINSHASA CDF
COSTA RICA CRC
CROATIE HRK
CURAÇAO ANG
CHYPRE EUR
CZECH REPUBLIC CZK
DANEMARK DKK
DJIBOUTI Palette DJF
DOMINIQUE XCD
RÉPUBLIQUE DOMINICAINE Degré de parallélisme
EQUATEUR EUR
EGYPTE EGP
EL SALVADOR Cryptogramme visuel
ESTONIE EUR
ETHIOPIE ETB
FINLANDE EUR
FRANCE EUR
FYR MACÉDONIE MKD
GABON XAF
GÉORGIE GEL
ALLEMAGNE EUR
GHANA SGH
GRÈCE EUR
GRENADE XCD
GUATEMALA GTQ
GUYANA Année précédente
Haïtien HTG
HONDURAS HNL
HONG KONG HKD
HONGRIE HUF
ISLANDE ISK
INDE INR
INDONESIE Reconnaissance intelligente de documents
IRAN IRR
IRAQ IQD
IRLANDE EUR
ISRAËL ILS
ITALIE EUR
CÔTE D'IVOIRE XOF
JAMAÏQUE JMD
JAPON JPY
JORDANIE JOD
KAZAKHSTAN KZT
KENYA KES
COREE KRW
KOWEIT KWD
KYRGYZSTAN KG
LAISSE LAK
LETTONIE EUR
LIBAN LBP
LIBYE Année précédente
LIECHTENSTEIN CHF
LITUANIE EUR
LUXEMBOURG EUR
MACAO TOP
MALAWI MWK
MALAISIE MYR
MALDIVES RVM
MALTA EUR
MAURITANIE URG
MAURICE MUR
MEXIQUE MXN
MOLDAVIE MDL
MONTENEGRO EUR
MAROC MAD
MOZAMBIQUE MZN
MYANMAR MMK
NAMIBIE Distributeur à Valeur Ajoutée
NEPAL NPR
NOUVELLE-ZELANDE NZD
NICARAGUA NIO
NIGERIA NGN
NORVEGE NOK
OMAN Remplacement de mouvement de commande (OMR)
PAKISTAN PKR
PANAMA Tabulation
PARAGUAY PYG
PÉRIODE PEN
PHILIPPINES PHP
POLOGNE PLN
PORTUGAL EUR
PORTO RICO EUR
QATAR Rapport d'activité
ROUMANIE RON
RUSSIE RUB
SAINT-CHRISTOPHE-ET-NIÉVÈS XCD
SAINTE-LUCIE XCD
ARABIE SAOUDITE SAR
SÉNÉGAL XOF
SERBIA RSD
SIERRA LEONE SLL
SINGAPOUR SGD
SLOVAQUIE EUR
SLOVENIE EUR
SOMALIE SOS
AFRIQUE DU SUD ZAR
SOUDAN DU SUD SSP
ESPAGNE EUR
SRI LANKA LKR
SOUDAN ODD
SURINAME DA
SUISSE SZL
SUEDE SEK
SUISSE CHF
SYRIE SYP
TAIWAN TWD
TANZANIE TZS
THAILANDE THB
PAYS-BAS EUR
TRINIDAD ET TOBAGO Cumul depuis l'origine
TUNISIE TND
TURQUIE TRY
TURQUIE TMT
UGANDA UGX
UKRAINE UAH
EMIRATS ARABES UNIS AED
ROYAUME-UNI GBP
URUGUAY UYU
OUZBEKISTAN UZS
VENEZUELA VES
VIETNAM VND
YEMEN Année précédente
ZAMBIE ZMW
ZIMBABWE ZWL

indexof Détails de la fonction

Syntaxe de la fonction index0f :

indexof (String, String [,int])

indexof (chaîne, chaîne [,start_pos]) : le nombre d'index commence par 0, renvoie l'index de correspondance à partir de start_pos (le cas échéant) et renvoie -1 en l'absence de correspondance.

L'exemple suivant définit la valeur du champ newField avec la position de .com dans la chaîne uri.

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

Cas d'utilisation : extraire la partie pertinente du chemin d'API à partir du champ Journal d'audit OCI, Chemin

Le champ Chemin contient une valeur telle que /apis/coordination.k8s.io/v1/namespaces/default/leases/oracle.com-oci.

Vous pouvez extraire la valeur coordination.k8s du champ ci-dessus en procédant comme suit :

  • Recherchez la position des premier et deuxième / à l'aide de la fonction indexOf().
  • Trouvez la position du troisième /.
  • Extrayez les valeurs après le deuxième /, jusqu'au troisième /, à l'aide de la fonction 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

Exemple de sortie :


Cas d'utilisation : extraire la partie pertinente du chemin d'API à partir du champ Journal d'audit OCI, Chemin

lastindexof Détails de la fonction

Syntaxe de la fonction lastindexof :

lastindexof(String, String, int)

lastindexof (chaîne, chaîne [, end_pos]) : le nombre d'index commence par 0, renvoie l'index de la dernière occurrence de la sous-chaîne avant end_pos (le cas échéant) et renvoie -1 en l'absence de correspondance. L'argument end_pos est facultatif.

Voici quelques exemples d'utilisation de la fonction lastindexof :

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

Cas d'emploi : extrayez la zone à partir du champ Type dans les journaux d'audit OCI

Le champ Type contient une valeur telle que com.oraclecloud.computeApi.GetInstance.

Pour extraire computeAPI de la valeur ci-dessus, vous pouvez utiliser le schéma suivant :

  • Identifiez la position du dernier élément . à l'aide de lastIndexOf().
  • A partir de ce décalage, identifiez la position de l'élément . précédent, à l'aide d'un autre élément lastIndexOf(), mais en fournissant le décalage à partir duquel effectuer une recherche rétrospective.
  • Extrayez la valeur entre ces deux positions à l'aide de 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

Exemple de sortie :


Cas d'utilisation : extraction de la zone à partir du champ Type dans les journaux d'audit OCI

replace Détails de la fonction

Syntaxe de la fonction replace :

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

replace prend en charge plusieurs remplacements dans une même fonction. Voici quelques exemples d'utilisation de la fonction replace :

  • *|eval newField = replace('aabbcc', 'bb', 'xx')
  • *|eval newField = replace('aabbcc', 'bb', 'xx', 'cc', 'yy')
  • Exemple d'actions de remplacement multiples dans une seule fonction 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 Détails de la fonction

Syntaxe de la fonction substr :

substr(String, int [, int])

substr(Chaîne, start_pos, end_pos - 1) : le nombre d'index commence par start_pos et se termine par end_pos - 1.

Dans l'exemple suivant, newField est la sous-chaîne de aabbcc, où l'index de début (inclus) est 2 et l'index de fin (exclu) est 4. Pour les chaînes, le nombre d'index commence par 0. La sous-chaîne résultante est donc bb.

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

Pour les cas d'emploi où la fonction substr est utilisée, reportez-vous à Détails de la fonction indexof et à Détails de la fonction lastindexof.

Détails de la fonction url

Syntaxe de la fonction url :

url(String, Name, Parameter)

Les valeurs Name et Parameter sont facultatives.

  • String : il peut s'agir d'une URL ou de l'un des noms abrégés prédéfinis. Par exemple :
    eval Link = url('https://www.oracle.com')
  • Name : nom facultatif de l'URL. Par exemple :
    eval Link = url('https://www.oracle.com', 'Oracle Home Page')
  • Parameter : paramètre facultatif si un raccourci est utilisé pour String. Par exemple :
    eval Link = url('tech', 'Search Oracle', 'ORA-600')

Voici quelques exemples d'utilisation de la fonction 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

Exemples d'utilisation de la fonction url après la commande 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)

Réductions url définies par Oracle

Les raccourcis définis par Oracle suivants peuvent être utilisés avec la fonction url pour la commande eval.

Short-Cut URL et description Exemple

ora

search:oracle

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

Générer un lien pour rechercher toutes les chaînes spécifiées dans oracle.com

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

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

technologie

oracle-tech

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

Générer un lien pour rechercher dans les forums de technologie 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=

Générer un lien pour rechercher dans les forums 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=

Générer un lien pour effectuer une recherche à l'aide de Google

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

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

Générer un lien pour effectuer une recherche à l'aide de Bing

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

ddg

canard de canard

https://duckduckgo.com/?q=

Générer un lien de recherche à l'aide de DuckDuckGo

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

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

so

dépassement de pile

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

Générer un lien de recherche à StackOverflow

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

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

ve

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

Générer un lien pour l'ID CVE indiqué

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