SLS SDK for Java le permite consumir datos de registro mediante la operación PullLogs, con o sin filtrado SPL.
Contexto
La operación PullLogs recupera los datos de registro por cursor. Para obtener más información, consulte PullLogs. Las aplicaciones en Java, Python y Go pueden consumir datos de SLS como consumidores individuales o como grupos de consumidores.
SLS admite SPL (Simple Log Service Processing Language) para el consumo en tiempo real, las consultas basadas en escaneo y la recopilación con Logtail. Para obtener más información, consulte SPL syntax.
Procedimiento
Instale SLS SDK for Java antes de continuar. Para obtener más información, consulte Install the Java SDK.
Uso del SDK
A continuación se muestra un ejemplo que llama a la operación PullLogs para consumir datos de registro. Para obtener más información, consulte PullLogs.
Parámetros
|
Parámetro
|
Tipo
|
Obligatorio
|
Descripción
|
|
project
|
string
|
Sí
|
El nombre del proyecto. Para obtener más información, consulte Manage projects.
|
|
logStore
|
string
|
Sí
|
El nombre del logstore. Los logstores recopilan, almacenan y consultan registros. Para obtener más información, consulte Manage Logstores.
|
|
shardId
|
int
|
Sí
|
El ID del shard en el logstore. Para obtener más información, consulte Shard.
|
Agregar dependencias de Maven
Abra el archivo pom.xml en el directorio raíz de su proyecto de Java y agregue el siguiente código:
<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>
Cree un archivo llamado PullLogsDemo.java
Código de ejemplo:
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;
}
}
}
Uso del SDK y SPL
A continuación se muestra un ejemplo que llama a la operación PullLogs para consumir registros con SPL. Para obtener más información, consulte PullLogs.
Parámetros
|
Parámetro
|
Tipo
|
Obligatorio
|
Descripción
|
|
project
|
string
|
Sí
|
El nombre del proyecto. Para obtener más información, consulte Manage projects.
|
|
logStore
|
string
|
Sí
|
El nombre del logstore. Los logstores recopilan, almacenan y consultan registros. Para obtener más información, consulte Manage Logstores.
|
|
shardId
|
int
|
Sí
|
El ID del shard en el logstore. Para obtener más información, consulte Shard.
|
Agregar dependencias de Maven
Abra el archivo pom.xml en el directorio raíz de su proyecto de Java y agregue el siguiente código:
<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>
Cree un archivo llamado PullLogsWithSPLDemo.java
Código de ejemplo:
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;
}
}
}