すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:API を使用したログの消費

最終更新日:Mar 26, 2026

Simple Log Service は、ログ消費 API を含む複数のプログラミング言語向けの SDK を提供しています。このトピックでは、Java SDK を使用してログを消費する方法の例を示します。

前提条件

背景情報

PullLogs 操作を呼び出して、指定したカーソル位置からログデータを取得できます。Simple Log Service は、Java、Python、Go で記述されたアプリケーションが、個々のコンシューマーとして、またはコンシューマーグループの一部としてデータを消費することをサポートしています。

Simple Log Service は、リアルタイム消費、スキャンベースのクエリ、Logtail 収集など、複数のシナリオで SPL をサポートしています。詳細については、「SPL 構文」をご参照ください。

Java SDK を使用したログの消費

Simple Log Service 用の Java SDK がインストールされていることを確認してください。詳細については、Java SDK のインストール」をご参照ください

SDK による消費

この例では、PullLogs 操作を呼び出してログデータを読み取る方法を示します。

パラメーター

パラメーター

タイプ

必須

説明

project

string

はい

プロジェクト名:プロジェクトは Simple Log Service のリソース管理ユニットです。マルチユーザー分離とアクセス制御の主要な境界として機能します。詳細については、「プロジェクトの管理」をご参照ください。

Logstore

string

はい

Logstore 名:Logstore は、Simple Log Service でログデータを収集、保存、クエリするためのユニットです。詳細については、「Logstore の管理」をご参照ください。

shardId

int

はい

Logstore 内のシャードの ID。

Maven 依存関係の追加

プロジェクトのルートディレクトリにある pom.xml ファイルに、次の依存関係を追加します。

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
  <artifactId>aliyun-log</artifactId>
  <version>0.6.99</version>
</dependency>

PullLogsDemo.java ファイルの作成

サンプルコード:

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.Consts;
import com.aliyun.openservices.log.common.LogGroupData;
import com.aliyun.openservices.log.common.Shard;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.PullLogsRequest;
import com.aliyun.openservices.log.response.ListShardResponse;
import com.aliyun.openservices.log.response.PullLogsResponse;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PullLogsDemo {
    // Simple Log Service のエンドポイント。この例では、中国 (杭州) リージョンのエンドポイントが使用されています。他のリージョンの場合は、実際のエンドポイントに置き換えてください。
    private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
    // 環境変数から AccessKey ID と AccessKey Secret を読み取ります。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // プロジェクト名。
    private static final String project = "your_project";
    // Logstore 名。
    private static final String logStore = "your_logstore";

    public static void main(String[] args) throws Exception {
        // Simple Log Service クライアントを作成します。
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);
        // Logstore 内のシャードを一覧表示します。
        ListShardResponse resp = client.ListShard(project, logStore);
        System.out.printf("%s has %d shards\n", logStore, resp.GetShards().size());
        Map<Integer, String> cursorMap = new HashMap<Integer, String>();
        for (Shard shard : resp.GetShards()) {
            int shardId = shard.getShardId();
            // シャードの先頭から消費を開始するためのカーソルを取得します。末尾から開始するには、Consts.CursorMode.END を使用します。
            cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
        }
        try {
            while (true) {
                // 各シャードからログをプルします。
                for (Shard shard : resp.GetShards()) {
                    int shardId = shard.getShardId();
                    PullLogsRequest request = new PullLogsRequest(project, logStore, shardId, 1000, cursorMap.get(shardId));
                    PullLogsResponse response = client.pullLogs(request);
                    // ログは LogGroup 形式で返されます。ビジネスロジックに基づいて処理できます。
                    List<LogGroupData> logGroups = response.getLogGroups();
                    System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
                    // プルしたログを処理した後、次のプルのためにカーソルを保存します。
                    cursorMap.put(shardId, response.getNextCursor());
                }
            }
        } catch (LogException e) {
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

SPL による消費

この例では、PullLogs 操作を呼び出すときに SPL を使用してログデータをフィルターする方法を示します。

パラメーター

パラメーター

タイプ

必須

説明

project

string

はい

プロジェクト名:プロジェクトは Simple Log Service のリソース管理ユニットです。マルチユーザー分離とアクセス制御の主要な境界として機能します。詳細については、「プロジェクトの管理」をご参照ください。

Logstore

string

はい

Logstore 名:Logstore は、Simple Log Service でログデータを収集、保存、クエリするためのユニットです。詳細については、「Logstore の管理」をご参照ください。

shardId

int

はい

Logstore 内のシャードの ID。

Maven 依存関係の追加

プロジェクトのルートディレクトリにある pom.xml ファイルに、次の依存関係を追加します。

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
  <artifactId>aliyun-log</artifactId>
  <version>0.6.99</version>
</dependency>

PullLogsWithSPLDemo.java ファイルの作成

サンプルコード:

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.common.Consts;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.PullLogsRequest;
import com.aliyun.openservices.log.response.ListShardResponse;
import com.aliyun.openservices.log.response.PullLogsResponse;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PullLogsWithSPLDemo {
    // Simple Log Service のエンドポイント。この例では、中国 (杭州) リージョンのエンドポイントが使用されています。他のリージョンの場合は、実際のエンドポイントに置き換えてください。
    private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
    // 環境変数から AccessKey ID と AccessKey Secret を読み取ります。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // プロジェクト名。
    private static final String project = "your_project";
    // Logstore 名。
    private static final String logStore = "your_logstore";

    public static void main(String[] args) throws Exception {
        // Simple Log Service クライアントを作成します。
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);
        // Logstore 内のシャードを一覧表示します。
        ListShardResponse resp = client.ListShard(project, logStore);
        System.out.printf("%s has %d shards\n", logStore, resp.GetShards().size());
        Map<Integer, String> cursorMap = new HashMap<Integer, String>();
        for (Shard shard : resp.GetShards()) {
            int shardId = shard.getShardId();
            // シャードの先頭から消費を開始するためのカーソルを取得します。末尾から開始するには、Consts.CursorMode.END を使用します。
            cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
        }
        try {
            while (true) {
                // 各シャードからログをプルします。
                for (Shard shard : resp.GetShards()) {
                    int shardId = shard.getShardId();
                    PullLogsRequest request = new PullLogsRequest(project, logStore, shardId, 1000, cursorMap.get(shardId));
                    request.setQuery("* | where cast(body_bytes_sent as bigint) > 14000");
                    request.setPullMode("scan_on_stream");
                    PullLogsResponse response = client.pullLogs(request);
                    // ログは LogGroup 形式で返されます。ビジネスロジックに基づいて処理できます。
                    List<LogGroupData> logGroups = response.getLogGroups();
                    System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);

                    // プルしたログを処理した後、次のプルのためにカーソルを保存します。
                    cursorMap.put(shardId, response.getNextCursor());
                }
            }
        } catch (LogException e) {
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

参考