Todos os produtos
Search
Central de documentação

Simple Log Service:Exporte logs para múltiplos destinos com campos diferentes

Última atualização: Jul 03, 2026

Encaminhe uma única entrada de log para vários destinos de armazenamento, onde cada destino recebe apenas os campos necessários. Utilize o padrão tag-split-route na transformação de dados para crie cópias independentes do log original antes de modificar os campos.

Cenário

Um log bruto contém os campos f1, f2, f3, f4 e f5. Cada destino requer um subconjunto diferente desses campos:

  • target1: Exclui f1 e f2. Mantém f3, f4 e f5.

  • target2: Exclui f3 e f4. Mantém f1, f2 e f5.

Visão geral da solução

Exporte o mesmo log para múltiplos destinos com conjuntos de campos distintos aplicando o padrão tag-split-route:

  1. Tag -- Adicione um campo tag ao log que liste todos os nomes dos destinos.

  2. Split -- Divida o log em cópias separadas, uma para cada destino.

  3. Route -- Em cada cópia, remova os campos indesejados e envie o log para o destino correspondente.

Esse padrão gera cópias independentes do log original antes de aplicar qualquer modificação no nível de campo. Assim, cada destino recebe exatamente os campos necessários sem afetar as demais cópias.

Exemplo de configuração

Log bruto

__time__ : 1591754815
f1: GET
f2: https
f3: aliyun
f4: 200
f5: standard

Regras de transformação

Nota

Para obter mais informações sobre as funções de transformação de dados usadas neste exemplo, consulte Visão geral das funções.

As regras a seguir implementam o padrão tag-split-route:

  1. Chame e_set para defina um campo tag com o valor target1, target2.

  2. Utilize e_split para dividir o log em duas cópias com base no campo tag. Uma cópia contém tag: target1 e a outra contém tag: target2.

  3. Na cópia tag: target1, invoque e_compose dentro de e_if para remover os campos f1 e f2 e, em seguida, envie o resultado para target1 com e_output. Como e_output encerra o processamento dessa cópia, as regras subsequentes não se aplicam a ela.

  4. Para a cópia tag: target2 (que continua para a próxima regra), remova os campos f3 e f4 e envie o resultado para target2 usando e_output.

e_set("tag", "target1, target2")
e_split("tag")
e_if(e_search("tag==target1"), e_compose(e_drop_fields("f1", "f2", regex=False), e_output("target1")))
e_drop_fields("f3", "f4", regex=False)
e_output("target2")

Resultado para target1

__time__ : 1591754815
f3: aliyun
f4: 200
f5: standard

Resultado para target2

__time__ : 1591754815
f1: GET
f2: https
f5: standard

Erro comum: usar e_coutput em vez de e_output

As regras de transformação abaixo produzem a saída correta para target1, mas causam perda de dados em target2:

e_drop_fields("f1", "f2", regex=False)
e_coutput("target1")
e_drop_fields("f3", "f4", regex=False)
e_output("target2")

Causa raiz

A função e_output encerra o processamento da entrada de log atual após enviá-la a um destino. Por outro lado, e_coutput envia uma cópia para o destino e continua executando as regras subsequentes no log já modificado.

Neste exemplo:

  1. e_drop_fields("f1", "f2") remove f1 e f2 do log.

  2. e_coutput("target1") envia o log modificado (sem f1 e f2) para target1 — correto até aqui.

  3. O processamento continua com o mesmo log modificado (f1 e f2 já removidos).

  4. e_drop_fields("f3", "f4") remove f3 e f4 desse log modificado.

  5. e_output("target2") envia um log contendo apenas f5 para target2 — perdendo tanto f1 quanto f2.

Resultado incorreto para target2

__time__ : 1591754815
f5: standard

Os campos esperados f1 e f2 estão ausentes porque já foram removidos na etapa 1.

Correção

Adote o padrão tag-split-route mostrado na seção Exemplo de configuração. Esse padrão cria cópias independentes do log original antes de aplicar modificações no nível de campo, garantindo que cada destino receba o conjunto correto de campos.