2 votes

Comparaison des valeurs dans deux colonnes de deux recherches Splunk différentes

Je suis nouveau dans le monde de Splunk et je suis confronté à un problème de comparaison de valeurs dans deux colonnes de deux requêtes différentes.

Requête 1

index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**" A_to="**" A_from="**" | transaction call_id keepevicted=true | search "xyz event:" | table _time, call_id, A_from, A_to | rename call_id as Call_id, A_from as From, A_to as To

Requête 2

index="abc_ndx" source="*/ jkdhgsdjk.log" call_id="**" B_to="**" B_from="**" | transaction call_id keepevicted=true | search " xyz event:"| table _time, call_id, B_from, B_to | rename call_id as Call_id, B_from as From, B_to as To

Ce sont mes deux requêtes différentes. Je veux comparer chaque valeur dans A_from avec chaque valeur de la colonne B_from et, si la valeur correspond, elle affiche les valeurs de la colonne A_from .

Est-ce possible ?

J'ai exécuté les deux requêtes séparément et exporté les résultats de chacune d'elles dans un fichier csv. vlookup fonction. Mais le problème est qu'il y a un limite de 10000 lignes maximum de données qui peuvent être exportées et donc je manque beaucoup de données comme ma recherche de données a plus de 10000 enregistrements. Avez-vous de l'aide ?

2voto

MHibbin Points 1045

Je n'ai pas de données sur lesquelles tester cela pour le moment, mais ce qui suit devrait vous mettre sur la bonne voie.

Une fois que la table de la première requête est prête, vous devez "acheminer" la chaîne de recherche vers un fichier d'aide à la recherche. appendcols avec votre deuxième chaîne de recherche. Cette commande vous permettra d'exécuter une sous-recherche et d'"importer" une colonne dans votre recherche de base.

Une fois que vous avez les deux colonnes dans le même tableau. Vous pouvez utiliser le eval pour créer un nouveau champ qui compare les deux valeurs et attribue une valeur comme vous le souhaitez.

J'espère que cela vous aidera.

http://docs.splunk.com/Documentation/Splunk/5.0.2/SearchReference/Appendcols http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Eval

1voto

emiller42 Points 93

Je ne vois pas pourquoi il est nécessaire d'en faire deux requêtes distinctes. Tout provient du même type de source et utilise des données presque identiques. Je ferais donc quelque chose comme ce qui suit :

index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**" (A_to="**" A_from="**") OR (B_to="**" B_from="**") 
| transaction call_id keepevicted=true 
| search "xyz event:" 
| eval to=if(A_from == B_from, A_from, "no_match")
| table _time, call_id, to 

Cette opération permet de saisir tous les événements du type de source et de l'index spécifiés, qui ont un numéro d'appel, et soit A_to et A_from, soit B_to et B_from. Ensuite, il traite tout cela, vous permet de filtrer sur la base de l'événement "xyz :" (quel qu'il soit).

Ensuite, il crée un nouveau champ appelé "to" qui affiche A_from lorsque A_from == B_from, sinon il affiche "no_match" (espace réservé puisque vous n'avez pas précisé ce qui doit être fait lorsqu'ils ne correspondent pas).

Il existe également un moyen d'aborder potentiellement ce problème sans utiliser de transactions. Mais sans plus de détails sur les données sous-jacentes, je ne peux pas en être sûr. L'idée de base est que si vous avez un champ commun (call_id dans ce cas), vous pouvez simplement utiliser des statistiques pour collecter les valeurs associées à ce champ au lieu d'une commande de transaction coûteuse.

Par exemple :

index="abc_ndx" index="abc_ndx" source="*/jkdhgsdjk.log" call_id="**"
| stats last(_time) as earliest_time first(A_to) as A_to first(A_from) as A_from first(B_to) as B_to first(B_from) as B_from by call_id 

L'utilisation de first() ou last() n'a pas vraiment d'importance s'il n'y a qu'une seule valeur par call_id. (Vous pouvez même utiliser min() max() avg() et vous obtiendrez la même chose) Peut-être cela vous aidera-t-il à obtenir plus facilement la sortie dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X