Splunk,以避免REST API提取的数据重复

时间:2017-08-23 10:05:51

标签: rest api splunk

我有一个splunk实例,我将数据输入配置为" REST API输入,用于从RESTful端点轮询数据"。 我有大约20多个端点,我以json格式提取数据并加载单个索引。

然而,每次运行任何报告或搜索查询时,它都会再次加倍相同的数据,就像第一次获取带来5个值一样,随后的获取将带来另外5个,所以并且不断增加。

现在,在我的仪表板和报告中,我遇到了重复数据的问题。我应该如何避免它。 因此,对于非常不寻常的工作,我将间隔从1分钟增加到1个月,这有助于我避免数据重复。 然而,我不能有月份的陈旧数据...我仍然能够以1天的间隔生存,但不能持续1个月。

在splunk中有什么办法让我可以保持我的REST API调用整洁(避免重复)......动态制作我的仪表板和报告。

以下是REST API的inputs.conf文件的片段。

[rest://rst_sl_get_version]
auth_password = ccccc
auth_type = basic
auth_user = vvvvvvv
endpoint = https://api.xx.com/rest/v3/xx_version
host = slrestdata
http_method = GET
index = sldata
index_error_response_codes = 0
response_type = json
sequential_mode = 0
sourcetype = _json
streaming_request = 0
polling_interval = 2592000

2 个答案:

答案 0 :(得分:0)

要删除不再需要或不需要的数据,可以使用clean命令:

splunk clean eventdata -index <index_name>

来自Splunk documentation

  

要从磁盘中永久删除索引数据,请使用CLI clean命令。此命令将完全删除一个或所有索引中的数据,具体取决于您是否提供参数。通常,在重新索引所有数据之前运行clean。

使用此方法的警告是,您必须在执行clean之前停止Splunk。如果您想自动执行该过程,可以编写一个脚本来停止Splunk,使用您的参数运行clean,然后重新启动Splunk。

答案 1 :(得分:0)

假设每次调用REST API时您都有新信息,则可以在splunkweb / etc / app / rest_ta / bin / responsehandlers.py中编写一个新的响应处理程序,以便为json数据包括一个新字段,(一个ID的报告reportTime = ff / hh / yyyy h:m:s),因此在对信息中心进行编码时,您将拥有一个新字段,其中可以动态地获取要报告的最后一个ID,同时保存历史数据以获取更多商务信息。

class RestGetCustomField:

     def __init__(self,**args):
         pass

     def __call__(self, response_object,raw_response_output,response_type,req_args,endpoint):
         if response_type == "json":        
             output = json.loads(raw_response_output)
             for flight in output["Data"]:
             flight2.update({"My New Field":datetoday()})
                     print_xml_stream(json.dumps(flight2))
         else:
             print_xml_stream(raw_response_output)
def datetoday():
    today = datetime.date.today()
    return today.strftime('%Y/%m/%d')

然后您可以配置:

  

response_handler = RestGetCustomField

就这样,现在索引数据有了一个新字段,您可以使用它来标识和/或过滤报告

相关问题