我正在测试一个 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)
我能够通过获取字典中的元素并将它们添加到列表中以作为 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)