Simple Log Service SDKは複数のプログラミング言語をサポートしています。 SDKを使用してログデータを消費できます。 このトピックでは、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;
}
}
}