Splunk dbxquery使用子搜索调用存储过程以填充参数不起作用

时间:2018-10-18 18:31:33

标签: stored-procedures splunk-query

我有两个有效的Splunk查询,如下所示。

第一个输入IP地址和日期时间并返回Mac地址:

  

index = dhcp签名= DHCPACK dest_ip =“ 192.0.0.0”   Latest =“ 05/30/2018:00:00:00” |重命名dest_mac为mac_address |表   mac_address,_time |排序-_time |头1 |字段mac_address

第二个调用数据库中的存储过程,并传入mac地址和日期时间,并返回机器ID,这是一个GUID:

  

| dbxquery query =“ EXEC [dbo]。[get_machines_by_mac_date] @mac_address =   '11:22:33:44:55:66',@utc_date_time = '05 / 30/2018'“   connection =“ database1”

我需要做的是将这两个查询合并为一个查询,其中第一个查询中的Mac地址作为mac_address参数传递给第二个查询。我一直在努力,我想我已经很接近了,但是它不能正常工作,这是我的组合查询:

  

| dbxquery query =“ EXEC [dbo]。[get_machines_by_mac_date]   @mac_address = [index = dhcp签名= DHCPACK   dest_ip =“ 192.0.0.0” Latest =“ 05/30/2018:00:00:00” |重命名dest_mac   作为mac_address |表_time,mac_address |排序-_time |头1 |   返回mac_address],@ utc_date_time = '05 / 30/2018'“   connection =“ database1”

我已阅读到首先执行内部查询(在方括号内),所以我试图在外部查询中为mac_address参数提供内部查询的结果。

我不断收到错误消息,指出mac_address太长,数据库的最大长度为128。我很确定这意味着内部查询无法正常工作,并且它正在尝试发送整个文字存储过程的方括号内的文本字符串。

这是我尝试运行查询时返回的错误:

  

com.microsoft.sqlserver.jdbc.SQLServerException:该标识符   以'index = dhcp signature = DHCPACK dest_ip = 192.0.0.0开头   最新= 05/30/2018:00:00:00 |重命名dest_mac为mac_address |表   _时间,'ma'太长了。最大长度为128。

我是使用Splunk的新手,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

我能够从Splunk获得帮助,而我正在错误地进行查询。我不需要将方括号用作子搜索,而是需要将查询1中的dest_mac参数映射到查询2中,这是有效的组合查询:

index=dhcp signature=DHCPACK dest_ip=192.0.0.0 latest=05/30/2018:00:00:00 
| table dest_mac 
| sort- _time | head 1 | map search=\" 
| dbxquery procedure=\\\"{{call get_machines_by_mac_date(?,?)}}\\\" 
connection=\"database1\" params=\\\"\\\"$dest_mac$\\\", 05/30/2018\\\"\"