我有一个splunk实例,其中我将数据输入配置为“用于从RESTful端点轮询数据的REST API输入”。我几乎有20多个端点,我在其中以json格式提取数据并以单个索引加载。
但是每次运行任何报告或搜索查询时,它都会再次将相同的数据加倍,就像第一次获取带来5个值,随后的获取将带来另外5个值,并因此继续增加。
现在在我的仪表板和报告中,我有点陷入重复数据的问题。我应该如何避免它。因此,对于非常不寻常的工作,我将间隔时间从1分钟增加到1个月,这有助于我避免数据重复。但是我不能获得一个月的过时数据...我仍然可以每隔1天生存一次,但没有1个月。
有没有办法让我的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
要删除不再需要或想要的数据,可以使用clean
命令:
splunk clean eventdata -index <index_name>
要从磁盘上永久删除索引数据,请使用CLI clean命令。此命令将完全删除一个或所有索引中的数据,具体取决于您是否提供参数。通常,在重新索引所有数据之前,请运行干净。
此方法的警告是,您必须在执行clean
之前停止Splunk。如果要自动化该过程,可以编写脚本来停止Splunk,使用参数运行clean
,然后重新启动Splunk。
假设每次您进行REST API调用时都有新信息,您可以在splunkweb / etc / app / rest_ta / bin / responsehandlers.py中编写一个新的响应处理程序,以向json数据包括一个新字段,( report 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
就这样,现在索引数据有了一个新字段,您可以使用它来标识和/或过滤报告