Splunk仪表板中如何转换release数组格式适配in运算符查询
Splunk版本号匹配转换解决方案
方案1:仪表板Token预处理(推荐)
直接在输入控件的配置中新增转换逻辑,生成转换后的Releases_Alt token,搜索时直接使用即可,性能最优——因为版本过滤会在搜索的初始阶段执行,不需要额外扫描全量数据。
修改后的输入控件配置如下:
<input type="text" token="Releases"> <label>Release or Releases</label> <default>*</default> <change> <!-- 处理输入的版本号:去掉方括号、ver前缀和所有点号,适配搜索格式 --> <eval token="Releases_Alt"> if($value$=="*", "*", replace(replace(replace(mvjoin(mvmap(split(replace($value$, "\[|\]", ""), ","), trim(replace($$,"^ver",""))), ","), "\.", ""), ",", ",") ) </eval> </change> </input>
注:上述配置适配用户输入为
[verxxx, verxxx]的数组格式,若用户用其他分隔符输入多个版本,可调整split函数的参数。
对应的搜索语句修改为:
index=event_db environment=prod release IN ($Releases_Alt$) | timechart count as Events
方案2:直接在SPL中完成转换
如果不想修改仪表板控件配置,可以直接在搜索语句中完成格式对齐,以下是示例搜索:
index=event_db environment=prod # 将原始纯数字release转换为用户输入的ver+点号格式,直接匹配输入的Releases token | eval release_formatted = "ver" + replace(release, "(\d{4})(\d{2})(\d{4})", "$1.$2.$3") | search release_formatted IN ($Releases$) | timechart count as Events
注:本方案是在搜索后对字段做转换再过滤,数据量大时性能会低于方案1,适合临时查询场景使用。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

