Jika hasil kueri berukuran besar, gunakan paginasi untuk mengontrol jumlah log yang dikembalikan per permintaan. Pernyataan pencarian menggunakan parameter offset dan line untuk membuat paginasi, sedangkan pernyataan analitik menggunakan klausa LIMIT.
Metode paginasi
Operasi GetLogs mendukung paginasi baik untuk pernyataan pencarian maupun pernyataan analitik dengan metode yang berbeda. Untuk mengetahui jumlah total log sebelum menjalankan kueri, panggil GetHistograms.
-
Pernyataan pencarian: mencari log mentah berdasarkan kata kunci. Atur parameter offset dan line dalam GetLogs untuk membuat paginasi. Ikhtisar pencarian log.
-
Pernyataan analitik: menganalisis hasil kueri dengan SQL. Gunakan klausa LIMIT untuk membuat paginasi. Ikhtisar kueri dan analisis log | Klausa LIMIT.
Contoh paginasi
Contoh berikut menunjukkan cara membuat paginasi pada hasil kueri dan hasil analisis.
-
Membuat paginasi hasil kueri
Dalam kueri berhalaman, nilai offset bertambah pada setiap permintaan hingga GetLogs mengembalikan 0 hasil, yang menandai kueri telah selesai.
-
Pseudokode paginasi
offset = 0 # Baris tempat sistem mulai membaca log. Nilai 0 berarti sistem membaca log dari baris ke-0. line = 100 # Jumlah baris yang dikembalikan untuk permintaan API saat ini. Maksimal 100 baris dapat dikembalikan. Jika Anda mengatur parameter ini ke nilai lebih dari 100, hanya 100 baris yang dikembalikan. Baca 100 baris sekaligus. query = "status:200" # Kueri semua log di mana nilai bidang status adalah 200. while True: response = get_logstore_logs(query, offset, line) # Panggil operasi untuk membaca log. process (response) # Panggil logika kustom untuk memproses hasil yang dikembalikan. if response.get_count() == 0 && response.is_complete() Proses baca selesai, dan loop saat ini berakhir. else offset += 100 # Nilai parameter offset bertambah menjadi 100. 100 baris berikutnya dibaca.Contoh kode Python
Ikhtisar SDK Simple Log Service untuk Python.
# Titik akhir Simple Log Service. endpoint = '' # Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diambil dari variabel lingkungan. accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '') accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '') # Nama proyek. project = '' # Nama penyimpanan log. logstore = '' client = LogClient(endpoint, accessKeyId, accessKey) topic = "" From = int(time.time()) - 600 To = int(time.time()) log_line = 100 offset = 0 while True: res4 = None for retry_time in range(0, 3): req4 = GetLogsRequest(project, logstore, From, To, topic=topic, line=log_line, offset=offset) res4 = client.get_logs(req4) if res4 is not None and res4.is_completed(): break time.sleep(1) offset += 100 if res4.is_completed() and res4.get_count() == 0: break; if res4 is not None: # Hasil eksekusi. res4.log_print()Contoh kode Java
Ikhtisar SDK Simple Log Service untuk Java.
int log_offset = 0; int log_line = 100; // Jumlah baris yang dibaca sekaligus. Maksimal 100 baris dapat dikembalikan. Jika ingin membaca lebih dari 100 baris, gunakan parameter offset. Parameter offset dan line hanya berlaku untuk pernyataan pencarian yang menggunakan kata kunci. Jika Anda menggunakan pernyataan analitik, parameter offset dan line tidak berlaku. Untuk mengembalikan lebih dari 100 baris dalam pernyataan analitik, gunakan klausa LIMIT. while (true) { GetLogsResponse res4 = null; // Untuk setiap offset, 100 baris dibaca sekaligus. Jika operasi baca gagal, maksimal tiga kali percobaan ulang diperbolehkan. for (int retry_time = 0; retry_time < 3; retry_time++) { GetLogsRequest req4 = new GetLogsRequest(project, logstore, from, to, topic, query, log_offset, log_line, false); res4 = client.GetLogs(req4); if (res4 != null && res4.IsCompleted()) { break; } Thread.sleep(200); } System.out.println("Jumlah log yang dibaca:" + String.valueOf(res4.GetCount())); log_offset += log_line; if (res4.IsCompleted() && res4.GetCount() == 0) { break; } }
-
-
Membuat paginasi hasil analisis
Gunakan klausa LIMIT dalam SQL untuk membuat paginasi hasil analisis. Misalnya, jika
* | select count(1), url group by urlmengembalikan 1.000 entri, bagi menjadi dua permintaan masing-masing 500 baris:* | select count(1) , url group by url limit 0, 500 * | select count(1) , url group by url limit 500, 500-
Pseudokode paginasi
offset = 0 // Baris tempat sistem mulai membaca log. Nilai 0 berarti sistem membaca log dari baris ke-0. line = 500 // Jumlah baris yang dikembalikan untuk permintaan API saat ini. Maksimal 1.000.000 baris dapat dikembalikan. Jika banyak baris dibaca sekaligus, latensi jaringan meningkat dan kecepatan pemrosesan di sisi client menurun. Baca 500 baris sekaligus. query = "* | select count(1) , url group by url limit " while True: real_query = query + offset + "," + line response = get_logstore_logs(real_query) // Panggil operasi untuk membaca log. process (response) // Panggil logika kustom untuk memproses hasil yang dikembalikan. if response.get_count() == 0 Proses baca selesai, dan loop saat ini berakhir. else offset += 500 // Nilai parameter offset bertambah menjadi 500. 500 baris berikutnya dibaca.Contoh kode Python
Ikhtisar SDK Simple Log Service untuk Python.
# Titik akhir Simple Log Service. endpoint = '' # Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diambil dari variabel lingkungan. accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '') accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '') # Nama proyek. project = '' # Nama penyimpanan log. logstore = '' client = LogClient(endpoint, accessKeyId, accessKey) topic = "" origin_query = "* | select * limit " From = int(time.time()) - 600 To = int(time.time()) log_line = 100 offset = 0 while True: res4 = None query = origin_query + str(offset) + " , " + str(log_line) for retry_time in range(0, 3): req4 = GetLogsRequest(project, logstore, From, To, topic=topic, query=query) res4 = client.get_logs(req4) if res4 is not None and res4.is_completed(): break time.sleep(1) offset += 100 if res4.is_completed() and res4.get_count() == 0: break; if res4 is not None: # Hasil eksekusi. res4.log_print()Contoh kode Java
Ikhtisar SDK Simple Log Service untuk Java.
int log_offset = 0; int log_line = 500; String origin_query = "* | select count(1) , url group by url limit " while (true) { GetLogsResponse res4 = null; // Untuk setiap offset, 500 baris dibaca sekaligus. Jika operasi baca gagal, maksimal tiga kali percobaan ulang diperbolehkan. query = origin_query + log_offset + "," + log_line; for (int retry_time = 0; retry_time < 3; retry_time++) { GetLogsRequest req4 = new GetLogsRequest(project, logstore, from, to, topic, query); res4 = client.GetLogs(req4); if (res4 != null && res4.IsCompleted()) { break; } Thread.sleep(200); } System.out.println("Jumlah log yang dibaca:" + String.valueOf(res4.GetCount())); log_offset += log_line; if (res4.GetCount() == 0) { break; } }
-