如何在Splunk中按Cassandra日志的large partition大小排序事件?
实现方案
该需求可以直接通过Splunk的字段提取+排序能力实现,完整查询语句如下:
index="*-mycass-db" "large partition" # 提取分区大小的数值和单位 | rex "\((?<size_num>\d+\.?\d*)(?<size_unit>[KMG]iB)\)" # 提取键空间、表名(可选,方便排查问题) | rex "Writing large partition (?<keyspace>[^/]+)/(?<table>[^:]+):" # 把不同单位的大小统一换算为字节,避免单位不同导致排序错误 | eval size_bytes = case( size_unit="KiB", size_num * 1024, size_unit="MiB", size_num * 1024 * 1024, size_unit="GiB", size_num * 1024 * 1024 * 1024 ) # 按大小降序排序 | sort - size_bytes # 可选:只保留最大的1条结果,取消下方注释即可生效 # | head 1 # 可选:指定要展示的字段,过滤冗余信息 | table _time host keyspace table size_num size_unit size_bytes
各部分逻辑说明:
- 字段提取:通过
rex命令用正则匹配日志中括号内的大小信息,拆分出纯数值的size_num和单位size_unit两个字段 - 单位换算:用
eval+case把不同单位的大小统一换算为字节数存储到size_bytes字段,避免出现1GiB排在999MiB之后的字符串排序错误 - 排序:
sort命令前面加-代表降序排序,排序字段选择统一换算后的size_bytes即可得到从大到小的结果 - 结果过滤:如果只需要最大的一条,取消注释
| head 1即可 - 结果展示:通过
table命令可以自定义要展示的字段,过滤冗余信息
内容的提问来源于stack exchange,提问作者nmakb
相关产品推荐
相关产品推荐

