L'envoi de volumes importants de journaux sur le réseau augmente la latence et les coûts. Simple Log Service prend en charge la compression lz4 pour certaines opérations d'API, réduisant ainsi le trafic réseau et améliorant le débit sans perte de données.
Compresser les données de requête
Les opérations d'API suivantes acceptent des données compressées avec lz4 dans le corps de la requête HTTP.
PutLogs (PutLogStoreLogs)
PutWebtracking
Pour envoyer des données compressées :
Ajoutez
x-log-compresstype: lz4à l'en-tête de la requête HTTP.Compressez le corps de la requête HTTP avec lz4.
Définissez
x-log-bodyrawsizedans l'en-tête de la requête sur la taille du corps non compressé.Définissez
Content-Lengthdans l'en-tête de la requête sur la taille du corps compressé.
Recevoir des données compressées
L'opération d'API PullLogs peut renvoyer des données compressées avec lz4.
Pour recevoir des données compressées :
Définissez
Accept-Encoding: lz4dans l'en-tête de la requête. Le serveur renvoie des données compressées avec lz4.Lisez
x-log-bodyrawsizedans l'en-tête de la réponse pour obtenir la taille du corps non compressé. Transmettez cette valeur à votre fonction de décompression.
Exemples
-
Journaux bruts
Les exemples utilisent log-sample.json/@filepath comme entrée. Remplacez ce fichier par vos données de journal réelles lors de l'appel de l'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" } ] } -
Programme de test
Le code Python suivant compresse le fichier exemple et affiche le taux de compression :
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%}') -
Résultat de la compression
Pour log-sample.json/@filepath, le taux de compression est de 39,30 %. Les résultats réels varient selon le contenu : les données très redondantes se compressent plus efficacement.
out/in: 542/1379 Bytes Compression ratio: 39.30%