Todos os produtos
Search
Central de documentação

Simple Log Service:Modify and delete log data

Última atualização: Jul 14, 2026

O Simple Log Service oferece suporte a atualizações e exclusões no nível de linha para dados já gravados em um Logstore. Ative esse recurso ao criar o Logstore e use a OpenAPI ou o SDK do Python para modificar e excluir dados de log por RowID ou por consulta.

Visão geral

Por padrão, um Logstore segue um modelo imutável e apenas de adição (append-only). Após a gravação dos dados no Logstore, não é possível modificá-los ou excluí-los localmente.

Alguns cenários exigem a modificação ou exclusão de dados existentes em um Logstore:

  • Correção retroativa de campos: atualize campos de negócio, como status de pedido, rótulos de risco ou resultados de pontuação, após a gravação do log original.

  • Limpeza de dados de teste: remova registros de teste ou canário de um Logstore de produção.

  • Reparo de registro único: corrija uma entrada de log específica durante um fluxo de trabalho de replay de negócios ou reconciliação.

O Simple Log Service fornece capacidades de atualização e exclusão no nível de linha por Logstore. Modifique ou exclua registros individuais usando RowID ou modifique e exclua registros em lote por consulta.

Importante

Observe os pontos abaixo antes de usar este recurso:

  • Este recurso está disponível apenas para Logstores recém-criados. Defina enableModify como true durante a criação do Logstore. Não é possível ativar essa funcionalidade em um Logstore existente.

  • Uma vez ativado, o recurso não pode ser desativado. Planeje adequadamente antes de criar o Logstore.

  • Todas as operações de modificação e exclusão são irreversíveis. Não existe mecanismo nativo de rollback.

  • Consumidores em tempo real (LogHub) e tarefas de entrega não recebem notificações sobre modificações ou exclusões. Apenas caminhos de leitura baseados em consulta (Search, SQL, SPL) retornam os dados mais recentes.

Conceitos principais

RowID

O RowID é um identificador lógico que o Simple Log Service atribui a cada entrada de log em um Logstore com atualização e exclusão no nível de linha ativadas. Todas as operações de modificação e exclusão usam o RowID para localizar o registro alvo.

  • Formato: o RowID é gerado no momento da gravação e não pode ser personalizado. Trate-o como um identificador opaco.

  • Estabilidade: o RowID permanece inalterado durante todo o ciclo de vida de um registro de log, mesmo após a modificação do registro.

  • Visibilidade: os resultados da consulta incluem automaticamente o campo integrado __rowid__. Este nome de campo é reservado e não pode ser usado nas configurações de índice.

AffectedRows

Cada solicitação bem-sucedida de modificação ou exclusão retorna AffectedRows, que indica o número de registros de log efetivamente afetados. Use esse valor para verificar se a operação foi executada conforme o esperado.

Nota

O valor AffectedRows é retornado no corpo da resposta HTTP como x-log-affectedrows. No SDK do Python, leia-o por meio de resp.affected_rows.

Pré-requisitos

Certifique-se de que os seguintes requisitos foram atendidos:

  • Um projeto do Simple Log Service. Para mais informações, consulte Criar um projeto.

  • Um Logstore com o parâmetro enableModify definido como true. Consulte Ativar o recurso neste tópico.

  • As permissões RAM log:UpdateLogStoreLogs e log:DeleteLogStoreLogs concedidas ao chamador. Consulte Permissões RAM necessárias neste tópico.

  • (Condicional) Se você usar operações baseadas em consulta, os campos referenciados na consulta devem ter índices configurados.

Ativar o recurso

Para usar a atualização e exclusão no nível de linha, defina o parâmetro enableModify como true ao chamar a API CreateLogStore.

Aviso
  • Defina enableModify apenas ao criar um novo Logstore. Não é possível ativar esse recurso em um Logstore existente.

  • Após definir enableModify como true, não será possível desativá-lo.

  • Esse recurso só pode ser ativado via OpenAPI ou SDK. O console do Simple Log Service não oferece suporte a esta funcionalidade.

Ativar via OpenAPI

Chame a API CreateLogStore e defina enableModify como true no corpo da solicitação:

POST /logstores HTTP/1.1
Host: <project>.<endpoint>
Content-Type: application/json

{
  "logstoreName": "my-logstore",
  "ttl": 30,
  "shardCount": 1,
  "enableModify": true
}

Após a criação do Logstore, chame a API GetLogStore para verificar. Se a resposta contiver "enableModify": true, o recurso estará ativo.

Ativar via SDK do Python

from aliyun.log import LogClient

# Obtain AccessKey credentials from environment variables.
client = LogClient(endpoint, access_key_id, access_key)

client.create_logstore(
    project_name="my-project",
    logstore_name="my-logstore",
    ttl=30,
    shard_count=1,
    enable_modify=True,
)

Modificar e excluir dados

Dois métodos estão disponíveis para modificar e excluir dados de log:

Método

Cenário

Máximo de linhas por solicitação

Por RowID

Indicado quando você conhece o RowID exato do registro alvo e deseja modificá-lo ou excluí-lo com precisão.

1

Por consulta

Recomendado para modificar ou excluir em lote todos os registros que correspondem a uma condição de consulta.

10.000

Método 1: Modificar e excluir por RowID

Use este método quando já possuir o RowID de um registro específico, geralmente obtido a partir de um resultado de consulta anterior.

Modificar um único registro

Especifique apenas os campos que deseja alterar. Os campos não incluídos permanecerão inalterados.

from aliyun.log import LogClient, LogItem

client = LogClient(endpoint, access_key_id, access_key)

# Specify only the fields to update. Unspecified fields keep their original values.
new_item = LogItem(
    contents=[("status", "REFUNDED")],
)

resp = client.update_logs(
    project="my-project",
    logstore="my-logstore",
    rowid=rowid,
    log_item=new_item,
)
print(f"Affected rows: {resp.affected_rows}")

Excluir um único registro

resp = client.delete_logs_v2(
    project="my-project",
    logstore="my-logstore",
    rowid=rowid,
)
print(f"Affected rows: {resp.affected_rows}")
Nota
  • A exclusão do mesmo registro múltiplas vezes é idempotente. A operação não retorna erro, mas affected_rows devolve o valor 0.

  • Use delete_logs_v2 para exclusão síncrona. O método legado delete_logs realiza uma exclusão lógica assíncrona (soft delete), que não é suportada em Logstores com enableModify ativado.

Método 2: Modificar e excluir por consulta

Use este método para modificar ou excluir em lote registros que correspondam a uma condição de consulta. A consulta é executada no servidor e a modificação ou exclusão é aplicada a todos os registros correspondentes.

Importante

Esta operação é irreversível.

  • Em caso de falha parcial da operação, as linhas já modificadas ou excluídas não sofrem rollback. A resposta retorna apenas o número de linhas efetivamente afetadas.

  • Antes de executar, use Search ou SQL para visualizar os registros que correspondem à sua condição de consulta e validar o escopo.

  • Operações em lote baseadas em consulta consomem muitos recursos. Reduza o intervalo de tempo ou refine a condição de consulta para permanecer dentro do limite de 10.000 linhas por solicitação.

Nota

Os campos referenciados na consulta precisam ter índices configurados. Caso contrário, a consulta não retornará resultados.

Excluir por consulta

resp = client.delete_logs_v2(
    project="my-project",
    logstore="my-logstore",
    from_time=1716537600,
    to_time=1716624000,
    query='level: DEBUG',
)
print(f"Deleted rows: {resp.affected_rows}")

Modificar por consulta

Especifique tanto a condição de consulta quanto os valores dos campos a serem atualizados. Todos os registros correspondentes serão atualizados com os mesmos valores de campo.

resp = client.update_logs(
    project="my-project",
    logstore="my-logstore",
    from_time=1716537600,
    to_time=1716624000,
    query='order_id: 12345 and status: "PENDING"',
    update_fields={"status": "REFUNDED", "refund_at": "2026-05-25T10:00:00Z"},
)
print(f"Modified rows: {resp.affected_rows}")
Nota
  • Se você passar tanto rowid quanto query na mesma solicitação, rowid terá precedência e o parâmetro query será ignorado.

  • Operações baseadas em consulta exigem que os dados estejam visíveis para consulta. Pode haver um atraso de alguns segundos entre a ingestão dos dados e sua disponibilidade para consulta.

Verificar resultados

Verifique o resultado após cada operação de modificação ou exclusão para confirmar o sucesso conforme o esperado.

  • Verificar AffectedRows: cada solicitação retorna AffectedRows na resposta (cabeçalho HTTP x-log-affectedrows ou resp.affected_rows no SDK do Python). Compare esse valor com o número esperado de registros:

    • AffectedRows > 0 e corresponde ao esperado: a operação foi bem-sucedida.

    • AffectedRows = 0: nenhum registro correspondeu à condição ou o registro já havia sido excluído. Revise sua consulta ou RowID.

    • AffectedRows está abaixo do esperado: pode ter ocorrido uma falha parcial. Execute novamente a operação para os registros restantes.

  • Executar uma consulta subsequente: para operações em lote, execute uma consulta Search ou SQL após a operação para confirmar que os dados refletem o estado esperado. Isso é especialmente importante quando AffectedRows for menor que o esperado.

Consistência de dados

As operações de modificação e exclusão entram em vigor de forma síncrona. Após o sucesso de uma solicitação, as consultas subsequentes (Search, SQL e SPL) retornam os resultados atualizados.

Tenha em mente os seguintes comportamentos:

  • O consumo em tempo real não é afetado: consumidores do LogHub e tarefas de entrega (como entrega para OSS ou MaxCompute) operam no fluxo de gravação original. Eles não refletem modificações ou exclusões. Apenas caminhos de leitura baseados em consulta retornam os dados mais recentes.

  • Operações baseadas em consulta não são atômicas: o servidor processa cada registro correspondente individualmente. Se ocorrer uma falha parcial, os registros já processados não sofrem rollback. A resposta retorna o número de linhas efetivamente afetadas.

Permissões RAM necessárias

O usuário ou função RAM que chamar a API de modificação ou exclusão deve possuir as seguintes permissões:

Ação

Descrição

log:UpdateLogStoreLogs

Modificar dados de log por RowID ou por consulta.

log:DeleteLogStoreLogs

Excluir dados de log por RowID ou por consulta.

Formato do ARN do recurso:

acs:log:<region>:<account-id>:project/<project-name>/logstore/<logstore-name>
Nota

Recomendamos criar um usuário ou função RAM dedicado para operações de modificação e exclusão, especialmente para exclusões em lote baseadas em consulta. Use o ActionTrail para auditar essas operações.

Limites de uso

Item

Descrição

Apenas novos Logstores

É obrigatório definir enableModify=true durante a criação do Logstore. Não é possível ativar esse recurso em um Logstore existente.

Não pode ser desativado

Após ativar este recurso, não é possível desativá-lo.

Máximo de linhas por operação baseada em consulta

10.000 linhas por solicitação. Se a consulta corresponder a mais de 10.000 registros, a solicitação será rejeitada. Reduza o intervalo de tempo ou refine a condição de consulta.

Requisito de índice

Campos usados como condições de consulta devem ter índices configurados. Operações por RowID não exigem índices de campos de negócio.

Sem reconstrução de índice

Após ativar este recurso, o Logstore não suporta reconstrução de índices.

Sem exclusão lógica (soft delete)

Com este recurso ativado, a exclusão lógica assíncrona não é suportada. Use a interface de exclusão síncrona (delete_logs_v2) descrita neste tópico.

__rowid__ é reservado

Não é permitido usar __rowid__ como nome de campo de índice ou nome de campo personalizado.

Consumidores em tempo real não notificados

Consumidores do LogHub e tarefas de entrega (como entrega para OSS ou MaxCompute) não recebem notificações sobre modificações ou exclusões. Apenas caminhos de leitura baseados em consulta (Search, SQL, SPL) retornam os dados mais recentes.

Faturamento

  • Operações de modificação: atualmente, operações de modificação não são cobradas. Futuramente, as cobranças serão baseadas no espaço de armazenamento gerado pelos dados modificados.

  • Operações de exclusão: operações de exclusão não incorrem em cobranças adicionais.

Perguntas frequentes

Posso ativar este recurso em um Logstore existente?

Não. Este recurso requer um formato de armazenamento disponível apenas no momento da criação do Logstore. Crie um novo Logstore com enableModify=true e migre os dados históricos por meio de transformação de dados ou do SDK.

As operações de modificação e exclusão afetam consumidores em tempo real?

Não. Consumidores do LogHub e tarefas de entrega operam no fluxo de gravação original e não refletem modificações ou exclusões. Apenas caminhos de leitura baseados em consulta (Search, SQL e SPL) retornam os dados mais recentes.

As modificações e exclusões ficam visíveis imediatamente?

Sim. Após o sucesso de uma solicitação, as consultas subsequentes retornam os dados atualizados. O valor AffectedRows na resposta indica quantos registros foram efetivamente modificados ou excluídos.

Posso reverter uma modificação ou exclusão acidental?

Não. Não existe mecanismo nativo de rollback. Visualize os registros correspondentes com Search ou SQL antes de executar uma operação de modificação ou exclusão. Recomendamos usar usuários RAM dedicados com permissões restritas e ativar o ActionTrail para auditoria.

A exclusão libera espaço de armazenamento imediatamente?

A exclusão é uma operação lógica. O armazenamento subjacente é retido até que o TTL do Logstore expire ou uma compactação em segundo plano seja executada. Todos os caminhos de consulta filtram os registros excluídos, portanto, os dados excluídos ficam invisíveis para os usuários.