使用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());
}
}
抱歉这么晚才回复。我也遇到了同样的问题。
你的OneShot搜索忽略时间范围的原因是因为它不接受时间范围。(我没有遇到任何这样做的文档)
为了克服这个问题,我尝试了2。c#的X SDK。修复了这个问题。
你可以用2。
- 设置服务参数。(主机、端口等)
- 验证服务。
- 设置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方法中