我有一个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
答案 0 :(得分:0)
要删除不再需要或不需要的数据,可以使用clean
命令:
splunk clean eventdata -index <index_name>
要从磁盘中永久删除索引数据,请使用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
就这样,现在索引数据有了一个新字段,您可以使用它来标识和/或过滤报告