All Products
Search
Document Center

Simple Log Service:Membuat paginasi hasil kueri dan analisis

Last Updated:Jun 03, 2026

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.

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 url mengembalikan 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;
                  }
      }