如何将 rex 命令与 splunk curl 的 REST api 作为客户端一起使用

How to use rex command with REST api of splunk curl as client

我正在尝试通过正则表达式(rex 命令)从原始数据中提取新字段。我的正则表达式在 splunk 网络搜索栏中运行良好并获得结果。但不能不使用 REST api curl 作为客户端。

我想从 csv 数据集中提取一个字段 train.csv 并希望将其命名为 "numbers"

curl -u admin:password -k https://localhost:8089/services/search/jobs -d search="search source=train.csv|rex field=_raw '^(?:\[^\"\n\]*\"){2},\w+,\d+,\d+,\d+,\d+,\d+\.\d+,(?P<numbers>\[^,\]+)'| top numbers"

通过执行这个命令我得到了 sid

<?xml version="1.0" encoding="UTF-8"?>

<response>
 <sid>1548238904.70</sid>

询问结果后出现错误

curl -u admin:password -k https://localhost:8089/services/search/jobs/1548238904.70/results

Error in 'rex' command: The regex ''^(?:\[^\n\]*){2}' does not extract anything. It should specify at least one named group. Format: (?&lt;name&gt;...).</msg>

什么是命名组,为什么它在 splunk 搜索栏中运行良好

我想要 "number" 作为列或新字段的结果

查看您的 SPL 本身,似乎您在 rex 中使用的是单引号而不是双引号,众所周知,这会导致问题或没有结果。

尝试使用以下转义双引号的方法:

$ curl -u 'username:password' -k https://dummy.splunk.url/services/search/jobs -d search="| stats count | eval foo=\"bar\" | rex field=foo \"\w(?<named>\w*)\" | table foo named"

请求返回结果时,您应该看到以下内容:

$ curl -u 'username:password' -k https://dummy.splunk.url/services/search/jobs/1548868781.39708/results

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   315  100   315    0     0    420      0 --:--:-- --:--:-- --:--:--   420<?xml version='1.0' encoding='UTF-8'?>
<results preview='0'>
<meta>
<fieldOrder>
<field>foo</field>
<field>named</field>
</fieldOrder>
</meta>
        <result offset='0'>
                <field k='foo'>
                        <value><text>bar</text></value>
                </field>
                <field k='named'>
                        <value><text>ar</text></value>
                </field>
        </result>
</results>

假设使用了上述方法,您应该以这样的 curl 命令结束:

curl -u admin:password -k https://localhost:8089/services/search/jobs -d search="search source=train.csv|rex field=_raw \"^(?:\[^\"\n\]*\"){2},\w+,\d+,\d+,\d+,\d+,\d+\.\d+,(?P<numbers>\[^,\]+)\"| top numbers"