使用c#的Splunk SDK,为什么一次搜索忽略了设置的时间范围?

本文关键字:搜索 时间 范围 一次 设置 SDK Splunk 为什么 使用 | 更新日期: 2023-09-27 18:09:41

我有一个奇怪的问题设置时间范围为一次性搜索。我为我的一次性搜索设置了时间范围,但结果只是首先在服务器匹配查询上找到。似乎有人忽略了时间范围。

我读过

:

如何使用Splunk SDK为c#运行搜索和作业-http://dev.splunk.com/view/csharp-sdk/SP-CAAAEQG

服务。SearchOneShotAsync方法http://docs.splunk.com/documentationstatic/cshrpsdk/2.1.1/splunk.client/html/a5323948 - 7506 ad15 - 6 - f04 - 7 - a95b70e616d.htm

JobArgs类http://docs.splunk.com/documentationstatic/cshrpsdk/2.1.1/splunk.client/html/7dc4e71d - 1 - ed7 - 4 - eb1 - 5 - a10 - 183 d7663da26.htm

用于搜索的时间修饰符http://docs.splunk.com/Documentation/Splunk/6.0.3/SearchReference/SearchTimeModifiers

但经过几个小时的测试和实验-什么都没有。

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
         {
             var connectArgs = new ServiceArgs
             {
                 Host = "myip",
                 Port = 8089,
                 Scheme = "https"
             };
             Splunk.Service service = new Splunk.Service(connectArgs);
             service.Login("login", "password");
             var oneshotSearchArgs = new Splunk.Client.JobArgs();
             oneshotSearchArgs.EarliestTime = "2015-08-23 13:00";//textBoxOD.Text + "T" + textBoxODG.Text + ":00.000";
             oneshotSearchArgs.LatestTime = "2015-08-23 14:00";//textBoxDO.Text + "T" + textBoxDOG.Text + ":00.000";
             String oneshotSearchQuery = "search query *" + textBox1.text + "* | head 500";
             var outArgs = new JobResultsArgs
             {
                 OutputMode = JobResultsArgs.OutputModeEnum.Xml,
                 Count = 0,
             };
             try
             {
                 using (var stream = service.Oneshot(oneshotSearchQuery, outArgs))
                 {
                     using (var rr = new ResultsReaderXml(stream))
                     {
                         string raw = "_raw";
                         foreach (var @event in rr)
                         {
                             wynik += "EVENT:" + Environment.NewLine;
                             foreach (string key in @event.Keys)
                             {
                                 if (key.Contains(raw))
                                 {   
                                     wynik += "   " + key + " -> " + @event[key] + Environment.NewLine + Environment.NewLine;
                                 }
                             }
                         }
                     }
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }

使用c#的Splunk SDK,为什么一次搜索忽略了设置的时间范围?

抱歉这么晚才回复。我也遇到了同样的问题。

你的OneShot搜索忽略时间范围的原因是因为它不接受时间范围。(我没有遇到任何这样做的文档)

为了克服这个问题,我尝试了2。c#的X SDK。修复了这个问题。

你可以用2。

  1. 设置服务参数。(主机、端口等)
  2. 验证服务。
  3. 设置OneShot作业的参数并执行。

你可以在NuGet库中找到NuGet包"Splunk PCL Client for . net "。

下面是一个示例代码:
// Setting up Service parameters
Service _splunkService = new Service(Scheme.Https, "your-api-or-ip", 8089);
// Authenticating
await _splunkService.LogOnAsync("username", "password");
// Setting up parameters for the OneShot job and executing it
var query = "your search query";
var oneShot = new JobArgs();
oneShot.EarliestTime = DateTime.Now.AddMinutes(-2).Date.ToString("yyyy-MM-dd") + "T" + DateTime.Now.AddMinutes(-2).TimeOfDay; //"2015-09-12T12:00:00.000-07:00";
oneShot.LatestTime = "your latest time";
using (var stream = await _splunkService.SearchOneShotAsync(query, 0, oneShot))
{
    try
    {
        foreach (var result in stream)
        {
            var rawValue = Convert.ToString(result.GetValue("_raw"));
            if (rawValue != null)
            {
                // do something.
            }
        }
    }
}

确保'await'部分在async方法中