我正在尝试通过执行 REST API 调用(通过运行搜索查询)将数据写入 outputlookup 文件。
直接从 Splunk 运行搜索时,以下命令有效并将数据写入 outputlookup csv 文件。
**| stats count as field1 | eval field1="host_abc;host_def"
| eval field1=split(field1,";")
| mvexpand field1 | rex field=field1 "(?<host>.*)"
| table host | outputlookup test_maintenance.csv**
但是当使用 REST API 执行上述搜索时,这不起作用。
运行以下命令时出现以下错误“不平衡报价”
curl -k -u admin:admin https://splunksearchnode:8089/servicesNS/admin/search/jobs/export -d search="| stats count as field1 | eval field1=\"host_abc;host_def\" | eval field1=split(field1,\";\") | mvexpand field1 | rex field=field1 \"(?<host>.*)\" | table host | outputlookup test_maintenance.csv"
运行以下命令时出现以下错误
错误:“EvalCommand”错误:表达式格式错误。在“host_abc”处出现意外字符。
curl -k -u admin:admin https://splunksearchnode:8089/servicesNS/admin/search/jobs/export -d search='| stats count as field1 | eval field1=\"host_abc;host_def\" | eval field1=split(field1,\";\") | mvexpand field1 | rex field=field1 \"(?<host>.*)\" | table host | outputlookup test_maintenance.csv'
如果您在 Splunk 搜索 UI 中粘贴相同的命令,我确信它可以工作。我会责怪 Splunk API 在某个地方或以某种方式通过 API 进行编码和解码错误。
如果您在单击“搜索”按钮运行相同命令时注意浏览器的地址栏,您应该注意到 search/q= 后的编码上下文。
当您使用Python或任何程序工具时,请尝试使用urlencode库来编码额外的相同命令,并确保它生成与您从地址栏中的搜索上下文中捕获的额外字符串相同的字符串。
现在,您可以在curl或postman测试中使用相同的编码上下文,而不是纯文本命令。
这个问题困扰了我几个小时,我最终通过使用编码上下文作为搜索参数找到了它。
我还建议在创建大量查找文件时使用 /jobs 而不是 jobs/export。您可以稍后查询返回的作业ID,无需等待。