Simple Log Service SDK mendukung berbagai bahasa pemrograman. Anda dapat menggunakannya untuk mengonsumsi data log. Bagian ini menjelaskan cara menggunakan Simple Log Service SDK untuk mengonsumsi data log.
Informasi latar belakang
Anda dapat memanggil operasi PullLogs untuk menanyakan data log berdasarkan kursor yang ditentukan. Untuk informasi lebih lanjut, lihat PullLogs. Aplikasi yang dikembangkan menggunakan bahasa pemrograman seperti Java, Python, dan Go dapat mengonsumsi data yang dikumpulkan oleh Simple Log Service sebagai konsumen atau kelompok konsumen.
Simple Log Service mendukung Simple Log Service Processing Language (SPL) dalam skenario berikut: konsumsi real-time, query berbasis scan, dan pengumpulan Logtail. Untuk informasi lebih lanjut, lihat Sintaks SPL.
Prosedur
Sebelum menggunakan Simple Log Service SDK untuk Java, pastikan bahwa SDK telah diinstal. Untuk informasi lebih lanjut, lihat Instal Simple Log Service SDK untuk Java.
Menggunakan SDK
Contoh berikut menunjukkan cara memanggil operasi PullLogs dari Simple Log Service SDK untuk mendapatkan data log yang akan dikonsumsi. Untuk informasi lebih lanjut, lihat PullLogs.
Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
project | string | Ya | Nama proyek Simple Log Service. Untuk informasi lebih lanjut, lihat Kelola proyek. |
logStore | string | Ya | Nama Simple Log Service Logstore. Simple Log Service Logstore digunakan untuk mengumpulkan, menyimpan, dan menanyakan log. Untuk informasi lebih lanjut, lihat Kelola logstore. |
shardId | int | Ya | ID shard di Logstore. Untuk informasi lebih lanjut, lihat Shard. |
Tambahkan dependensi Maven
Buka file pom.xml di direktori root proyek Java Anda dan tambahkan kode berikut:
<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>
Buat file bernama PullLogsDemo.java
Kode Contoh:
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 {
// Titik akhir Simple Log Service. Dalam contoh ini, titik akhir Simple Log Service untuk wilayah China (Hangzhou) digunakan. Ganti nilai parameter dengan titik akhir sebenarnya.
private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Nama proyek.
private static final String project = "your_project";
// Nama Logstore.
private static final String logStore = "your_logstore";
public static void main(String[] args) throws Exception {
// Buat klien untuk Simple Log Service.
Client client = new Client(endpoint, accessKeyId, accessKeySecret);
// Tanyakan shard dari Logstore.
ListShardResponse resp = client.ListShard(project, logStore);
System.out.printf("%s memiliki %d shard\n", logStore, resp.GetShards().size());
Map<Integer, String> cursorMap = new HashMap<Integer, String>();
for (Shard shard : resp.GetShards()) {
int shardId = shard.getShardId();
// Gunakan kursor BEGIN atau peroleh kursor tertentu untuk mengonsumsi data log. Jika ingin menggunakan kursor END untuk mengonsumsi data log, gunakan Consts.CursorMode.END.
cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
}
try {
while (true) {
// Dapatkan log dari setiap 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);
// Dapatkan log dari grup log berdasarkan logika. Log biasanya disimpan dalam grup log.
List<LogGroupData> logGroups = response.getLogGroups();
System.out.printf("Dapatkan %d logGroup dari logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
// Pindahkan kursor setelah log yang diperoleh diproses.
cursorMap.put(shardId, response.getNextCursor());
}
}
} catch (LogException e) {
System.out.println("kode kesalahan :" + e.GetErrorCode());
System.out.println("pesan kesalahan :" + e.GetErrorMessage());
throw e;
}
}
}
Menggunakan SDK dan SPL
Contoh berikut menunjukkan cara memanggil operasi PullLogs dari Simple Log Service SDK untuk mendapatkan data log untuk konsumsi berbasis SPL. Untuk informasi lebih lanjut, lihat PullLogs.
Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
project | string | Ya | Nama proyek Simple Log Service. Untuk informasi lebih lanjut, lihat Kelola proyek. |
logStore | string | Ya | Nama Simple Log Service Logstore. Simple Log Service Logstore digunakan untuk mengumpulkan, menyimpan, dan menanyakan log. Untuk informasi lebih lanjut, lihat Kelola logstore. |
shardId | int | Ya | ID shard di Logstore. Untuk informasi lebih lanjut, lihat Shard. |
Tambahkan dependensi Maven
Buka file pom.xml di direktori root proyek Java Anda dan tambahkan kode berikut:
<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>
Buat file bernama PullLogsWithSPLDemo.java
Kode Contoh:
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 {
// Titik akhir Simple Log Service. Dalam contoh ini, titik akhir Simple Log Service untuk wilayah China (Hangzhou) digunakan. Ganti nilai parameter dengan titik akhir sebenarnya.
private static final String endpoint = "cn-hangzhou.log.aliyuncs.com";
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Nama proyek.
private static final String project = "your_project";
// Nama Logstore.
private static final String logStore = "your_logstore";
public static void main(String[] args) throws Exception {
// Buat klien untuk Simple Log Service.
Client client = new Client(endpoint, accessKeyId, accessKeySecret);
// Tanyakan shard dari Logstore.
ListShardResponse resp = client.ListShard(project, logStore);
System.out.printf("%s memiliki %d shard\n", logStore, resp.GetShards().size());
Map<Integer, String> cursorMap = new HashMap<Integer, String>();
for (Shard shard : resp.GetShards()) {
int shardId = shard.getShardId();
// Gunakan kursor BEGIN atau peroleh kursor tertentu untuk mengonsumsi data log. Jika ingin menggunakan kursor END untuk mengonsumsi data log, gunakan Consts.CursorMode.END.
cursorMap.put(shardId, client.GetCursor(project, logStore, shardId, Consts.CursorMode.BEGIN).GetCursor());
}
try {
while (true) {
// Dapatkan log dari setiap 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);
// Dapatkan log dari grup log berdasarkan logika. Log biasanya disimpan dalam grup log.
List<LogGroupData> logGroups = response.getLogGroups();
System.out.printf("Dapatkan %d logGroup dari logStore:%s:\tShard:%d\n", logGroups.size(), logStore, shardId);
// Pindahkan kursor setelah log yang diperoleh diproses.
cursorMap.put(shardId, response.getNextCursor());
}
}
} catch (LogException e) {
System.out.println("kode kesalahan :" + e.GetErrorCode());
System.out.println("pesan kesalahan :" + e.GetErrorMessage());
throw e;
}
}
}