本ドキュメントでは、Log Service ログを JSON 形式で OSS (Object Storage Service) に格納する方法について説明します。OSS へのログ転送の詳細については、OSS へのログ転送をご参照ください。

OSS ファイルの圧縮タイプとファイルアドレスは次のとおりです。

圧縮タイプ ファイル拡張子 OSS ファイルのアドレス例
非圧縮 なし oss://oss-shipper-shenzhen/ecs_test/2016/01/26/20/54_1453812893059571256_937
圧縮 (snappy) .snappy oss://oss-shipper-shenzhen/ecs_test/2016/01/26/20/54_1453812893059571256_937.snappy
非圧縮

オブジェクトは複数のログからなります。ファイルの各行は JSON 形式のログです。次の例をご参照ください。

{"__time__":1453809242,"__topic__":"","__source__":"10.170. ***.***","ip":"10.200. **.***","time":"26/Jan/2016:19:54:02 +0800","url":"POST
              /PutData? Category=YunOsAccountOpLog&AccessKeyId=<yourAccessKeyId>&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=<yourSignature>
              HTTP/1.1","status":"200","user-agent":"aliyun-sdk-java"}
圧縮 (Snappy)

Snappy C ++ (Snappy.Compress メソッド) で非圧縮ファイルを圧縮します。 .snappyファイルを解凍すると、非圧縮ファイルを入手できます。

C ++ Lib で解凍

Snappy 公式 Web サイトより Lib をダウンロードし、Snappy.Uncompress メソッドを使用して .snappy ファイルを解凍します。

Java Lib で解凍

xerial snappy-java の Snappy.Uncompress または Snappy.SnappyInputStream で解凍します (SnappyFramedInputStream には非対応)。

<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.0.4.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
バージョン 1.1.2.1 はバグにより、圧縮ファイルの一部は解凍されません。バージョン 1.1.2.6 で修正されています。

Snappy.Uncompress

String fileName = "C:\\My download\\36_1474212963188600684_4451886.snappy";
RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
int fileLength = (int) randomFile.length();
randomFile.seek(0);
byte[] bytes = new byte[fileLength];
int byteread = randomFile.read(bytes);
System.out.println(fileLength);
System.out.println(byteread);
byte[] uncompressed = Snappy.uncompress(bytes);
String result = new String(uncompressed, "UTF-8");
System.out.println(result);

Snappy.SnappyInputStream

String fileName = "C:\\My download\\36_1474212963188600684_4451886.snappy";
SnappyInputStream sis = new SnappyInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[4096];
int len = 0;
while ((len = sis.read(buffer)) ! = -1) {
    System.out.println(new String(buffer, 0, len));
}
Linux 環境での解凍ツール

Linux 環境には、.snappy ファイルの解凍ツールが用意されています。 こちらをクリックして snappy_tool をダウンロードします。

./snappy_tool 03_1453457006548078722_44148.snappy 03_1453457006548078722_44148
compressed.size: 2217186
snappy::Uncompress return: 1
uncompressed.size: 25223660