在Golang中将查询发布到Splunk REST API / search / jobs / endpoint

问题描述 投票:0回答:1

我想向Splunk REST API发送搜索/查询,并返回搜索ID以便稍后使用结果。

我可以通过下面的curl实现所需的行为:

#!/bin/bash

user='my_user'
pass='my_pass'

search='search index=short sourcetype=src | head 5'

curl -u $user:$pass -k https://111.22.33.44:8089/services/search/jobs -d search="$search"

返回:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <sid>234523452435.6556_234234-3J3J-34J4-2345-123456678E3</sid>
</response>

以下是我试图实现相同目标的相关Go片段:

主要:

  //main.go
    sid, err := conn.Query()
    if err != nil {
            fmt.Println("err creating search: %s", err)
    } else {
            fmt.Println("sid:", sid)
    }

查询:

    // query.go
    func (conn SplunkConnection) Query() (string, error) {
            data := make(url.Values)
            data.Add("output_mode", "json")
            data.Add("search%20index%3Dshort%20sourcetype%3Dsrc%20%7C%20head%205", "search")
            data.Add("-60m%40m", "earliest")
            data.Add("-10m%40m", "latest")

        // try httpGet() here
        sid, err := conn.httpPost(fmt.Sprintf("%s/services/search/jobs", conn.BaseURL), &data)
        if err != nil {
                return "", err
        }

        return string(sid), err
}

帮手:

// http.go
func (conn SplunkConnection) httpPost(url string, data *url.Values) (string, error) {
        return conn.httpCall(url, "POST", data)
}

我期望的是一个包含我的SID的JSON blob的响应。相反,它返回一个巨大的JSON,它似乎包含/services/search/jobs端点上的所有当前作业。

如何调整代码以仅返回SID? (我打算将其轮询完成并稍后检索结果,但不需要帮助...)。

rest go splunk
1个回答
1
投票

你好像已经改变了你的postdata参数。

            data.Add("search%20index%3Dshort%20sourcetype%3Dsrc%20%7C%20head%205", "search")

这变成了search index=short sourcetype=src | head 5 = search,这与你想要的相反。

The key comes first, then the value,但你先指定了值,然后是键。

我认为这应该是:

            data.Add("search", "search%20index%3Dshort%20sourcetype%3Dsrc%20%7C%20head%205")

我怀疑你对url.Values.Add()的其他一些调用也是如此,所以你应该检查它们并确定。

© www.soinside.com 2019 - 2024. All rights reserved.