O Simple Log Service oferece suporte à exclusão lógica, recurso que marca os dados de log para remoção em vez de excluí-los imediata e permanentemente.
Informações básicas
Em ambientes orientados por dados, logs e informações de observabilidade são ativos essenciais para as empresas, mas também trazem desafios de gerenciamento, conformidade e segurança. Para resolver essas questões, o Simple Log Service (SLS) disponibiliza a exclusão lógica: um mecanismo rastreável que adiciona uma camada de proteção ao seu framework de segurança e conformidade de dados.
Como funciona
Casos de uso
Precauções
Custos de armazenamento: Dados excluídos logicamente continuam a ocupar espaço de armazenamento e gerar cobranças durante o período de retenção. A exclusão física ocorre apenas quando o período de retenção do Logstore expira.
Precisão da consulta: Consulte antes de excluir. Antes da exclusão, execute uma consulta usando exatamente o mesmo intervalo de tempo e instrução de consulta. Visualize os dados a serem excluídos para confirmar se estão corretos.
Não é possível consultar ou analisar logs excluídos logicamente. Essa restrição aplica-se a recursos como consulta, análise SQL, ScheduledSQL e alertas. Operações de processamento de fluxo, incluindo consumo, transformação de dados e envio, não são afetadas.
A exclusão lógica é irreversível. Logs excluídos não podem ser recuperados.
Regiões suportadas
Encontre o endpoint de serviço da região do seu Project na página de visão geral dele. Para obter o ID de cada região, consulte Endpoints.
Permissões
Se você usar sua conta Alibaba Cloud, terá todas as permissões por padrão e poderá gerenciar Projects diretamente.
-
Caso utilize um usuário RAM, solicite as permissões necessárias ao proprietário da conta Alibaba Cloud. O Simple Log Service fornece os dois tipos de políticas de sistema a seguir:
-
Políticas de sistema: Concedem permissões amplas. Não é possível modificar o conteúdo dessas políticas, mas elas são simples de configurar.
AliyunLogFullAccess: Concede permissões totais de gerenciamento para o Simple Log Service.
AliyunLogReadOnlyAccess: Concede permissões somente leitura para o Simple Log Service.
-
Políticas personalizadas: Recomendamos seguir o princípio do menor privilégio. Conceda apenas as permissões mínimas necessárias para pessoal confiável ou serviços automatizados.
O código a seguir apresenta um exemplo de política personalizada:
No script, substitua
Project nameeLogstore namepelos seus valores reais.Para mais informações sobre como configurar permissões para um usuário RAM, consulte Configurar permissões RAM para o Simple Log Service e Informações de autorização.
{ "Version": "1", "Statement": [ { "Action": [ "log:DeleteLogStoreLogs", "log:GetDeleteLogStoreLogsTask", "log:ListDeleteLogStoreLogsTasks" ], "Resource": [ "acs:log:*:*:project/ProjectName/logstore/LogstoreName" ], "Effect": "Allow" } ] }
-
Operações no console
Faça login no console do Simple Log Service. Na seção Projects, clique em projeto desejado.
Na aba , clique em logstore desejado.
Na página Search & Analysis do Logstore, insira uma instrução de consulta e selecione um intervalo de tempo. Na aba Raw Log, clique em .
Na caixa de diálogo Soft Delete Log, leia atentamente as informações e clique em Confirm. Após a exclusão, os logs deixam de ser visíveis.
Após a conclusão da exclusão, na aba Raw Log, clique em . Na lista Soft Delete Task, visualize o histórico de tarefas de exclusão.
Operações via SDK
Python
-
Use
pip show aliyun-log-python-sdkpara verificar a versão doaliyun-log-python-sdk.A versão do
aliyun-log-python-sdkdeve ser 0.9.28 ou superior. Se sua versão for anterior, use o comandopip install -U aliyun-log-python-sdkpara atualizar o SDK. -
Envie uma tarefa de exclusão lógica.
DeleteLogsRequestpossui os seguintes parâmetros:Parâmetro
Exemplo
# 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(Obrigatório)Nome do projeto. No Simple Log Service, o projeto isola os recursos de diferentes usuários e controla o acesso a recursos específicos. Consulte Gerenciar projetos.
LogStore
String(Obrigatório)Nome do logstore. No Simple Log Service, o logstore serve para coletar, armazenar e consultar logs. Consulte Gerenciar Logstores.
fromTime
intObrigatórioInício do intervalo de tempo da consulta, especificado como um timestamp Unix.
toTime
int(Obrigatório)Fim do intervalo de tempo da consulta, especificado como um timestamp Unix.
query
String(Obrigatório)Instrução de pesquisa ou análise. Para mais informações, consulte Visão geral de consulta e análise.
Tenha cuidado ao definir
"*"ou"level: ERROR". Essas configurações podem causar a exclusão acidental de uma grande quantidade de dados. -
Verifique o status da tarefa periodicamente.
Este bloco de código verifica continuamente o progresso da tarefa até sua conclusão ou timeout. Trata-se de uma etapa fundamental para garantir a execução bem-sucedida da operação de exclusão.
delete_logsé uma API assíncrona. Uma chamada bem-sucedida indica apenas que a tarefa foi aceita. Use otask_idretornado para consultar o status final da tarefa.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) -
Audite e gerencie tarefas (visualize tarefas históricas).
Esse recurso é crucial para auditorias de segurança e gerenciamento operacional, pois fornece um histórico completo de todas as operações de exclusão.
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