按 Splunk 中的多个字段对事件进行分组

Group events by multiple fields in Splunk

您好,我在 splunk 中有一些这种形式的事件-

位置: 一些值(多个事件中可以有相同的值)

客户端: 一些值(相同的值可以出现在多个事件中)

TransactionNumber: 一些值(每个事件唯一)

交易时间:一些值(每个事件唯一)

现在我想要一个 table 这种形式 -

基本上每个位置可以有多个客户,每个客户可以有不同的交易。交易编号和交易时间是唯一的,并且是一一对应的。

我在 splunk 中使用这个查询-

|统计列表(TransactionNumber)列表(TransactionTime)按位置客户端

发生的事情是我得到了位置和客户的独特组合,但我想要的是针对特定位置列出的独特客户。

这就是我得到的-

如何修改查询以达到同样的效果?

这是一个使用 _internal 索引的完整示例

index=_internal

| stats list(log_level) list(component) by sourcetype source

| streamstats count as sno by sourcetype 
| eval sourcetype=if(sno=1,sourcetype,"") 
| fields - sno

对于你的 use-case 我认为这应该有效

| stats list(TransactionNumber) list(TransactionTime) by Location Client
| streamstats count as sno by Location 
| eval Location=if(sno=1,Location,"") 
| fields - sno

如果这解决了您的问题,请花点时间接受答案。这可以通过单击答案旁边的复选标记将其从灰色切换为填充来完成!

干杯

我会这样做:

index=ndx sourcetype=srctp Location=* Client=* TransactionNumber=* TransactionTime=*
| eval TNTT=TransactionNumber+" sep "+TransactionTime
| stats values(TNTT) as TNTT by Location Client
| rex field=TNTT "(?<TransactionNumber>\S+) sep (?<TransactionTime>.+)"
| table Location Client TransactionNumber TransactionTime

这是通过 stats values() 行 carry-over 时间和数字的唯一 one-to-one 映射(如您所描述的),然后将它们分开。

可能 想要 | mvexpand TNTT 在执行 rex 行之前 - 以防您稍后想以其他方式对 table 进行排序