Getting Data In

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

HeinzWaescher
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

martin_mueller
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

martin_mueller
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.

martin_mueller
SplunkTrust
SplunkTrust

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

0 Karma

HeinzWaescher
Motivator

Klasse, danke dir

0 Karma

martin_mueller
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 😄

HeinzWaescher
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 country_code
| fillnull valu="N/A" country_code

0 Karma

HeinzWaescher
Motivator

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

HeinzWaescher
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

martin_mueller
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.

HeinzWaescher
Motivator

z.B. so:

* Today



test1
sourcetype=A country_code=$country_code$
| lookup lookup.csv user OUTPUT country_code
| 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

HeinzWaescher
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

martin_mueller
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 🙂

HeinzWaescher
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

martin_mueller
SplunkTrust
SplunkTrust

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

Edit: NVM that, misread the question...

Get Updates on the Splunk Community!

.conf24 | Registration Open!

Hello, hello! I come bearing good news: Registration for .conf24 is now open!   conf is Splunk’s rad annual ...

ICYMI - Check out the latest releases of Splunk Edge Processor

Splunk is pleased to announce the latest enhancements to Splunk Edge Processor.  HEC Receiver authorization ...

Introducing the 2024 SplunkTrust!

Hello, Splunk Community! We are beyond thrilled to announce our newest group of SplunkTrust members!  The ...