大量のログデータをネットワーク経由で送信すると、レイテンシーとコストが増加します。Simple Log Service (SLS) は、一部の API オペレーションで lz4 圧縮をサポートしており、データ損失なしでネットワークトラフィックを削減し、スループットを向上させます。
リクエストデータの圧縮
以下の API オペレーションは、HTTP リクエストボディで lz4 圧縮データを受け取ることができます。
PutLogs (PutLogStoreLogs)
PutWebtracking
圧縮データを送信するには:
HTTP リクエストヘッダーに
x-log-compresstype: lz4を追加します。HTTP リクエストボディを lz4 で圧縮します。
リクエストヘッダーの
x-log-bodyrawsizeに、非圧縮のボディサイズを設定します。リクエストヘッダーの
Content-Lengthに、圧縮後のボディサイズを設定します。
圧縮データの受信
PullLogs API は、lz4 で圧縮されたデータを返すことができます。
圧縮データを受信するには:
リクエストヘッダーに
Accept-Encoding: lz4を設定すると、サーバーは lz4 で圧縮されたデータを返します。レスポンスヘッダーから
x-log-bodyrawsizeを読み取り、非圧縮のボディサイズを取得します。この値を解凍関数に渡します。
例
-
生ログ
この例では、log-sample.json をサンプル入力として使用します。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" } ] } -
テストプログラム
次の Python コードは、サンプルファイルを圧縮し、圧縮率を出力します:
from lz4 import block with open('log-sample.json', 'rb') as f: data = f.read() compressed = block.compress(data, store_size=False) # 圧縮 print(f'out/in: {len(compressed)}/{len(data)} Bytes') print(f'Compression ratio: {len(compressed)/len(data):.2%}') -
圧縮結果
log-sample.json の場合、圧縮率は 39.30% です。実際の結果はデータの内容によって異なります。繰り返しが多いデータほど、より効率的に圧縮されます。
out/in: 542/1379 Bytes Compression ratio: 39.30%