Simple Log Service prend en charge la suppression logique, qui marque les données de journal pour suppression au lieu de les supprimer immédiatement et définitivement.
Informations générales
Dans un environnement axé sur les données, les journaux et les données d'observabilité constituent des actifs essentiels pour l'entreprise, mais ils posent également des défis en matière de gestion des données, de conformité et de sécurité. Pour répondre à ces enjeux, Simple Log Service (SLS) propose la suppression logique : un mécanisme de suppression traçable qui ajoute une couche de sécurité à votre cadre de conformité et de protection des données.
Fonctionnement
Cas d'utilisation
Précautions
Coûts de stockage : Les données supprimées logiquement continuent d'occuper de l'espace de stockage et d'engendrer des frais pendant la période de rétention. Les données ne sont pas supprimées physiquement tant que la période de rétention du Logstore n'a pas expiré.
Précision des requêtes : Effectuez une requête avant de supprimer. Avant la suppression, exécutez une requête en utilisant exactement la même plage horaire et la même instruction de requête. Prévisualisez les données à supprimer pour confirmer qu'elles sont correctes.
Vous ne pouvez pas interroger ni analyser les journaux supprimés logiquement. Cette restriction s'applique aux fonctionnalités telles que l'interrogation, l'analyse SQL, ScheduledSQL et l'alerte. Les opérations de traitement de flux, y compris la consommation, la transformation des données et l'expédition, ne sont pas affectées.
La suppression logique est irréversible. Les journaux supprimés ne peuvent pas être récupérés.
Régions prises en charge
Vous pouvez trouver le point de terminaison du service pour la région de votre projet sur sa page de présentation. Pour l'ID de chaque région, consultez Points de terminaison.
Autorisations
Si vous utilisez votre compte Alibaba Cloud, vous disposez de toutes les autorisations par défaut et pouvez gérer directement les projets.
-
Si vous utilisez un utilisateur RAM, vous devez demander au propriétaire du compte Alibaba Cloud les autorisations requises. Simple Log Service fournit les deux types de politiques système suivants :
-
Politiques système : Ces politiques accordent des autorisations étendues. Vous ne pouvez pas modifier le contenu des politiques système, mais elles sont simples à configurer.
AliyunLogFullAccess : Accorde des autorisations de gestion complètes pour Simple Log Service.
AliyunLogReadOnlyAccess : Accorde des autorisations en lecture seule pour Simple Log Service.
-
Politiques personnalisées : Nous vous recommandons de suivre le principe du moindre privilège. N'accordez que les autorisations minimales requises au personnel de confiance ou aux services automatisés.
Le code suivant fournit un exemple de politique personnalisée :
Dans le script, remplacez
Project nameetLogstore namepar vos valeurs réelles.Pour plus d'informations sur la configuration des autorisations pour un utilisateur RAM, consultez Configurer les autorisations RAM pour Simple Log Service et Informations d'autorisation.
{ "Version": "1", "Statement": [ { "Action": [ "log:DeleteLogStoreLogs", "log:GetDeleteLogStoreLogsTask", "log:ListDeleteLogStoreLogsTasks" ], "Resource": [ "acs:log:*:*:project/ProjectName/logstore/LogstoreName" ], "Effect": "Allow" } ] }
-
Opérations dans la console
Connectez-vous à la console Simple Log Service. Dans la section Projects, cliquez sur celui que vous souhaitez utiliser.
Dans l'onglet , cliquez sur le logstore souhaité.
Sur la page Search & Analysis du Logstore, saisissez une instruction de requête et sélectionnez une plage horaire. Dans l'onglet Raw Log, cliquez sur .
Dans la boîte de dialogue Soft Delete Log, lisez attentivement les informations et cliquez sur Confirm. Une fois les journaux supprimés, ils ne sont plus visibles.
Une fois la suppression terminée, dans l'onglet Raw Log, cliquez sur . Dans la liste Soft Delete Task, vous pouvez consulter l'historique des tâches de suppression.
Opérations via le SDK
Python
-
Utilisez
pip show aliyun-log-python-sdkpour vérifier la version dealiyun-log-python-sdk.La version de
aliyun-log-python-sdkdoit être 0.9.28 ou ultérieure. Si votre version est antérieure, utilisez la commandepip install -U aliyun-log-python-sdkpour mettre à niveau la version du SDK. -
Soumettez une tâche de suppression logique.
DeleteLogsRequestpossède les paramètres suivants :Paramètre
Exemple
# Import necessary libraries import time from aliyun.log import LogClient, DeleteLogsRequest, DeleteLogsResponse def execute_soft_delete(client: LogClient, project: str, logstore: str, from_time: int, to_time: int, query: str) -> str: """ Executes an asynchronous soft deletion task. :param client: An initialized Simple Log Service client instance. :param project: Your Simple Log Service Project name. :param logstore: Your Logstore name. :param from_time: The start timestamp of the deletion range (in seconds). :param to_time: The end timestamp of the deletion range (in seconds). :param query: The index-only search statement used to filter logs for deletion. SQL, scan, and phrase queries are not supported. :return: The task ID of the asynchronous deletion task, used to query the task status later. """ print(f"Preparing to perform a soft deletion in Logstore '{logstore}' of Project '{project}'...") print(f"Time range: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(from_time))} -> {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(to_time))}") print(f"Deletion condition (Query): {query}") # 1. Construct the deletion request object. request = DeleteLogsRequest(project, logstore, from_time, to_time, query=query) # 2. Initiate the asynchronous deletion request. try: res: DeleteLogsResponse = client.delete_logs(request) # 3. Print the request information and the returned task ID. print("\n--- Request Receipt ---") res.log_print() task_id = res.get_taskid() print(f"✅ Soft deletion task submitted successfully! Request ID: {res.get_request_id()}, Task ID: {task_id}") return task_id except Exception as e: print(f"❌ Failed to submit soft deletion task: {e}") return "" # --- How to call --- # client = LogClient(...) # Client initialization process is omitted here. # project_name = "my-prod-app" # logstore_name = "nginx-access-log" # # Scenario: Delete access logs from the last 24 hours with a status code of 500 from a specific IP address. # start_time = int(time.time()) - 86400 # end_time = int(time.time()) # delete_query = "__source__: 123.123.XXX.XXX and status: 500" # task_id = execute_soft_delete(client, project_name, logstore_name, start_time, end_time, delete_query) # if task_id: # print(f"\nPlease use Task ID '{task_id}' to query the task execution status.")project
String(Obligatoire)Le nom du projet. Le projet dans Simple Log Service sert à isoler les ressources des différents utilisateurs et à contrôler l'accès à des ressources spécifiques. Consultez Gérer les projets.
LogStore
String(Obligatoire)Le nom du logstore. Le logstore dans Simple Log Service sert à collecter, stocker et interroger les journaux. Consultez Gérer les Logstores.
fromTime
intObligatoireLe début de la plage horaire de la requête, spécifié sous forme d'horodatage Unix.
toTime
int(Obligatoire)La fin de la plage horaire de la requête, spécifiée sous forme d'horodatage Unix.
query
String(Obligatoire)L'instruction de recherche ou d'analyse. Pour plus d'informations, consultez Présentation de la requête et de l'analyse.
Soyez prudent lors de la définition de
"*"ou"level: ERROR". Ces paramètres peuvent entraîner la suppression accidentelle d'une grande quantité de données. -
Interrogez l'état de la tâche.
Ce bloc de code vérifie continuellement la progression de la tâche jusqu'à ce qu'elle soit terminée ou qu'un délai d'attente soit atteint. Il s'agit d'une étape clé pour garantir que l'opération de suppression est exécutée avec succès.
delete_logsest une API asynchrone. Un appel réussi indique uniquement que la tâche a été acceptée. Vous devez utiliser l'élémenttask_idrenvoyé pour interroger l'état final de la tâche.from aliyun.log import GetDeleteLogsStatusRequest, GetDeleteLogsStatusResponse def wait_for_task_completion(client: LogClient, project: str, logstore: str, task_id: str, timeout_seconds: int = 300): """Waits for the soft deletion task to complete by polling.""" start_time = time.time() while time.time() - start_time < timeout_seconds: request = GetDeleteLogsStatusRequest(project, logstore, task_id) try: res: GetDeleteLogsStatusResponse = client.get_delete_logs_status(request) progress = res.get_process() print(f"Querying status of task '{task_id}'... Progress: {progress:.2f}%") if progress >= 100.0: print("✅ Task completed!") return True time.sleep(2) # Avoid polling too frequently. except Exception as e: print(f"❌ Failed to query task status: {e}") return False print(f"⌛️ Task timed out (exceeded {timeout_seconds} seconds). Please retry later or check the task status.") return False # --- How to call --- # task_id = execute_soft_delete(...) # if task_id: # wait_for_task_completion(client, project_name, logstore_name, task_id) -
Auditez et gérez les tâches (consultez les tâches historiques).
Cette fonctionnalité est cruciale pour les audits de sécurité et la gestion des opérations, car elle fournit un historique complet de toutes les opérations de suppression.
from aliyun.log import ListDeleteLogsTasksRequest def list_all_delete_tasks(client: LogClient, project: str, logstore: str): """Lists the history of all soft deletion tasks for a specified Logstore.""" print(f"\nListing the history of soft deletion tasks for Logstore '{logstore}' in Project '{project}'...") request = ListDeleteLogsTasksRequest(project=project, logstore=logstore) try: res = client.list_delete_logs_tasks(request) print("✅ Task list retrieved successfully!") res.log_print() # log_print() prints all task details in a readable format. except Exception as e: print(f"❌ Failed to retrieve task list: {e}")
> Soft Delete Log