如何通过 AWS Lambda 使用 Python 将数百万(大量数据)事件发送到 Splunk

问题描述 投票:0回答:1

我正在测试一个 Python 脚本,该脚本从 API 中提取数据并将数据发送到 Splunk。该脚本工作正常,但我的问题是我需要每天从 API 向 Splunk 发送数百万个事件。在我的本地测试中,我每小时只能发送几千个事件。我最终需要将其移植到 Lambda 中以实现预定的自动化。

我了解多处理 Python 模块,但我担心的是,即使我启动并运行该逻辑,最多也只能每小时发送数十万个事件,而 Lambda 会在我接近之前超时发送全方位的数据。我希望有人以前遇到过这个挑战,并且可以建议一些选项供我考虑。谢谢!

代码:

splunk_conf = {<config stuff>}
for r in range(0,9000000,10000):
     offset = str(r)
     r = requests.get(f'{base_url}/<api>?limit=10000&offset={offset}',   headers = headers).json()
     for x in r['data']:
         splunk_payload = x
         splunk(splunk_payload, splunk_conf)

def splunk(splunk_payload, splunk_conf):
    splunk = SplunkSender(**splunk_conf)
    payloads = [splunk_payload]
    splunk_res = splunk.send_data(payloads)

我编写了脚本并使其正常工作,但数据量的庞大将成为我目前对可用解决方案的理解的限制因素。

更新: 我能够通过获取字典中的元素并将它们添加到列表中以作为 Splunk 有效负载传递来实现此目的。由于我对如何正确传递数据的误解,我原来的代码一次发送一个事件。

splunk_token = <code to retreieve token>

for r in range(0,10000000,10000):
  offset = str(r)
  splunk_payload = []
  try:
    r = requests.get(f'{base_url}<API endpoint URL>limit=10000&offset={offset}', headers = headers).json()
    for event in r['data']:
        splunk_payload.append(event)
    splunk(splunk_payload, splunk_token)         
  except Exception as ex:
      print("No more results from API!")
      exit()

def splunk(splunk_payload, splunk_token):
  splunk_conf = { <splunk conf details> }
  splunk = SplunkSender(**splunk_conf)
  splunk_res = splunk.send_data(splunk_payload)
  logging.info(splunk_res)

python aws-lambda splunk
1个回答
0
投票

我能够通过获取字典中的元素并将它们添加到列表中以作为 splunk 有效负载传递来实现此工作。由于我对如何正确传递数据的误解,我原来的代码一次发送一个事件。

splunk_token = <code to retreieve token>

for r in range(0,10000000,10000):
  offset = str(r)
  splunk_payload = []
  try:
    r = requests.get(f'{base_url}<API endpoint URL>limit=10000&offset={offset}', headers = headers).json()
    for event in r['data']:
        splunk_payload.append(event)
    splunk(splunk_payload, splunk_token)         
  except Exception as ex:
      print("No more results from API!")
      exit()

def splunk(splunk_payload, splunk_token):
  splunk_conf = { <splunk conf details> }
  splunk = SplunkSender(**splunk_conf)
  splunk_res = splunk.send_data(splunk_payload)
  logging.info(splunk_res)
© www.soinside.com 2019 - 2024. All rights reserved.