where
Verwenden Sie den where
-Befehl, um den Wert eines Ausdrucks als "true" oder "false" zu berechnen.
Themen:
Syntax
*|where <expression>
Mit dem Befehl verfügbare Operatoren
In der folgenden Tabelle sind die mit dem Befehl where
verfügbaren Operatoren aufgelistet.
Kategorie | Beispiel |
---|---|
Arithmetische Operatoren |
+ , - , * , / , % |
Vergleichsoperatoren |
= , != , < , > , <= , >= |
Logische Operatoren |
and , or , not |
Bedingungsoperatoren |
if(<expression>,<expression>,<expression>) |
Mehrere Vergleichsoperatoren |
in , not in |
Mit dem Befehl verfügbare Funktionen
In der folgenden Tabelle sind die mit dem Befehl where
verfügbaren Funktionen aufgelistet.
Kategorie | Beispiel |
---|---|
Zeichenfolgenfunktionen |
|
Numerische Funktionen |
|
Datumsfunktionen |
|
Bedingungsfunktionen |
|
Hashfunktionen |
|
-
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 Ausdruck an, für den der Wert "true" oder "false" berechnet werden soll. |
Benutzerfreundliche Zeitzeichenfolgen im Vergleich
Mit der neuen Funktion kann eine menschenlesbare Zeichenfolge verwendet werden, um die Zeit in der Abfrage zu bearbeiten. In der Vergangenheit war dies mit toDuration()
und der Angabe der Dauer in einem sehr spezifischen Format erforderlich.
Beispiel 1: Fügen Sie einem Zeitstempelfeld eine Dauer hinzu.
*
| eval '10mins. after End Time' = 'Event End Time' + 10mins
| fields 'Event End Time', '10mins. after End Time'
Beispiel 2: Suchen Sie nach Jobs, die mehr als 2 Stunden gedauert haben.
* | where 'Event End Time' - Time > 2hrs
Beispiel 3: Suchen Sie nach Elementen, die mehr als einen Tag oder weniger als wenige Millisekunden gedauert haben.
*
| link
| where Count > 1000 and
('End Time' - 'Start Time' > 3hour or 'End Time' - 'Start Time' < 2ms)
Die Zeitzeichenfolge kann ein Wert sein, der im Parameter span
für timestats
verwendet wird. Siehe die Liste der Werte für timescale
unter timestats.
Beispiele zur Verwendung des Befehls where
in typischen Szenarios finden Sie unter:
Im Folgenden finden Sie einige Beispiele für den Befehl where
.
*|where severity = FATAL
*|where 'Client Host City' = 'redwood city'
*|where upper(severity) = FATAL
*|where length(URI) >= 40
*|where replace('aabbcc', 'bb', 'xx') = aaxxcc
*| where capitalize(severity) = Fatal
*|where concat(host, concat(':', port)) != hostname
*|where contains(uri, '.com')
*|where decode64(value) = decodeValue
*|where encode64(uri) = encodeValue
*|where lastindexOf(uri, '.com') != -1
*|where reverse(Command) = smaraptini
*|where host || ':' || port != hostname
*|where substr('aabbcc', 2, 4) = bb
*|where round('Content Size') = 1000
*|where floor('Content Size') > 1000
*|where max('Content Size In', ''Content Size Out') < 1000
*|where urlDecode('http%3A%2F%2Fexample.com%3A893%2Fsolr%2FCORE_0_0%2Fquery') = URI
*|where urlEncode(uri) = field
*|where 'User Name' in (host1, host2)
Das folgende Beispiel zeigt die Verwendung der Bedingungsfunktion if
:
*|where if(Status = '200', OK, ERROR) = ERROR
Im folgenden Beispiel werden die IP-Adressen im Feld srvrhostip
mit einem Subnetzbereich verglichen.
*|where cidrmatch(srvrhostip, '192.0.2.254/25')
Das folgende Beispiel gibt den Zeichenfolgenwert des Feldes "Delay" zurück.
*|where Status = literal(Delay)
Im folgenden Beispiel wird das übereinstimmende Zeichen von beiden Enden entfernt.
*|where trim(Command,"\") = initparams
Im folgenden Beispiel wird das übereinstimmende Zeichen vom linken Ende entfernt.
*|where ltrim('Error ID',0) = 76890
Im folgenden Beispiel wird das übereinstimmende Zeichen vom rechten Ende entfernt.
*|where rtrim('OS Process ID',2) = 3123
Im folgenden Beispiel wird die Zeichenfolge Start Time
mit 1/1/18
im Datumsformat MM/dd/yy
verglichen.
*|where 'Start Time' > toDate('1/1/18', 'MM/dd/yy')
Das folgende Beispiel berechnet die Differenz zwischen den Werten von End Time
und Start Time
und vergleicht die Zeichenfolge mit der Dauer von 0:0:45
.
*|where 'End Time' - 'Start Time' > toDuration('0:0:45')
Im folgenden Beispiel wird das Format der Dauer als 0:0:45.000
angegeben.
*|where formatDuration('End Time' - 'Start Time') = '0:0:45.000'
Die folgenden Beispiele veranschaulichen die Verwendung von Datumsfunktionen.
*|where 'Start Time' > dateAdd(now(), hour, -1)
*|where 'Start Time' > dateSet(now(), hour, 0, minute, 0, sec, 0, msec, 0)
*|where formatDate('Start Time', 'MM/dd/yyyy') = '01/15/2018'
*|where 'Start Time' - now() > 45000
Das folgende Beispiel berechnet die Position von .com
in der uri
-Zeichenfolge und wertet aus, ob sie ungleich -1
ist.
*| where indexOf(uri, '.com') != -1
Sie können die Hashfunktionen MD5, SHA1, SHA256 und SHA512 mit dem where-Befehl verwenden, um Logdaten zu filtern. Im folgenden Beispiel wird ausgewertet, ob der Wert des Feldes user
md5("jack")
lautet.
*|where user = md5("jack")
Der folgende Befehl teilt den Inhalt des Entityfeldes in zwei Teile auf. Beispiel: Der Entitywert host-phx-1.oraclevcn.com
mit Muster würde in zwei virtuelle Felder mit dem Namen Host und Domain mit dem Domainwert oraclevcn.com
aufgeteilt:
* | extract field = Entity '(?P<Host>\w+)\.?(?P<Domain>.*)'
| where contains(Domain, 'oraclevcn.com')
| timestats count as logrecords by 'Log Source'