Как разместить большое количество данных с помощью requests.post на python?

#python #python-requests

Вопрос:

Я написал пример кода python для отправки данных журнала в конечную точку Fluntd стека EFK. Когда я отправляю 400 журналов за раз, код состояния равен 200 и может видеть все журналы на панели управления Kibana, но когда я отправляю 500 журналов за раз, код состояния равен 414.

Вот пример кода на python:

 import sys
import json
from datetime import datetime
import random
import requests

f = open('/etc/td-agent/data2.json',)
data = json.load(f)

input = file(sys.argv[-1])

actions = []

url = ''
u_name = ''
p_word = ''

for line in input:
    temp = json.loads(line)
    tenantid = temp['HTTP_FLUENT_TAG']
    message = temp['message']
    message_json = json.loads(message)
    h_name = data['account_details'][tenantid]['hostname']
    u_name = data['account_details'][tenantid]['username']
    p_word = data['account_details'][tenantid]['password']
    url = 'https://'   h_name
    for element in message_json:
        temp = str(element['date'])
        url = url   '?time='   temp
        action = {
                    "msg": element['log'],
                    "id": element['ID']
        }
        actions.append(action)

r = requests.post(url, auth=(u_name, p_word), json=actions)
print(r.status_code)

f.close()
 

Может ли кто-нибудь, пожалуйста, помочь, как отправлять огромную нагрузку за один раз на конечную точку Fluentd.

Для конечной точки Elasticsearch мы можем использовать api elasticsearch, и он также имеет функцию массового доступа, которая помогает отправлять огромное количество данных одновременно. Я ищу, есть ли такой способ для конечной точки Fluentd.

Комментарии:

1. Не могли бы вы создать файл json и отправить его в запросе?

2. @Omkar, Нужно ли мне создать отдельный файл json, а затем записать все действия в этот файл json и после этого опубликовать его в запросе ?

3. @triptest_1212 Это можно сделать двумя способами, либо двумя способами: 1. создайте файл JSON с json тела запроса и заархивируйте их, чтобы отправить их все в одном запросе, 2. вызовите API несколько раз с максимально возможными json, как вы упомянули выше

4. @Omkar Первый вариант кажется более выполнимым для моего случая, мне нужно отправлять огромные нагрузки, такие как 600 000 журналов, многократный вызов API может занять много времени, тогда как первый вариант с одним запросом может занять меньше времени.

5. @triptest_1212 Конечно. Я добавлю это в качестве ответа, не могли бы вы, пожалуйста, принять это как ответ?

Ответ №1:

Есть два способа сделать это, либо есть два способа.

  1. создайте файл JSON с объектами JSON тела запроса и заархивируйте их, чтобы отправить все в одном запросе
  2. Вызывайте API несколько раз с максимально возможными JS, как вы упомянули выше.