eval
Mit dem Befehl eval
können Sie den Wert eines Ausdrucks berechnen und in einem neuen Feld anzeigen.
-
Während der Befehl
stats
Statistiken auf Basis vorhandener Felder berechnet, erstellt der Befehleval
neue Felder mit vorhandenen Feldern und beliebigen Ausdrücken. -
Zeichenfolgenverarbeitungsfunktionen wie
indexof
undsubstr
sind ressourcenintensiv. Daher wird die Ausführung des Befehlseval
mit diesen Funktionen für eine große Anzahl von Logdatensätzen oder für große Feldwerte nicht empfohlen. Extrahieren Sie diese Werte stattdessen mit den erweiterten Felddefinitionen (EFD) oder Labels in Ihrer Logquelle. Siehe Erweiterte Felder in Quellen verwenden und Labels in Quellen verwenden. -
Stellen Sie sicher, dass der im Befehl
eval
verwendete Feldname die Zeichen[
und]
nicht enthält.
Syntax
Mit dem Befehl verfügbare Operatoren und Funktionen
*|eval <new_field_name>=<expression>
In der folgenden Tabelle sind die mit dem Befehl eval
verfügbaren Operatoren aufgelistet.
Kategorie | Beispiel |
---|---|
Arithmetische Operatoren |
+ , - , * , / , % |
Vergleichsoperatoren |
= , != , < , > , <= , >= |
Logische Operatoren |
and , or , not |
Bedingungsoperatoren |
if(<expression>,<expression>,<expression>) |
Mehrere Vergleichsoperatoren |
in , not in |
In der folgenden Tabelle sind die mit dem Befehl eval
verfügbaren Funktionen aufgelistet.
Kategorie | Beispiel |
---|---|
Zeichenfolgenfunktionen |
|
Numerische Funktionen |
|
Datumsfunktionen |
Ähnlich wie der Befehl
|
Bedingungsfunktionen |
|
Hashfunktionen |
Hinweis: Die Funktionen |
-
Für die
concat()
-Funktion können Sie numerische Datentypen wie Integer, Float oder Long eingeben. Die numerischen Felder werden automatisch in die entsprechenden Zeichenfolgenwerte konvertiert. -
Mit
||
können Sie n Eingaben verketten. Auch hier können Sie numerische Datentypen eingeben, die automatisch in die entsprechenden Zeichenfolgenwerte konvertiert werden.
Parameter
In der folgenden Tabelle sind die in diesem Befehl verwendeten Parameter sowie deren Beschreibungen aufgeführt.
Parameter | Beschreibung |
---|---|
|
Geben Sie den Namen des Feldes an, in dem der berechnete Wert des Ausdrucks angezeigt werden soll. |
|
Geben Sie den Ausdruck an, für den der Wert berechnet werden soll. |
Beispiele zur Verwendung dieses Befehls in typischen Szenarios finden Sie unter:
- Felder durch Bearbeiten der Abfrage umbenennen
- Einheit für ein Feld zur Abfragezeit markieren
- Histogrammdiagramm
- Zeitreihendaten mit dem Linktrendfeature visualisieren
- Diagramme mit virtuellen Feldern generieren
- Link mit SQL-Anweisung als Analysefeld
- Zeit zwischen Schritten in einer Transaktion analysieren
- Mit Linknavigationsfunktionen Ereignisse in einer Datenbank identifizieren
- URLs zu Linktabelle hinzufügen
- URL-Short-Cut mit benutzerdefiniertem Namen verwenden
- Währungssymbole in der Loganalyse verwenden
Beispiele für den Befehl 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)
Im folgenden Beispiel werden die IP-Adressen im Feld srvrhostip
mit einem Subnetzbereich verglichen.
*|eval newField = if (cidrmatch(srvrhostip, '192.0.2.254/25') = 1, 'local', 'not local')
Im folgenden Beispiel wird die Zeichenfolge "Target" zurückgegeben.
*|eval newField = literal(Target)
Im folgenden Beispiel werden die Leerzeichen und Tabulatorzeichen von beiden Enden entfernt.
*|eval newField = trim(Label)
Im folgenden Beispiel wird das übereinstimmende Zeichen von beiden Enden entfernt.
*|eval newField = trim('User Name',h)
Im folgenden Beispiel wird das übereinstimmende Zeichen vom linken Ende entfernt.
*|eval newField = ltrim('Error ID',0)
Im folgenden Beispiel wird das übereinstimmende Zeichen vom rechten Ende entfernt.
*|eval newField = rtrim('OS Process ID',2)
Im folgenden Beispiel wird das Feld date
auf Start Date
gesetzt und das Format des Datums als MM/dd/yyyy HH:mm
definiert.
*|eval date = toDate('Start Date', 'MM/dd/yyyy HH:mm')
Die Funktion toDate
kann auch verwendet werden, um Epochen wie folgt zu behandeln:
... | where 'Start Time' > toDate(1405544998000)
Im folgenden Beispiel wird der Wert des Feldes duration
auf 1.30
gesetzt.
*|eval duration = toduration("1.30")
Im folgenden Beispiel wird der Wert des Feldes duration
auf einen numerischen Wert gesetzt, der die Differenz zwischen End Time
und Start Time
darstellt.
*|eval duration = formatDuration('End Time' - 'Start Time')
Die folgenden Beispiele veranschaulichen die Verwendung von Datumsfunktionen.
*| 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()
Sie können die Hashfunktionen MD5, SHA1, SHA256 und SHA512 mit dem eval-Befehl verwenden, um Logdaten zu filtern. Im folgenden Beispiel wird der Wert des Feldes user
mit dem Wert sha1("jane")
festgelegt.
*|eval user = sha1("jane")
Im folgenden Beispiel wird ein Hexadezimalwert in eine Dezimalzahl konvertiert, und n ergibt 255:
* | eval n = toNumber('0xFF')
Im folgenden Beispiel wird eine Oktalzahl in eine Dezimalzahl konvertiert, und n ergibt 10:
* | eval n = toNumber('012')
Beispiele für die Funktion unit
Einige einfache Beispiele:
* | 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')
Beispiele für gemeinsame Einheiten wie Byte, Währung und Dauer:
* | 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'
Führen Sie die oben genannten drei Abfragen zur Kachelvisualisierung aus, und aktivieren Sie die Option Formatnummer, um die besten Ergebnisse zu erzielen.
Ein Feld mit dem Typ unit für Größe oder Dauer wird verwendet, um die Werte in der Visualisierung "Link Analyze", "addfields" und "Link Table" zu formatieren:
'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'
Markieren Sie ein Feld mit US-Dollar, Tausenden US-Dollar, Millionen US-Dollar oder Milliarden US-Dollar:
| 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)
Unterstützte Typen für die unit
-Funktion
Einheitsnamen:
PERCENT | PCT
- Datengröße:
BYTE
KILOBYTE | KB
MEGABYTE | MB
GIGABYTE | GB
TERABYTE | TB
PETABYTE | PB
EXABYTE | EB
- Uhrzeit:
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
- Energie:
WATT
KILOWATT | kW
MEGAWATT | MW
GIGAWATT | GW
TERAWATT | TW
PETAWATT | PW
EXAWATT | EW
- Temperatur:
KELVIN | K
CELSIUS | C
FAHRENHEIT | F
- Häufigkeit:
HERTZ | Hz
KILOHERTZ | kHz
MEGAHERTZ | MHz
GIGAHERTZ | GHz
TERAHERTZ | THz
PETAHERTZ | PHz
EXAHERTZ | EHz
Unterstützte Währungstypen in der Funktion unit
Sie können diese Funktion nur unter dem Befehl link
für den Befehl eval
verwenden. Informationen zur Verwendung der Funktion in typischen Szenarios finden Sie in den Beispiellinks des Befehls eval
.
Geben Sie die Währungseinheit im folgenden Format an:
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)
Die Suffixe _k
, _m
und _b
werden verwendet, um die Währung in Tausenden, Millionen oder Milliarden anzugeben. Eine vollständige Liste der Währungscodes finden Sie unter ISO Standards.
NLS_Territory |
Currency |
---|---|
AFGHANISTAN | Nachname |
ALBANIEN | ALL |
ALGERIEN | DZD |
AMERIKA | USD |
ANGOLA | AOA |
ANTIGUA UND BARBUDA | XCD |
ARGENTINIEN | ARS |
ARMENIEN | AMD |
ARUBA | AWG |
AUSTRALIEN | AUD |
ÖSTERREICH | EUR |
ASERBAIDSCHAN | AZN |
BAHAMAS | BSD |
BAHRAIN | BHD |
BANGLADESCH | BDT |
BARBADOS | BBD |
BELARUS | BYN |
BELGIEN | EUR |
BELIZE | BZD |
BERMUDA | BMD |
BOLIVIEN | BOB |
BOSNIEN UND HERZEGOWINA | BAM |
BOTSUANA | BWP |
BRASILIEN | BRL |
BULGARIEN | BGN |
KAMBODSCHA | KHR |
KAMERUN | XAF |
KANADA | CAD |
CAYMANINSELN | KYD |
CHILE | CLP |
CHINA | CNY |
KOLUMBIEN | COP |
DEMOKRATISCHE REPUBLIK KONGO | XAF |
KONGO KINSHASA | Kumulative Verteilungsfunktion |
COSTA RICA | CRC |
KROATIEN | HRK |
CURAÇAO | ANG |
ZYPERN | EUR |
CZECH REPUBLIC | CZK |
DÄNEMARK | DKK |
DSCHIBUTI | DJF |
DOMINICA | XCD |
DOMINIKANISCHE REPUBLIK | DOP |
ECUADOR | USD |
EGYPTEN | EGP |
EL SALVADOR | SVC |
ESTLAND | EUR |
ÄTHIOPIEN | ETB |
FINLAND | EUR |
FRANKREICH | EUR |
FYR MAZEDONIEN | MKD |
GABON | XAF |
GEORGIA | GEL |
DEUTSCHLAND | EUR |
GHANA | GHS |
GREECE | EUR |
GRENADA | XCD |
GUATEMALA | GTQ |
GUYANA | GYD |
HAITI | HTG |
HONDURAS | HNL |
HONGKONG | HKD |
UNGARN | HUF |
ISLAND | ISK |
INDIEN | INR |
INDONESIEN | IDR |
IRAN | IRR |
IRAQ | IQD |
IRLAND | EUR |
ISRAEL | ILS |
ITALIEN | EUR |
ELFENBEINKÜSTE | XOF |
JAMAIKA | JMD |
JAPAN | JPY |
JORDAN | JOD |
KASACHSTAN | KZT |
KENYA | KES |
KOREA | KRW |
KUWAIT | KWD |
KYRGYZSTAN | KGS |
LAOS | LAK |
LETTLAND | EUR |
LIBANON | LBP |
LIBYA | LYD |
LIECHTENSTEIN | CHF |
LITAUEN | EUR |
LUXEMBURG | EUR |
MACAO | MOP |
MALAWI | MWK |
MALAYSIA | MYR |
MALEDIVEN | MVR |
MALTA | EUR |
MAURITIUS | MRU |
MAURITIUS | Durchschn. |
MEXIKO | MXN |
REPUBLIK MOLDAU | MDL |
MONTENEGRO | EUR |
MAROKKO | MAD |
MOZAMBIQUE | MZN |
MYANMAR | MMK |
NAMIBIA | NAD |
NEPAL | NPR |
NEUSEELAND | NZD |
NIKARAGUA | NIO |
NIGERIA | NGN |
NORWEGEN | NOK |
OMAN | OMR |
PAKISTAN | PKR |
PANAMA | PAB |
PARAGUAY | PYG |
PERU | PEN |
PHILIPPINEN | PHP |
POLAND | PLN |
PORTUGAL | EUR |
PUERTO RICO | USD |
QATAR | QAR |
RUMÄNIEN | RON |
RUSSLAND | RUB |
SAINT KITTS UND NEVIS | XCD |
SAINT LUCIA | XCD |
SAUDI-ARABIEN | SAR |
SENEGAL | XOF |
SERBIA | Direktlieferungsbericht |
SIERRA LEONE | SLL |
SINGAPUR | SGD |
SLOWAKEI | EUR |
SLOWENIEN | EUR |
SOMALIA | SOS |
SOUTH AFRICA | ZAR |
SÜDSUDAN | Einzelverkaufspreis |
SPANIEN | EUR |
SRI LANKA | LKR |
SUDAN | SDG |
SURINAME | SRD |
SWASILAND | SZL |
SCHWEDEN | SEK |
SCHWEIZ | CHF |
SYRIEN | SYP |
TAIWAN | TWD |
TANSANIA | TZS |
THAILAND | THB |
NIEDERLANDE | EUR |
TRINIDAD UND TOBAGO | TTD |
TUNESIEN | TND |
TÜRKEI | TRY |
TURKMENISTAN | TMT |
UGANDA | UGX |
UKRAINE | UAH |
USA | AED |
GROSSBRITANNIEN | GBP |
URUGUAY | UJU |
USBEKISTAN | UZS |
VENEZUELA | VES |
VIETNAM | VND |
JEMEN | YER |
SAMBIA | ZMW |
SIMBABWE | ZWL |
indexof
Funktionsdetails
Die Syntax für die Funktion index0f
:
indexof (String, String [,int])
indexof (Zeichenfolge, Zeichenfolge [,start_pos]): Die Indexanzahl beginnt mit 0, gibt den Übereinstimmungsindex ab start_pos zurück (falls angegeben) und gibt -1 zurück, wenn keine Übereinstimmung vorhanden ist.
Im folgenden Beispiel wird der Wert des Feldes newField
mit der Position von .com
in der uri
-Zeichenfolge festgelegt.
*|eval newField = indexOf(uri, '.com')
Anwendungsfall: Extrahieren Sie den relevanten Teil des API-Pfads aus dem Feld "OCI-Auditlogs", "Pfad"
Das Feld Pfad enthält einen Wert wie /apis/coordination.k8s.io/v1/namespaces/default/leases/oracle.com-oci
.
Sie können den Wert coordination.k8s
aus dem obigen Feld extrahieren, indem Sie die folgenden Schritte ausführen:
- Suchen Sie die Position des ersten und zweiten
/
mit der FunktionindexOf()
. - Suchen Sie die Position der dritten
/
. - Extrahieren Sie die Werte nach dem zweiten
/
bis zum dritten/
mit der Funktionsubstr()
.
'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
Beispielausgabe:

lastindexof
Funktionsdetails
Die Syntax für die Funktion lastindexof
:
lastindexof(String, String, int)
lastindexof (Zeichenfolge, Zeichenfolge [, end_pos]): Die Indexanzahl beginnt mit 0, gibt den Index des letzten Vorkommens der Teilzeichenfolge vor end_pos zurück (falls angegeben) und gibt -1 zurück, wenn keine Übereinstimmung vorhanden ist. Das Argument end_pos ist optional.
Einige Beispiele für die Verwendung der Funktion lastindexof
:
*|eval n = lastindexof(uri, '.com')
Anwendungsfall: Extrahieren Sie die Fläche aus dem Feld Typ in OCI-Auditlogs
Das Feld Typ enthält einen Wert wie com.oraclecloud.computeApi.GetInstance
.
Um computeAPI
aus dem obigen Wert zu extrahieren, können Sie das folgende Schema verwenden:
- Identifizieren Sie die Position des letzten
.
mitlastIndexOf()
. - Identifizieren Sie aus diesem Offset die Position des vorherigen
.
, indem Sie einen anderenlastIndexOf()
verwenden, aber den Offset angeben, von dem zurück gesucht werden soll. - Extrahieren Sie den Wert zwischen diesen beiden Positionen mit
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
Beispielausgabe:

replace
Funktionsdetails
Die Syntax für die Funktion replace
:
replace(String, String, String, String, String, ..)
replace
unterstützt mehrere Ersetzungen in einer einzelnen Funktion. Einige Beispiele für die Verwendung der Funktion replace
:
-
*|eval newField = replace('aabbcc', 'bb', 'xx')
-
*|eval newField = replace('aabbcc', 'bb', 'xx', 'cc', 'yy')
-
Beispiel für mehrere Ersetzungsaktionen in einer einzelnen
replace
-Funktion:* | eval CopiedURL = 'https://cloud.oracle.com/loganalytics/explorer?viz=<VIZ>&encodedQuery=<QUERY>&startTime=<START_TIME>&endTime=<END_TIME>®ion=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
Funktionsdetails
Die Syntax für die Funktion substr
:
substr(String, int [, int])
substr(Zeichenfolge, start_pos, end_pos - 1): Die Indexanzahl beginnt mit start_pos und endet mit end_pos - 1.
Im folgenden Beispiel ist newField
die Teilzeichenfolge von aabbcc
, wobei der Startindex (einschließlich) 2
und der Endindex (ausschließlich) 4
ist. Beachten Sie, dass die Indexanzahl für Zeichenfolgen mit 0
beginnt. Die resultierende Teilzeichenfolge lautet also bb
.
*|eval newField = substr('aabbcc', 2, 4)
Anwendungsfälle, in denen die Funktion substr
verwendet wird, finden Sie unter indexof-Funktionsdetails und lastindexof-Funktionsdetails.
Details zur url
-Funktion
Syntax für die url
-Funktion:
url(String, Name, Parameter)
Die Werte Name und Parameter sind optional.
- String: Dabei kann es sich um eine URL oder einen der vordefinierten Kurznamen handeln. Beispiel:
eval Link = url('https://www.oracle.com')
- Name: Optionaler Name für die URL. Beispiel:
eval Link = url('https://www.oracle.com', 'Oracle Home Page')
- Parameter: Optionaler Parameter, wenn eine Verknüpfung für String verwendet wird. Beispiel:
eval Link = url('tech', 'Search Oracle', 'ORA-600')
Einige Beispiele für die Verwendung der Funktion 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
Beispiele für die Verwendung der Funktion url
nach dem Befehl 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)
Von Oracle definierte url
-Kurzschlüsse
Die folgenden von Oracle definierten Shortcuts können mit der Funktion url
für den Befehl eval
verwendet werden.
Short-Cut | URL und Beschreibung | Beispiel |
---|---|---|
ora Suche:oracle |
https://www.google.com/search?q=site:oracle.com%20 Link generieren, um alle |
|
Technik oracle-tech |
https://community.oracle.com/tech/search?query= Link zum Durchsuchen von Oracle Technologieforen generieren |
|
Mosc oracle-mosc |
https://community.oracle.com/mosc/search?query= Link zum Durchsuchen von My Oracle Support-Foren generieren |
|
https://www.google.com/search?q= Link zur Suche mit Google generieren |
|
|
Bing | https://www.bing.com/search?q= Link zur Suche mit Bing generieren |
|
ddg Entenvogel |
https://duckduckgo.com/?q= Link zur Suche mit DuckDuckGo generieren |
|
so Stackoverflow |
https://stackoverflow.com/search?q= Generieren Sie einen Link zur Suche unter StackOverflow |
|
Cve |
https://www.cve.org/CVERecord?id= Link für die angegebene CVE-ID generieren |
|