Lorsque les résultats de requête sont volumineux, utilisez la pagination pour contrôler le nombre de journaux renvoyés par requête. Les instructions de recherche utilisent les paramètres offset et line pour la pagination ; les instructions analytiques utilisent la clause LIMIT.
Méthodes de pagination
L'opération GetLogs prend en charge la pagination pour les instructions de recherche et les instructions analytiques, chacune selon une méthode différente. Pour obtenir le nombre total de journaux avant d'exécuter la requête, appelez l'opération GetHistograms.
Instruction de recherche : interroge les données brutes des journaux à l'aide de mots-clés. Définissez les paramètres offset et line dans GetLogs pour paginer les résultats. Consultez la rubrique Présentation de la recherche de journaux.
Instruction analytique : analyse les résultats de requête avec SQL. Utilisez la clause LIMIT pour la pagination. Consultez les rubriques Présentation de la requête et de l'analyse des journaux | Clause LIMIT.
Exemples de pagination
Les exemples suivants illustrent la pagination des résultats de requête et d'analyse.
-
Pagination des résultats de requête
Dans une requête paginée, la valeur du paramètre offset augmente à chaque requête jusqu'à ce que GetLogs renvoie 0 résultat et marque la requête comme terminée.
-
Pseudocode de pagination
offset = 0 # The line from which the system starts to read logs. The value 0 indicates that the system reads logs from line 0. line = 100 # The number of rows that are returned for the current API request. Up to 100 rows can be returned. If you set this parameter to a value greater than 100, only 100 rows are returned. Read 100 lines at a time. query = "status:200" # Query all logs in which the value of the status field is 200. while True: response = get_logstore_logs(query, offset, line) # Call the operation to read logs. process (response) # Call custom logic to process the returned result. if response.get_count() == 0 && response.is_complete() The read process is complete, and the current loop ends. else offset += 100 # The value of the offset parameter increases to 100. The next 100 lines are read.Exemple de code Python
Consultez la rubrique Présentation du SDK Simple Log Service pour Python.
# The Simple Log Service endpoint. endpoint = '' # In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '') accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '') # The name of the project. project = '' # The name of the Logstore. 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: # The execution result. res4.log_print()Exemple de code Java
Consultez la rubrique Présentation du SDK Simple Log Service pour Java.
int log_offset = 0; int log_line = 100; // The number of lines that are read at a time. Up to 100 rows can be returned. If you want to read more than 100 lines, use the offset parameter. The offset and line parameters take effect only for a search statement that uses keywords. If you use an analytic statement, the offset and line parameters are invalid. If you want an analytic statement to return more than 100 rows, use the LIMIT clause. while (true) { GetLogsResponse res4 = null; // For each offset, 100 lines are read at a time. If the read operation fails, up to three retries are allowed. 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("Read log count:" + String.valueOf(res4.GetCount())); log_offset += log_line; if (res4.IsCompleted() && res4.GetCount() == 0) { break; } }
-
-
Pagination des résultats d'analyse
Utilisez la clause LIMIT dans SQL pour paginer les résultats d'analyse. Par exemple, si
* | select count(1) , url group by urlrenvoie 1 000 entrées, divisez-les en deux requêtes de 500 entrées chacune :* | select count(1) , url group by url limit 0, 500 * | select count(1) , url group by url limit 500, 500-
Pseudocode de pagination
offset = 0 // The line from which the system starts to read logs. The value 0 indicates that the system reads logs from line 0. line = 500 // The number of rows that are returned for the current API request. Up to 1,000,000 rows can be returned. If many lines are read at a time, the network latency increases, and the client-side processing speed decreases. Read 500 lines at a time. query = "* | select count(1) , url group by url limit " while True: real_query = query + offset + "," + line response = get_logstore_logs(real_query) // Call the operation to read logs. process (response) // Call custom logic to process the returned result. if response.get_count() == 0 The read process is complete, and the current loop ends. else offset += 500 // The value of the offset parameter increases to 500. The next 500 lines are read.Exemple de code Python
Consultez la rubrique Présentation du SDK Simple Log Service pour Python.
# The Simple Log Service endpoint. endpoint = '' # In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '') accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '') # The name of the project. project = '' # The name of the Logstore. 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: # The execution result. res4.log_print()Exemple de code Java
Consultez la rubrique Présentation du SDK Simple Log Service pour 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; // For each offset, 500 lines are read at a time. If the read operation fails, up to three retries are allowed. 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("Read log count:" + String.valueOf(res4.GetCount())); log_offset += log_line; if (res4.GetCount() == 0) { break; } }
-