TIPS & TRICKS

Smooth Operator | Suche nach mehreren Feldwerten

Die Suche nach unterschiedlichen Werten in einem Feld ist einfacher als ihr denkt.

Angenommen, ihr wollt im Feld „error_code“ nur die Codes 400, 402, 404, und 406 lokalisieren. 

Es ist wirklich mühsam, ein Feld-Wert-Paar nach dem anderen eingeben zu müssen, nur um nach einer Liste von Werten im gleichen Feld zu suchen. Aber genau das musstet ihr vor Splunk Version 6.6.0. tun. Ihr musstet jedes Feld-Wert-Paar als separate OR-Bedingung angeben.

    ...error_code=400 OR error_code=402 OR error_code=404 OR error_code=406...


Verwenden von „IN“ mit dem Suchbefehl

Eine der wichtigsten Verbesserungen des Suchbefehls ist der IN-Operator. Mit dem IN-Operator könnt ihr das Feld und eine Liste von Werten angeben. Beispiel:

    ... error_code IN (400, 402, 404, 406) | ...


Da der Suchbefehl am Anfang einer Suchzeichenfolge implizit verwendet wird, müsst ihr nur einen Feldnamen und eine Liste von Werten angeben. Die Syntax ist ganz simpel: 

    field IN (value1, value2, ...)

Wichtig: Der IN-Operator muss in Großbuchstaben eingegeben werden.

Ihr könnt in der Werteliste auch einen Platzhalter verwenden, um nach ähnlichen Werten zu suchen. Beispiel:

    ... error_code IN (40*) | ...


Diese Suche nimmt das Feld error_code in euren Events unter die Lupe und gibt alle Events mit einem Code zurück, der mit 40 beginnt.

Nicht schlecht, oder?

Im Zusammenhang mit dem Suchbefehl wird diese Funktion „IN-Operator“ genannt. Im Zusammenhang mit den Befehlen eval und where wird sie als „IN-Funktion“ implementiert.

Verwenden von „IN“ mit den Befehlen „eval“ und „where“

Um „IN“ mit den Befehlen eval und where zu verwenden, müsst ihr „IN“ als eval-Funktion einsetzen. In der Splunk-Dokumentation wird das „IN-Funktion“ („in function“) genannt.

Syntax und Verwendung sind etwas anders als beim Suchbefehl.

  • Die IN-Funktion gibt „TRUE“ zurück, wenn einer der Werte in der Liste mit einem Wert im angegebenen Feld übereinstimmt.
  • Zeichenfolgenwerte müssen in Anführungszeichen gesetzt werden. 
  • Ihr könnt keine Platzhalter angeben, um nach ähnlichen Werten wie HTTP-Fehlercodes oder CIDR IP-Adressbereichen zu suchen.


Hier seht ihr die unterstützten Syntaxoptionen:

    ...| eval new_field=if(IN(field,"value1","value2", ...), "value_if_true","value_if_false")
    ...| where field IN("value1","value2", ...)
    ...| where IN(field,"value1","value2", ...)


Hinweis: Im Gegensatz zum IN-Operator kann die IN-Funktion in Groß- oder Kleinbuchstaben angegeben werden. In diesem Blog wird sie zur Verdeutlichung in der Syntax und in Beispielen in Großbuchstaben dargestellt.

Beginnen wir mit dem Befehl where, weil das relativ einfach ist.

Im folgenden Beispiel wird der Befehl where verwendet, um IN=TRUE zurückzugeben, wenn einer der Werte im Feld status mit einem der Werte in der Liste übereinstimmt. Die Werte im Feld status sind HTTP-Statuscodes. Da es sich bei den Codes um Zeichenkettenwerte (keine numerischen Werte) handelt, müsst ihr jeden Wert in Anführungszeichen setzen.

    ... | where status IN("400", "401", "403", "404", "406")


Ihr könntet dieses Beispiel auch folgendermaßen angeben:

    ... | where IN(status,"400", "401", "403", "404", "406")


Mit dem Befehl eval wird die IN-Funktion etwas anders verwendet als mit dem Befehl where. Der Befehl eval akzeptiert nämlich keine booleschen Werte. Daher müsst ihr die IN-Funktion innerhalb einer anderen Funktion verwenden, welche die von der IN-Funktion zurückgegebenen booleschen Werte verarbeiten kann.

Schauen wir uns ein Beispiel an, in dem ihr die IN-Funktion als ersten Parameter für die IF-Funktion verwenden könnt. Wir verwenden die Datei access.log, die in den Daten des Tutorials zur Suchfunktion enthalten ist.

Im folgenden Beispiel wird die IN-Funktion innerhalb der IF-Funktion verwendet, um das Aktionsfeld zu bewerten. Anschließend führt der Befehl „stats“ eine Berechnung aus. 

    sourcetype=access_combined_wcookie 
    | eval activity=if(IN(action, "addtocart","purchase"),"Purchase Related","Other") 
    | stats count by activity


Bei dieser Suche passiert Folgendes:

  • Der Befehl eval erstellt ein neues Feld namens Activity.
  • Wenn das Feld action in einem Event den Wert „addtocart“ oder „purchase“ enthält, wird der Wert „Purchase Related“ (kaufbezogen) im Feld activity platziert.
  • Wenn das Feld action in einem Event einen beliebigen anderen Wert enthält, wird der Wert „Other“ (andere) im Feld activity platziert.
  • Der Befehl stats zählt die Werte „Purchase Related“ und „Other“ im Feld activity.


Die Ergebnisse werden auf der Registerkarte Statistics angezeigt. Hier könnt ihr jetzt ablesen, wie viele Events kaufbezogene Aktivitäten und wie viele andere Aktivitätstypen aufweisen.

Diese Ergebnistabelle ist super. Ihr könnt die Ergebnisse auch in einem Diagramm anzeigen. Dazu wechselt ihr einfach auf die Registerkarte Visualization und ändert den Diagrammtyp in „Kreisdiagramm“ (Pie Chart).

 

Ihr könnt diese Suche als Dashboard Panel oder Report speichern.


Ressourcen

Weitere Informationen findet ihr in den folgenden Splunk-Dokumentationen (alle auf Englisch):

----------------

*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier: Smooth operator | Searching for multiple field values.

Splunk
Posted by

Splunk