Splunk查询问题:按天统计应用日志大小转MB后仍显示字节
正确的Splunk查询实现方案
原查询的核心问题是:使用timechart ... by app时,每个匹配的应用会生成独立的字段(例如daily_log_size_org-app1、daily_log_size_org-app2),而非统一的daily_log_size字段。后续的eval语句无法定位到不存在的daily_log_size字段,因此转换MB的逻辑完全不生效,导致数据仍以字节显示。
推荐使用更简洁高效的前置转换方案,直接在计算单条日志大小后转为MB,再按天按应用求和:
index="my-index" env="prod" log.level IN ("DEBUG", "WARN") | search app="org-*" | eval log_size_mb=round(len(_raw)/1024/1024, 2) | timechart span=1d sum(log_size_mb) as daily_log_size_mb by app
方案说明
- 前置转换MB:先通过
eval log_size_mb=round(len(_raw)/1024/1024, 2)将单条日志的字节大小转为保留两位小数的MB值 - 按天按应用求和:
timechart直接对MB值求和,生成的每个应用字段(如daily_log_size_mb_org-app1)均为MB单位的统计结果,可直接用于可视化对比
如果需要保留原有的字节计算逻辑再转换,也可以用foreach遍历动态生成的字段进行批量转换:
index="my-index" env="prod" log.level IN ("DEBUG", "WARN") | search app="org-*" | eval log_size=len(_raw) | timechart span=1d sum(log_size) as daily_log_size by app | foreach daily_log_size_* [ eval <<FIELD>>=round(<<FIELD>>/1024/1024, 2) | rename <<FIELD>> as <<MATCHSTR>>_daily_log_size_mb ] | fields - daily_log_size_*
该方案逻辑
- 用
foreach遍历所有以daily_log_size_开头的字段(每个应用对应一个) - 逐个将字节值转为MB并保留两位小数,同时重命名字段为
应用名_daily_log_size_mb格式 - 最后删除原始的字节数字段,只保留MB单位的统计结果
内容的提问来源于stack exchange,提问作者Ashish Sharma
相关产品推荐
相关产品推荐

