2012-04-04 8 views
1

Ich versuche, Informationen aus zwei verschiedenen Protokollen zu einer einzigen Abfrage zu kombinieren, aber ich bin nicht sicher, wie oder ob ich es tun kann. Im Grunde möchte ich, dies zu tun:Wie kann ich Splunk-Feld-Aliase bedingt erstellen?

LOG 1: 
<client=foo userId=1234 version=10> 
<client=foo userId=5432 version=8> 
<client=bar userId=4567 version=4> 

LOG 2: 
fooid=1234 speed=500 
fooid=5432 speed=300 

Was ich versuche Statistiken über die Geschwindigkeit aller Nutzer zu tun ist, sammeln die Version == ist 10.

Von dem, was ich gelesen habe, wenn ich machen ein Alias ​​von userId == fooid, könnte dies möglich sein, so etwas wie dies zu sagen:

fooid=* AND version=10 

Allerdings habe ich das Problem immer noch, dass nicht alle userIds fooids sind. Daher möchte ich in der Lage sein, einen fooid-Feld-Alias ​​in Log 1 zu erstellen, aber nur, wenn der Client = foo ist. Ist das möglich und wenn ja, wie kann ich das tun?

Auch, wenn es eine andere Möglichkeit gibt, diese Suche durchzuführen, würde es sehr geschätzt werden.

Antwort

3

Sie bringen diese Protokolle in den gleichen Index oder haben Sie sie zu separaten Indizes? Sie sollten etwas wie index = FOO OR index = FOO2 | tun können Suche fooid = * AND Version = 10, wenn Sie in separate Indizes bringen.

Es ist eine Suche Spickzettel auf unserer Entwickler-Website (http://dev.splunk.com) - http://dev.splunk.com/web_assets/developers/pdf/splunk_reference.pdf

und die Suche Sprache Referenzhandbuch kann auch helfen: http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/WhatsInThisManual

+0

Jetzt ist der Plan, sie in den gleichen Index zu bringen. Wenn ich sie jedoch in verschiedene Indizes einfügen könnte, würde ich sie loggen können. Wenn sie im selben Index wären, würde dies stattdessen funktionieren: 'Index = FOO (Quellentyp = LOG1 ODER Quellentyp = LOG2) | Suche fooid = * AND Version = 10' – caffein

0

Tun Sie dies bei Suchzeit wie folgt aus: index=FOO OR index=FOO2 | eval mergedID=if(isnotnull(fooid),fooid,userId) | transaction mergedID | stats min(speed) max(speed) avg(speed) by version

1

diese den Trick tun sollten:

index=FOO (sourcetype=LOG1 client=foo version=10) OR (sourcetype=LOG2) 
| eval user=coalesce(fooid,userid) 
| stats avg(speed) by user 

Das Koaleszenzeval sagt "Benutzer ist vertrauenswürdig, wenn es existiert, andernfalls ist Benutzer Benutzer-ID". Ansonsten habe ich einfach die passende Suche gemacht, um einfach die gewünschten Daten und eine einfache Statistik zu erhalten.