2

私は splunk を初めて使用し、2 つの異なるクエリの 2 つの列の値を比較する際に問題に直面しています。

クエリ 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

クエリ 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

これらは私の2つの異なるクエリです。A_from列の各値と列の各値を比較しB_from、値が一致する場合は、それらの値を表示しますA_from

出来ますか?

2 つのクエリを個別に実行し、それぞれの結果を csv にエクスポートしてvlookup関数を使用しました。しかし問題は、エクスポートできるデータの最大行数が 10000 に制限されているため、データ検索に 10000 を超えるレコードがあるため、多くのデータを見逃すことです。何か助けはありますか?

4

2 に答える 2

1

これを 2 つの別個のクエリとして保持する必要がある理由がわかりません。すべてが同じソースタイプから来ており、ほぼ同一のデータを使用しています。だから私は次のようなことをします:

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 

これは、call_id と、A_to と A_from または B_to と B_from のいずれかを持つ、指定したソースタイプとインデックスからすべてのイベントを取得します。次に、そのすべてを処理し、「xyz イベント:」に基づいてフィルタリングできます (それが何であれ)。

次に、A_from == B_from の場合は A_from を表示する「to」という新しいフィールドを作成し、それ以外の場合は「no_match」を表示します (一致しない場合に何をすべきかを指定しなかったため、プレースホルダー)

トランザクションを使用せずにこれに対処する可能性のある方法もあります。基礎となるデータの詳細は不明ですが、確かなことは言えません。基本的な考え方は、共通のフィールド (この場合は call_id) がある場合、コストのかかるトランザクション コマンドの代わりに統計情報を使用して、そのフィールドに関連付けられた値を収集できるということです。

例えば:

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 

call_id ごとに値が 1 つしかない場合は、first() または last() を使用しても実際には問題になりません。(min() max() av​​g() を使用することもできますが、同じことが得られます) おそらく、これにより、必要な出力がより簡単に得られるようになるでしょう。

于 2013-04-17T18:47:19.163 に答える