如何在Splunk仪表板中用OR分隔文本框的逗号分隔值?
实现方法
有几种实用的方法可以搞定这个需求:
方法1:搜索语句内直接处理(推荐)
用Splunk自带的split和mvjoin函数,把逗号分隔的输入转换成OR逻辑的条件。修改后的查询语句如下:
index=abc sourcetype=abc [| makeresults | eval ip="$ip$" | eval ip_list=split(ip, ",") | eval ip_list=mvmap(ip_list, trim(ip_list)) | eval src_ip=mvjoin(ip_list, " OR src_ip=") | fields src_ip | format "" "" "" "" "OR" ""]
简单说下逻辑:
split(ip, ","):把输入的字符串按逗号拆成多个IP值mvmap(ip_list, trim(ip_list)):去掉每个IP前后的空格(避免输入时带空格出问题)mvjoin(ip_list, " OR src_ip="):把多个IP用OR src_ip=拼接成一串format命令:把拼接好的内容转换成Splunk能识别的搜索条件格式
方法2:仪表板XML里加动态变量处理
在仪表板的XML代码中,给文本框加个change事件,自动把输入的逗号分隔值转成OR格式,存到一个隐藏变量里,搜索时直接用这个变量就行。
示例XML片段:
<dashboard> <label>IP查询仪表板</label> <row> <panel> <input type="text" token="raw_ip" searchWhenChanged="true"> <label>输入IP(逗号分隔)</label> <change> <eval token="formatted_ip">mvjoin(mvmap(split($value$, ","), trim($value$)), " OR src_ip=")</eval> </change> </input> <table> <search> <query>index=abc sourcetype=abc src_ip=$formatted_ip$</query> </search> </table> </panel> </row> </dashboard>
用户输入逗号分隔的IP后,formatted_ip会自动变成102.99.99 OR src_ip=103.99.93 OR src_ip=203.23.21,直接代入搜索语句就生效。
方法3:简化版(适合无空格输入)
如果输入的IP之间不带空格(比如102.99.99,103.99.93,203.23.21),可以用replace函数快速替换,语句更短:
index=abc sourcetype=abc src_ip=("$ip$" replace(",", "\" OR src_ip=\""))
这个方法简单,但要注意输入不能有空格,不然会出错。
内容的提问来源于stack exchange,提问作者YouKnowWhyImHere
相关产品推荐
相关产品推荐

