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

Simple Log Service:Simple log Service SDKを使用してログデータを消費する

最終更新日:Nov 06, 2024

Simple Log Service SDKは複数のプログラミング言語をサポートしています。 SDKを使用してログデータを消費できます。 このトピックでは、Simple Log Service SDKを使用してログデータを消費する方法について説明します。

前提条件

  • Simple Log Serviceが有効化されています。

  • Python用のSimple Log Service SDKが初期化されます。

背景情報

PullLogs操作を呼び出して、指定されたカーソルに基づいてログデータを照会できます。 詳細については、「PullLogs」をご参照ください。 Java、Python、Goなどのプログラミング言語を使用して開発されたアプリケーションは、Simple Log Serviceによって収集されたデータを消費者または消費者グループとして消費できます。

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

手順

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

SDKの使用

次の例は、Simple Log Service SDKのPullLogs操作を呼び出して、使用するログデータを取得する方法を示しています。 詳細については、「PullLogs」をご参照ください。

Parameters

パラメーター

タイプ

必須

説明

project

String

必須

Simple Log Serviceプロジェクトの名前。 詳細については、「プロジェクトの管理」をご参照ください。

logStore

String

必須

Simple Log Service Logstoreの名前。 Simple Log Service Logstoreは、ログの収集、保存、およびクエリに使用されます。 詳細については、「Logstoreの管理」をご参照ください。

shardId

int

必須

Logstore内のシャードのID。 詳細については、「シャード」をご参照ください。

Maven依存関係の追加

Javaプロジェクトのルートディレクトリにある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 {
    // The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
    private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
    // In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // The name of the project.
    private static final String project = "your_project";
    // The name of the Logstore.
    private static final String logStore = "your_logstore";

    public static void main(String[] args) throws Exception {
        // Create a client for Simple Log Service.
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);
        // Query the shards of the 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();
            // Use the BEGIN cursor or obtain a specific cursor to consume log data. If you want to use the END cursor to consume log data, use Consts.CursorMode.END.
            cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
        }
        try {
            while (true) {
                // Obtain logs from each shard.
                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);
                    // Obtain logs from log groups by logic. Logs are usually stored in log groups. 
                    List<LogGroupData> logGroups = response.getLogGroups();
                    System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
                    // Move the cursor after the obtained logs are processed. 
                    cursorMap.put(shardId, response.getNextCursor());
                }
            }
        } catch (LogException e) {
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

SDKとSPLを使用する

次の例は、Simple Log Service SDKのPullLogs操作を呼び出して、SPLベースの消費のログデータを取得する方法を示しています。 詳細については、「PullLogs」をご参照ください。

Parameters

パラメーター

タイプ

必須

説明

project

String

必須

Simple Log Serviceプロジェクトの名前。 詳細については、「プロジェクトの管理」をご参照ください。

logStore

String

必須

Simple Log Service Logstoreの名前。 Simple Log Service Logstoreは、ログの収集、保存、およびクエリに使用されます。 詳細については、「Logstoreの管理」をご参照ください。

shardId

int

必須

Logstore内のシャードのID。 詳細については、「シャード」をご参照ください。

Maven依存関係の追加

Javaプロジェクトのルートディレクトリにある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 {
    // The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
    private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
    // In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // The name of the project.
    private static final String project = "your_project";
    // The name of the Logstore.
    private static final String logStore = "your_logstore";

    public static void main(String[] args) throws Exception {
        // Create a client for Simple Log Service.
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);
        // Query the shards of the 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();
            // Use the BEGIN cursor or obtain a specific cursor to consume log data. If you want to use the END cursor to consume log data, use Consts.CursorMode.END.
            cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
        }
        try {
            while (true) {
                // Obtain logs from each shard.
                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);
                    // Obtain logs from log groups by logic. Logs are usually stored in log groups. 
                    List<LogGroupData> logGroups = response.getLogGroups();
                    System.out.printf("Get %d logGroup from logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);

                    // Move the cursor after the obtained logs are processed. 
                    cursorMap.put(shardId, response.getNextCursor());
                }
            }
        } catch (LogException e) {
            System.out.println("error code :" + e.GetErrorCode());
            System.out.println("error message :" + e.GetErrorMessage());
            throw e;
        }
    }
}

関連ドキュメント