Getting Data In

Lookup field and use it as "Text Form Input Element"

Motivator

Hi,

is it possible to add field via lookup and use this as text form input element?
I tried it out by using this xml, but it did not work:

Here is my example:

<fieldset autoRun="true" submitButton="true">
<input type="text" token="country_code" searchWhenChanged="true">
<label>Enter an countrycode</label>
<default>*</default>
<default/>
</input>
<input type="time">
<default>Today</default>
</input>
</fieldset>
<row>
<table>
<title>test1</title>
<searchString>sourcetype=A country_code=$country_code$
| lookup lookup.csv user OUTPUT country_code
| stats count</searchString>"

BR
Heinz

Tags (2)
0 Karma
1 Solution

SplunkTrust
SplunkTrust

400000 Einträge wäre kein Ding, wenn für einen country_code nur ein Bruchteil davon zurückgegeben werden... aber tendentiell wird das nicht gleich verteilt sein.

Der automatic lookup macht die Felder immer verfügbar. Sie werden aber nicht immer geladen, zum Beispiel wenn du ein reporting command ohne Verwendung der Felder des Lookups anhängst und nicht anhand des Lookups filterst und nicht im verbose mode bist, wird der Lookup - wie alle unnötigen field extractions - nicht geladen.

Schau in den job inspector was am meisten Zeit verbrät. Ich rate alles um fetch herum, also Events laden.

View solution in original post

SplunkTrust
SplunkTrust

400000 Einträge wäre kein Ding, wenn für einen country_code nur ein Bruchteil davon zurückgegeben werden... aber tendentiell wird das nicht gleich verteilt sein.

Der automatic lookup macht die Felder immer verfügbar. Sie werden aber nicht immer geladen, zum Beispiel wenn du ein reporting command ohne Verwendung der Felder des Lookups anhängst und nicht anhand des Lookups filterst und nicht im verbose mode bist, wird der Lookup - wie alle unnötigen field extractions - nicht geladen.

Schau in den job inspector was am meisten Zeit verbrät. Ich rate alles um fetch herum, also Events laden.

View solution in original post

SplunkTrust
SplunkTrust

Gerne - falls du mal vor-Ort-Hilfe brauchst...

0 Karma

Motivator

Klasse, danke dir

0 Karma

SplunkTrust
SplunkTrust

Klar - in der UI kannst du in der Lookup Definition unter Advanced Options die Minimum Matches auf 1 und die Default Matches auf "N/A" setzen. In transforms.conf übersetzt sich das dann in folgendes:

[lookup_name]
filename = lookup.csv
min_matches = 1
default_matches = N/A

Edit: so ein Denglisch 😄

Motivator

Kannst du mir noch verraten, wie ich einen fest definierten Wert einfüge, sofern es keinen match beim automatic lookup gibt?

Mit einem normalen lookup würde ich es so lösen:

| lookup lookup.csv user OUTPUT countrycode
| fillnull valu="N/A" country
code

0 Karma

Motivator

Klingt gut, dann werde ich es mal mit einem automatic lookup versuchen.
Vielen Dank!

Motivator

Schon mal vielen Dank für deine Hilfe!

Es sind momentan über 400.000 Einträge im Lookup. Also muss ich wohl die zweite Variante nutzen.

Ein automatic Lookup würde dann in jeder Suche mit dem sourcetype verwendet werden richtig? Wenn er nicht immer benötigt wird, macht es evtl mehr Sinn ihn nur bei Bedarf zu setzen um ansonsten Performance zu sparen.

Welchen Unterschied macht es in obiger Suche eigentlich ob ich

 | where country_code="$country_code$"

oder

 | search country_code="$country_code$"

Mit "search" könnten ja wildcards genutzt werden.

0 Karma

SplunkTrust
SplunkTrust

Was schneller ist hängt vom Datensatz ab. Bei Millionen von Usern wird die subsearch fehlschlagen, bei wenigen Usern und vielen nicht-matchenden Events wird die andere Suche langsam sein, weil erst alle Events geladen werden müssen.
Wie viele Einträge hat das größte Land im Lookup?

Wenn du den zweiten Weg gehst, kannst du den Lookup als automatic konfigurieren, dann kannst du direkt in der ersten Suche danach filtern. Am alles-Laden-müssen ändert das allerdings nix.

Motivator

z.B. so:

* Today



test1
sourcetype=A countrycode=$countrycode$
| lookup lookup.csv user OUTPUT countrycode
| where country
code="$country_code$"
| stats count
"

scheint auf den ersten Blick zu funktionieren.
dann ist allerdings kein ALL, * etc mehr möglich

0 Karma

Motivator

Super, das funktioniert schon mal.
Aber ist eine subsearch nicht unpraktisch, weil es ein Limit für die Ergebnisse gibt? Außerdem wird die Suche extrem langsam.
Wäre es nicht besser die Events im nachhinein zu filtern, wenn der Lookup schon durch ist?

0 Karma

SplunkTrust
SplunkTrust

Na klar 🙂

Jetzt lese ich erst, was du wirklich willst... Nutzer tippt country_code ein, Splunk lädt den Lookup und filtert danach. Probier mal folgende Suche bei unverändertem XML:

sourcetype=A [inputlookup lookup.csv | search country_code="$country_code$" | fields user] | stats Count

Das sucht nach den Usern, die im Lookup den jeweiligen country_code haben... ohne vorher alle zu laden 🙂

Motivator

Hi Martin,
können wir wieder auf Deutsch umschwenken? 🙂
Ich bewege mich grad zum ersten mal auf diesem xml-Terrain und weiß nicht genau was du meinst. Wo könnte ich den lookup command evtl hinschieben?

0 Karma

SplunkTrust
SplunkTrust

Did you try using the lookup search in the populatingSearch element of the Input?

Edit: NVM that, misread the question...