如何解决使用stats时如何从字段中提取值
查询:
index = test
| stats values(*) as * by ip_addr,location
| where location="USA"
| fields timestamp,user,ip,location,message
结果:
+--------------------------------------------------------------------+
| timestamp | user | ip | location | message |
+--------------------------------------------------------------------+
| 08/08/2020 17:00 | thomas | 10.10.10.10 | USA | Hello,world!|
| 08/08/2020 17:05. | unknown| | | I love steak!|
| 08/08/2020 17:10. | | | | I love soda! |
+--------------------------------------------------------------------+
| 08/08/2020 17:00 | jeffry | 10.10.10.20 | USA | Hello,world!|
| 08/08/2020 17:35 | unknown| | | I love pancke|
| 08/08/2020 17:40 | | | | I love waffle|
+--------------------------------------------------------------------+
我要:
- 使那些多个时间戳成为单个时间戳
- 删除“用户”字段中的“未知”值
- 在“邮件”字段中仅显示“世界您好!” -我不在乎其余的。
我试图做:
index = test
| stats values(*) as * by ip_addr
| where location="USA"
| eval user=replace(user,"unknown","")
| fields timestamp,message
但是它将删除“用户”字段下的所有值。有什么建议吗?我的2号和3号目标看起来很相似。如果我可以破解其中任何一个,我想我可以轻松解决另一个。
解决方法
是的,如果时间戳为纪元(整数)形式,则可以将其取平均值。 values(*)
函数的结果是一个多值字段,该字段不能与replace
或其他大多数不适用于它们的命令和函数一起很好地工作。这就是为什么我在下面使用mvfilter
和mvdedup
命令。
index = test
| where location="USA"
| stats earliest(timestamp) as timestamp,values(*) as * by ip_addr
| eval user=mvdedup(mvfilter(!match(user,"unknown")),message=mvdedup(mvfilter(match(message,"Hello,world!"))
| fields timestamp,user,ip,location,message
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。