Tous les produits
Search
Centre de documentation

Simple Log Service:Suppression logique dans Simple Log Service

Dernière mise à jour :Aug 18, 2026

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

La suppression logique marque les données pour suppression au lieu de les effacer, ce qui permet de les retirer logiquement tout en les conservant physiquement. Le flux de travail est le suivant :

  1. Lancer une tâche de suppression : Démarrez une tâche de suppression asynchrone à l'aide d'un SDK ou de la console. Spécifiez une plage horaire et des conditions de requête.

  2. Marquage précis : Le service backend SLS localise toutes les entrées de journal correspondantes en fonction de vos conditions de requête. Au lieu de supprimer physiquement les données, le service ajoute un marqueur de suppression interne et invisible à chaque entrée.

  3. Transparence des requêtes : Une fois les données marquées, toutes les requêtes régulières, telles que GetLogs, GetHistograms et les requêtes d'analyse SQL, filtrent automatiquement ces données. Les données apparaissent donc comme supprimées pour vos applications et vos utilisateurs.

  4. Rétention et récupération : Les données marquées restent stockées physiquement mais sont inaccessibles via les requêtes. La récupération des données n'est actuellement pas prise en charge.

  5. Suppression définitive : À l'expiration de la période de rétention du Logstore, un mécanisme de nettoyage SLS effectue une suppression physique irréversible des données afin de libérer de l'espace de stockage.

Cas d'utilisation

En marquant les données pour suppression plutôt qu'en les effaçant immédiatement, la suppression logique permet de résoudre les défis suivants liés à la gestion des données :

  • Exigences de conformité et d'audit

    • Scénario : Des réglementations telles que les normes financières ou le RGPD exigent que les entreprises suppriment les données à la demande et conservent des registres d'audit des opérations de suppression.

    • Mise en œuvre : Les opérations de suppression logique génèrent des journaux système qui enregistrent l'heure de suppression, l'opérateur et l'étendue des données, afin de satisfaire aux exigences d'audit et de conformité.

  • Gestion des données dans les environnements de développement et de test

    • Scénario : Une équipe de test doit régulièrement nettoyer les anciennes données de test pour préparer de nouveaux tests de charge.

    • Mise en œuvre : Vous pouvez supprimer logiquement des données spécifiées par lots. Cette approche conserve la structure et la configuration du Logstore, évitant ainsi le coût lié à leur recréation.

  • Nettoyage des données erronées

    • Scénario : Une panne en ligne entraîne la collecte de données anormales, ce qui affecte la précision des analyses.

    • Mise en œuvre : Isolez et marquez rapidement les données erronées pour garantir que les vues métier ne contiennent que des données de haute qualité. Les données brutes sont conservées pour le dépannage ultérieur.

La suppression logique fonctionne conjointement avec d'autres capacités de sécurité et de conformité de Simple Log Service, telles que le chiffrement côté serveur et le contrôle d'accès granulaire, afin de répondre aux besoins de gouvernance des données au niveau de l'entreprise.

Précautions

  1. 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é.

  2. 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.

  3. 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.

  4. 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 :

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "log:DeleteLogStoreLogs",
              "log:GetDeleteLogStoreLogsTask",
              "log:ListDeleteLogStoreLogsTasks"
            ],
            "Resource": [
              "acs:log:*:*:project/ProjectName/logstore/LogstoreName"
            ],
            "Effect": "Allow"
          }
        ]
      }

Opérations dans la console

  1. Connectez-vous à la console Simple Log Service. Dans la section Projects, cliquez sur celui que vous souhaitez utiliser.

  2. Dans l'onglet Log Storage > Logstores, cliquez sur le logstore souhaité.

  3. 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 image > Soft Delete Log.

  4. 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.

  5. Une fois la suppression terminée, dans l'onglet Raw Log, cliquez sur image > Soft Delete Task. Dans la liste Soft Delete Task, vous pouvez consulter l'historique des tâches de suppression.

Opérations via le SDK

Python

  1. Utilisez pip show aliyun-log-python-sdk pour vérifier la version de aliyun-log-python-sdk.

    La version de aliyun-log-python-sdk doit être 0.9.28 ou ultérieure. Si votre version est antérieure, utilisez la commande pip install -U aliyun-log-python-sdk pour mettre à niveau la version du SDK.

  2. Soumettez une tâche de suppression logique.

    DeleteLogsRequest possè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 int Obligatoire

    Le 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.
  3. 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_logs est une API asynchrone. Un appel réussi indique uniquement que la tâche a été acceptée. Vous devez utiliser l'élément task_id renvoyé 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)
    
  4. 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}")