O envio de grandes volumes de dados de log pela rede aumenta a latência e os custos. O Simple Log Service oferece suporte à compressão lz4 em operações específicas da API, o que reduz o tráfego de rede e melhora o throughput sem perda de dados.
Comprimir dados da requisição
As operações de API a seguir aceitam dados comprimidos com lz4 no corpo da requisição HTTP.
PutLogs (PutLogStoreLogs)
PutWebtracking
Para enviar dados comprimidos:
Adicione
x-log-compresstype: lz4ao cabeçalho da requisição HTTP.Comprima o corpo da requisição HTTP com lz4.
Defina
x-log-bodyrawsizeno cabeçalho da requisição como o tamanho do corpo não comprimido.Defina
Content-Lengthno cabeçalho da requisição como o tamanho do corpo comprimido.
Receber dados comprimidos
A operação de API PullLogs pode retornar dados comprimidos com lz4.
Para receber dados comprimidos:
Defina
Accept-Encoding: lz4no cabeçalho da requisição. O servidor retornará dados comprimidos com lz4.Leia
x-log-bodyrawsizeno cabeçalho da resposta para obter o tamanho do corpo não comprimido. Em seguida, passe esse valor para a função de descompressão.
Exemplos
-
Logs brutos
Os exemplos usam log-sample.json/@filepath como entrada de amostra. Substitua esse arquivo pelos seus dados de log reais ao chamar a API.
{ "__tags__": {}, "__topic__": "", "__source__": "47.100.XX.XX", "__logs__": [ { "__time__": "03/22 08:51:01", "content": "*************** RSVP Agent started ***************", "method": "main", "level": "INFO" }, { "__time__": "03/22 08:51:01", "content": "Specified configuration file: /u/user10/rsvpd1.conf", "method": "locate_configFile", "level": "INFO" }, { "__time__": "03/22 08:51:01", "content": "Using log level 511", "method": "main", "level": "INFO" }, { "__time__": "03/22 08:51:01", "content": "Get TCP images rc - EDC8112I Operation not supported on socket", "method": "settcpimage", "level": "INFO" }, { "__time__": "03/22 08:51:01", "content": "Associate with TCP/IP image name = TCPCS", "method": "settcpimage", "level": "INFO" }, { "__time__": "03/22 08:51:02", "content": "registering process with the system", "method": "reg_process", "level": "INFO" }, { "__time__": "03/22 08:51:02", "content": "attempt OS/390 registration", "method": "reg_process", "level": "INFO" }, { "__time__": "03/22 08:51:02", "content": "return from registration rc=0", "method": "reg_process", "level": "INFO" } ] } -
Programa de teste
O código Python a seguir comprime o arquivo de amostra e exibe a taxa de compressão:
from lz4 import block with open('log-sample.json', 'rb') as f: data = f.read() compressed = block.compress(data, store_size=False) # Compress print(f'out/in: {len(compressed)}/{len(data)} Bytes') print(f'Compression ratio: {len(compressed)/len(data):.2%}') -
Resultado da compressão
Para log-sample.json/@filepath, a taxa de compressão é de 39,30%. Os resultados reais variam conforme o conteúdo: dados com mais repetição são comprimidos de forma mais eficiente.
out/in: 542/1379 Bytes Compression ratio: 39.30%