Panggil API CreateScheduledSQL untuk membuat tugas SQL terjadwal.
SDK Simple Log Service tidak lagi memperbarui API yang terkait dengan SQL terjadwal. Gunakan Alibaba Cloud SDK untuk mengelola scheduled SQL:
Pada halaman debugging API CreateScheduledSQL di Alibaba Cloud OpenAPI Explorer, klik tab SDK Example di panel kanan. Pilih bahasa target Anda (Java, TypeScript, Go, PHP, Python, .NET, C++, dll.) untuk melihat contoh kode SDK yang sesuai. Anda dapat mengklik Run Example untuk debugging online atau Download Full Project.
Prasyarat
Simple Log Service telah diaktifkan. Untuk informasi selengkapnya, lihat Activate Simple Log Service.
SDK Simple Log Service untuk Java telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize Simple Log Service SDK for Java.
Informasi latar belakang
Simple Log Service menyediakan scheduled SQL untuk menganalisis data secara berkala, menyimpan data agregat, serta melakukan proyeksi dan penyaringan. Scheduled SQL mendukung sintaks SQL92 standar dan sintaks kueri serta analisis Simple Log Service. Fitur ini berjalan secara berkala berdasarkan aturan penjadwalan dan menulis hasilnya ke database tujuan (Logstore atau Metricstore).
Konsol Simple Log Service menyediakan antarmuka visual untuk membuat tugas scheduled SQL. Untuk detailnya, lihat Create a scheduled SQL task.
Selain itu, Simple Log Service menyediakan kelas ScheduledSQL, JobSchedule, dan ScheduledSQLConfiguration untuk menyederhanakan pembuatan tugas scheduled SQL melalui Java SDK.
-
ScheduledSQL: Membuat tugas scheduled SQL.
-
JobSchedule: Membuat konfigurasi penjadwalan untuk tugas scheduled SQL.
-
ScheduledSQLConfiguration: Membuat konfigurasi dasar untuk tugas scheduled SQL.
Deskripsi parameter
Parameter permintaan
|
Name |
Type |
Required |
Description |
Example |
|
project |
String |
Yes |
Nama proyek. |
ali-test-project |
|
scheduledSql |
Object |
Yes |
Konfigurasi tugas scheduled SQL. |
- |
ScheduledSQL
Tabel berikut menjelaskan parameter tersebut.
|
Parameter Name |
Type |
Required |
Description |
Example |
|
name |
String |
Yes |
Nama tugas scheduled SQL. Ikuti aturan penamaan berikut:
|
export-123-456 |
|
displayName |
String |
Yes |
Nama tampilan tugas scheduled SQL. Di konsol Simple Log Service, pilih untuk melihat daftar nama tampilan. |
my-scheduled-sql-job |
|
description |
String |
No |
Deskripsi tugas scheduled SQL. |
this is a scheduled sql job. |
|
configuration |
Object |
Yes |
Konfigurasi scheduled SQL. |
- |
|
schedule |
Object |
Yes |
Konfigurasi penjadwalan tugas. |
- |
JobSchedule
Panggil JobSchedule jobSchedule = new JobSchedule(); untuk membuat konfigurasi penjadwalan untuk tugas scheduled SQL. Tabel berikut menjelaskan parameter tersebut.
|
Parameter name |
Type |
Required |
Description |
Example |
|
type |
String |
Yes |
Frekuensi penjadwalan tugas scheduled SQL. Setiap jadwal menghasilkan satu instans eksekusi. Interval menentukan waktu terjadwal untuk setiap instans.
|
FixedRate |
|
interval |
String |
No |
Menentukan interval tetap ketika type adalah FixedRate.
|
50m |
|
cronExpression |
String |
No |
Menentukan ekspresi cron ketika type adalah Cron. Persis minimum ekspresi cron adalah satu menit, menggunakan format 24 jam. Misalnya, Untuk mengonfigurasi zona waktu, pilih mode Cron. Untuk daftar zona waktu umum, lihat Time zone format. |
N/A |
|
runImmediately |
boolean |
No |
Menentukan apakah tugas terjadwal dijalankan segera. |
False |
|
timeZone |
String |
No |
Zona waktu untuk ekspresi cron. Nilai default kosong, artinya UTC+8. |
+0800 |
|
delay |
int |
No |
Penundaan setelah waktu terjadwal sebelum eksekusi dimulai. Nilai valid: 0 hingga 120. Satuan: detik. Jika data yang ditulis ke Logstore mengalami penundaan atau masalah serupa, Anda dapat menggunakan eksekusi tertunda untuk memastikan integritas data. |
10 |
ScheduledSQLConfiguration
Panggil ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); untuk membuat konfigurasi tugas scheduled SQL. Tabel berikut menjelaskan parameter tersebut.
|
Parameter Name |
Type |
Required |
Description |
Example |
|
script |
String |
Yes |
Pernyataan kueri dan analisis. |
*|select count(1) |
|
sqlType |
String |
Yes |
Jenis SQL. Atur ke searchQuery. |
searchQuery |
|
resourcePool |
String |
Yes |
Jenis kolam sumber daya. Atur ke enhanced. Simple Log Service menyediakan kolam sumber daya enhanced untuk analitik data. |
enhanced |
|
roleArn |
String |
Yes |
ARN dari peran RAM yang digunakan untuk membaca data dari Logstore sumber. Untuk petunjuk cara mendapatkan ARN, lihat Grant a custom RAM role permissions to access the source LogStore. |
|
|
destRoleArn |
String |
Yes |
ARN dari peran RAM yang digunakan untuk menulis data ke Logstore tujuan. Untuk petunjuk cara mendapatkan ARN, lihat berikut ini:
|
|
|
sourceLogstore |
String |
Yes |
Nama Logstore sumber. |
source-logstore |
|
destEndpoint |
String |
Yes |
Titik akhir Logstore tujuan. Catatan
Untuk informasi selengkapnya, lihat Endpoints. |
|
|
destProject |
String |
Yes |
Nama proyek tujuan. |
my-project |
|
destLogstore |
String |
Yes |
Nama Logstore tujuan. Peringatan
Jangan atur database tujuan sama dengan database sumber. Melakukan hal ini dapat menyebabkan log ditulis secara berulang-ulang, sehingga mengakibatkan biaya penyimpanan dan trafik tambahan. Anda bertanggung jawab atas konsumsi sumber daya dan biaya yang timbul. |
my-logstore |
|
dataFormat |
String |
Yes |
Mode penulisan.
|
log2log |
|
fromTimeExpr |
String |
Yes |
Ekspresi awal untuk jendela waktu SQL. Untuk informasi selengkapnya, lihat Time expression syntax. |
@m - 12s |
|
toTimeExpr |
String |
Yes |
Ekspresi akhir untuk jendela waktu SQL. Untuk informasi selengkapnya, lihat Time expression syntax. |
@m |
|
maxRetries |
Long |
Yes |
Jumlah maksimum percobaan ulang otomatis jika operasi analisis SQL gagal. Jika jumlah percobaan melebihi nilai ini, instans eksekusi akan berakhir dengan status gagal. |
10 |
|
maxRunTimeInSeconds |
Long |
Yes |
Durasi total maksimum percobaan ulang dalam detik jika operasi analisis SQL gagal. Jika durasi percobaan melebihi nilai ini, instans eksekusi akan berakhir dengan status gagal. |
60 |
|
fromTime |
Long |
Yes |
Waktu mulai penjadwalan. Penting
Instans eksekusi hanya dibuat dalam rentang waktu ini. Tidak ada instans baru yang dibuat di luar rentang ini. |
1653965045 |
|
toTime |
Long |
Yes |
Waktu akhir penjadwalan. Atur ke 0 untuk tanpa waktu akhir. |
1653968045 |
|
parameters |
Object |
Yes |
Ketika dataFormat adalah log2metric atau metric2metric, konfigurasikan parameter SQL. Untuk detailnya, lihat Log2MetricParameters dan Metric2MetricParameters. |
|
parameters
-
Ketika mengonfigurasi tugas scheduled SQL dari Logstore ke Metricstore, Anda juga harus mengonfigurasi parameter tambahan berikut:
Tabel 1. Log2MetricParameters
Parameter Name
Example
Description
metricKeys
"[\"a\", \"b\", \"c\"]"Kolom metrik, sesuai dengan kolom metrik dalam konfigurasi SQL konsol.
Simple Log Service mengagregasi data berdasarkan pernyataan kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom bertipe numerik dari hasil kueri sebagai kolom metrik. Untuk informasi selengkapnya, lihat Metrics.
labelKeys
"[\"d\", \"e\", \"f\"]"Kolom label, sesuai dengan Labels dalam konfigurasi SQL konsol.
Simple Log Service mengagregasi data berdasarkan pernyataan kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom dari hasil kueri sebagai label. Untuk informasi selengkapnya, lihat Metrics.
hashLabels
"[\"d\", \"f\"]"Sesuai dengan Rehash dalam konfigurasi SQL konsol.
Setelah mengaktifkan sakelar Rehash, Anda dapat mengonfigurasi hash columns untuk menulis data dengan nilai kolom yang sama ke dalam satu shard. Hal ini meningkatkan lokalitas data dan efisiensi kueri.
hash columns yang tersedia bergantung pada hasil kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom dari hasil sebagai hash columns. Misalnya, jika Anda mengatur hash columns ke status, semua data dengan nilai status yang sama akan ditulis ke shard yang sama.
addLabels
"[\"m\":\"h\", \"n\":\"i\"]"Sesuai dengan Additional Labels dalam konfigurasi SQL konsol.
Tambahkan label statis sebagai pasangan kunci-nilai untuk mengidentifikasi atribut metrik.
Misalnya, atur label_key ke app dan label_value ke ingress-nginx.
timeKey
time
Sesuai dengan Time Column dalam konfigurasi SQL konsol.
-
Jika Anda memilih kolom waktu dari hasil kueri (dengan nilai timestamp Unix, seperti
atime:1627025331), sistem akan menggunakan kolom tersebut sebagai timestamp metrik. -
Jika Anda memilih empty, sistem akan menggunakan waktu mulai rentang waktu kueri sebagai timestamp metrik.
-
-
Ketika mengonfigurasi tugas scheduled SQL dari Metricstore ke Metricstore lain, Anda juga harus mengonfigurasi parameter tambahan berikut:
Tabel 2. Metric2MetricParameters
Parameter Name
Example
Description
metricName
my-metric
Masukkan nama metrik baru jika Anda ingin mengganti nama metrik. Untuk informasi selengkapnya, lihat Metrics.
PentingKami merekomendasikan penggantian nama hanya saat menganalisis satu metrik.
Jika Anda menganalisis beberapa metrik dan mengganti namanya, semua metrik akan memiliki nama baru yang sama.
hashLabels
"{\"m\":\"h\", \"n\":\"i\"}"Sesuai dengan Rehash dalam konfigurasi SQL konsol.
Setelah mengaktifkan sakelar Rehash, Anda dapat mengonfigurasi hash columns untuk menulis data dengan nilai label yang sama ke dalam satu shard. Hal ini meningkatkan lokalitas data dan efisiensi kueri.
hash columns yang tersedia bergantung pada label yang ada dalam data metrik. Misalnya, jika data metrik mencakup label
{"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, hash columns yang valid adalah alert_id, alert_name, dan status. Jika Anda mengatur hash columns ke status, semua data dengan nilai status yang sama akan ditulis ke shard yang sama.addLabels
"{\"m\":\"h\", \"n\":\"i\"}"Sesuai dengan Additional Labels dalam konfigurasi SQL konsol.
Tambahkan label statis sebagai pasangan kunci-nilai untuk mengidentifikasi atribut metrik.
Misalnya, atur label_key ke app dan label_value ke ingress-nginx.
Parameter respons
Untuk deskripsi parameter respons, lihat Create a scheduled SQL task.
Kode contoh
Contoh ini membuat file App.java yang menyimpan hasil analisis terjadwal dari Logstore sumber ke Logstore tujuan. Kode contoh:
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateScheduledSQLRequest;
public class App {
// Contoh ini mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Atur nama proyek dan Logstore.
static String sourceProject="aliyun-test-sourceProject";
static String destProject="aliyun-test-destProject";
static String sourceLogstore = "logstore-name";
static String destLogstore = "project-name";
static String roleArn = "acs:ram::11111111:role/aliyunlogetlrole";
// Atur titik akhir Simple Log Service. Contoh ini menggunakan wilayah China (Hangzhou). Ganti dengan wilayah Anda.
static String endpoint = "http://cn-hangzhou.log.aliyuncs.com";
static String destEndpoint = "http://cn-hangzhou-intranet.log.aliyuncs.com";
static long fromTime = 1648105200; //2022-03-23 15:00:00
private static String script = "* | select a,b,c from log";
private static ScheduledSQLBaseParameters generateParams(String dataFormat) {
if (dataFormat.equalsIgnoreCase("log2log")) {
return null;
} else if (dataFormat.equalsIgnoreCase("log2metric")) {
Log2MetricParameters params = new Log2MetricParameters();
params.setMetricKeys("[\"a\", \"b\", \"c\"]");
params.setLabelKeys("[\"d\", \"e\", \"f\"]");
params.setHashLabels("[\"d\", \"f\"]");
params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
params.setTimeKey("time");
return params;
} else if (dataFormat.equalsIgnoreCase("metric2metric")) {
Metric2MetricParameters params = new Metric2MetricParameters();
params.setMetricName("name");
params.setHashLabels("[\"d\", \"f\"]");
params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
return params;
}
return null;
}
private static ScheduledSQLConfiguration generateConfig() {
ScheduledSQLConfiguration scheduledSQLConfiguration = new ScheduledSQLConfiguration();
scheduledSQLConfiguration.setScript(script);
scheduledSQLConfiguration.setSqlType("searchQuery");
scheduledSQLConfiguration.setResourcePool("enhanced");
scheduledSQLConfiguration.setRoleArn(roleArn);
scheduledSQLConfiguration.setDestRoleArn(roleArn);
scheduledSQLConfiguration.setSourceLogstore(sourceLogstore);
scheduledSQLConfiguration.setDestEndpoint(destEndpoint);
scheduledSQLConfiguration.setDestProject(destProject);
scheduledSQLConfiguration.setDestLogstore(destLogstore);
scheduledSQLConfiguration.setDataFormat("log2log");
scheduledSQLConfiguration.setFromTimeExpr("@m-1m");
scheduledSQLConfiguration.setToTimeExpr("@m");
scheduledSQLConfiguration.setMaxRetries(20);
scheduledSQLConfiguration.setMaxRunTimeInSeconds(600);
scheduledSQLConfiguration.setFromTime(fromTime);
scheduledSQLConfiguration.setToTime(0L);
ScheduledSQLBaseParameters params = generateParams(scheduledSQLConfiguration.getDataFormat());
scheduledSQLConfiguration.setParameters(params);
return scheduledSQLConfiguration;
}
private static ScheduledSQL generateScheduledSQL() {
ScheduledSQL scheduledSQLStructure = new ScheduledSQL();
scheduledSQLStructure.setName("job-name");
scheduledSQLStructure.setDisplayName("display-name");
scheduledSQLStructure.setDescription("desc-name");
ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig();
scheduledSQLStructure.setConfiguration(scheduledSQLConfiguration);
JobSchedule jobSchedule = new JobSchedule();
jobSchedule.setType(JobScheduleType.FIXED_RATE);
jobSchedule.setInterval("1m");
jobSchedule.setDelay(10);
jobSchedule.setRunImmediately(false);
scheduledSQLStructure.setSchedule(jobSchedule);
return scheduledSQLStructure;
}
public static void main(String[] args) {
Client client = new Client(endpoint, accessId, accessKey);
ScheduledSQL scheduledSQL = generateScheduledSQL();
CreateScheduledSQLRequest request = new CreateScheduledSQLRequest(sourceProject, scheduledSQL);
try {
client.createScheduledSQL(request);
} catch (LogException e) {
e.printStackTrace();
}
}
}
Referensi
-
Untuk API yang mengelola tugas scheduled SQL, lihat: