【问题标题】:Splunk to avoid duplication of data pulled by REST APISplunk 避免重复由 REST API 提取的数据
【发布时间】:2017-08-23 10:05:51
【问题描述】:

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

但是,每次运行任何报告或搜索查询时,它都会再次将相同的数据加倍,就像第一次提取会带来 5 个值,随后的提取会带来另外 5 个值,如此并不断增加。

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

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

这是我用于 REST API 的 inputs.conf 文件的 sn-p。

[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

【问题讨论】:

  • 这两个数据集是完全相同的,还是发送旧的(原始)数据集加上新的(更新的或不同的)数据集?
  • 这更像是我只想对来自 API 的最新数据进行计算。而且我不太在意旧数据...
  • 您是在问如何删除旧数据并用新数据替换它?
  • 是的......我们可以说......也......因为每当我进行 REST API 调用时,它都会带来新数据,我不会担心上次调用中的旧数据。

标签: rest api splunk


【解决方案1】:

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

splunk clean eventdata -index <index_name>

来自Splunk documentation

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

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

【讨论】:

    【解决方案2】:

    假设每次调用 REST API 时您都有新信息,您可以编写一个新的响应处理程序,附加在 splunkweb/etc/app/rest_ta/bin/responsehandlers.py 中,以在您的 json 数据中包含一个新字段(一个 Id报告的报告时间=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
    

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

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 2016-04-17
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2017-07-10
      相关资源
      最近更新 更多