Todos os produtos
Search
Central de documentação

Simple Log Service:Limpeza de dados por meio da chamada de funções

Última atualização: Jul 03, 2026

Use as funções de transformação de dados do Simple Log Service (SLS) para limpar grandes volumes de logs coletados e padronizar o formato dos dados. Este tópico descreve casos de uso comuns e operações relacionadas à limpeza de dados mediante a chamada de funções.

Caso de uso 1: Filtrar logs (funções e_keep e e_drop)

Use a função e_drop ou e_keep para filtrar logs. Você também pode usar a função e_if ou e_if_else com o parâmetro DROP para filtrar logs.

As regras comuns são:

  • e_keep(e_search(...)): Mantém o log se a condição for atendida. Descarta o log caso contrário.

  • e_drop(e_search(...)): Descarta o log se a condição for atendida. Mantém o log caso contrário.

  • e_if_else(e_search("..."), KEEP, DROP): Mantém o log se a condição for atendida. Descarta o log caso contrário.

  • e_if(e_search("not ..."), DROP): Descarta o log se a condição for atendida. Mantém o log caso contrário.

  • e_if(e_search("..."), KEEP): Esta é uma regra de transformação sem efeito prático.

Exemplo:

  • Logs brutos

    #Log 1
    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>
    
    #Log 2
    __source__:  192.168.0.1
    class:  produce_case
    id:  7990
    test_string:  <function test1 at 0x1020401e0>
  • Regra de transformação

    Descarte os logs que não possuem o campo __topic__ ou o campo __tag__:__receive_time__.

    e_if(e_not_has("__topic__"),e_drop())
    e_if(e_not_has("__tag__:__receive_time__"),e_drop())
  • Resultado da transformação

    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>

Caso de uso 2: Atribuir valores a campos de log vazios (função e_set)

Use a função e_set para atribuir valores a campos de log vazios.

  • Atribua um valor a um campo caso ele não exista ou esteja vazio no original.

    e_set("result", "......value......", mode="fill")

    Para obter mais informações sobre os valores do parâmetro mode, consulte Modos de verificação e sobrescrita de extração de campos.

    Exemplo:

    • Log bruto

      name:
    • Regra de transformação

      e_set("name", "aspara2.0", mode="fill")
    • Resultado da transformação

      name:  aspara2.0
  • Use a função GROK para simplificar expressões regulares e extrair o conteúdo do campo.

    Exemplo:

    • Log bruto

      content: "ip address: 192.168.1.1"
    • Regra de transformação

      Extraia o endereço IP do campo content usando a função GROK.

      e_regex("content", grok(r"(%{IP})"),"addr")
    • Resultado da transformação

      addr:  192.168.1.1
      content: "ip address: 192.168.1.1"
  • Atribua valores a vários campos simultaneamente.

    e_set("k1", "v1", "k2", "v2", "k3", "v3", ......)

    Exemplo:

    • Log bruto

      __source__:  192.168.0.1
      __topic__:
      __tag__:
      __receive_time__:
      id:  7990
      test_string:  <function test1 at 0x1020401e0>
    • Regra de transformação

      Defina valores para os campos __topic__, __tag__ e __receive_time__.

      e_set("__topic__","app", "__tag__","stu","__receive_time__","1597214851")
    • Resultado da transformação

      __source__:  192.168.0.1
      __topic__:  app
      __tag__:  stu
      __receive_time__:  1597214851
      id:  7990
      test_string:  <function test1 at 0x1020401e0>
  • Caso de uso 3: Exclua e renomear campos condicionalmente (funções e_search, e_rename e e_compose)

    Na maioria dos cenários, use a função e_compose para executar operações condicionais repetidas.

    Exemplo:

    • Log bruto

      content: 123
      age: 23
      name: twiss
    • Regra de transformação

      Primeiro, verifique se o valor do campo content é 123. Em caso afirmativo, exclua os campos age e name. Em seguida, renomeie o campo content para ctx.

      e_if(e_search("content==123"),e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
    • Resultado da transformação

      ctx: 123

    Caso de uso 4: Converter tipos de parâmetros de log (funções v, ct_int e dt_totimestamp)

    Durante a transformação de dados, os campos de log e seus valores são sempre strings. Dados de tipos não string são convertidos automaticamente para o tipo string. Portanto, ao chamar uma função, preste atenção aos tipos de parâmetros aceitos. Para mais detalhes, consulte Visão geral da sintaxe.

    • Chame a função op_add para concatenar strings e somar números.

      A função op_add aceita tanto tipos string quanto numéricos. Assim, não é necessário converter os tipos dos parâmetros.

      Exemplo:

      • Log bruto

        a : 1
        b : 2
      • Regra de transformação

        e_set("d",op_add(v("a"), v("b")))
        e_set("e",op_add(ct_int(v("a")), ct_int(v("b"))))
      • Resultado da transformação

        a:1
        b:2
        d:12
        e:3
    • Use as funções de operação de campo e a função ct_int para conversão de tipo e, em seguida, chame a função op_mul para multiplicar números.

      Exemplo:

      • Log bruto

        a:2
        b:5
      • Regra de transformação

        Os valores v("a") e v("b") são ambos strings. O segundo parâmetro da função op_mul aceita apenas tipos numéricos. Por isso, use a função ct_int para converter as strings em inteiros antes de passá-las para a função op_mul.

        e_set("c",op_mul(ct_int(v("a")), ct_int(v("b"))))
        e_set("d",op_mul(v("a"), ct_int(v("b"))))
      • Resultado da transformação

        a: 2
        b: 5
        c: 10
        d: 22222
    • Chame a função dt_parse e a função dt_parsetimestamp para converter uma string ou um objeto datetime em um formato de hora padrão.

      A função dt_totimestamp aceita um objeto datetime, não uma string. Portanto, chame a função dt_parse para converter o valor string de time1 em um objeto datetime. Alternativamente, use diretamente a função dt_parsetimestamp, que aceita tanto objetos datetime quanto strings. Para mais informações, consulte Funções de data e hora.

      Exemplo:

      • Log bruto

        time1: 2020-09-17 9:00:00
      • Regra de transformação

        Converta a data e hora representada por time1 em um timestamp UNIX.

        e_set("time1", "2019-06-03 2:41:26")
        e_set("time2", dt_totimestamp(dt_parse(v("time1")))) or e_set("time2", dt_parsetimestamp(v("time1"))) 
      • Resultado da transformação

        time1:  2019-06-03 2:41:26 
        time2:  1559529686 
    • Caso de uso 5: Preencher campos de log inexistentes com valores padrão (passar o parâmetro default)

      Algumas funções de expressão SLS DSL têm requisitos específicos para parâmetros de entrada. Se esses requisitos não forem atendidos, a janela de transformação de dados relatará um erro ou retornará um valor padrão. Caso um log contenha um campo obrigatório, mas incompleto, especifique um valor padrão na função op_len.

      Importante

      Passar um valor padrão para uma função subsequente pode causar outro erro. Trate prontamente as exceções retornadas pela função.

      • Log bruto

        data_len: 1024
      • Regra de transformação

        e_set("data_len", op_len(v("data", default="")))
      • Resultado da transformação

        data: 0
        data_len: 0

      Caso de uso 6: Verificar logs condicionalmente e adicionar campos (funções e_if e e_switch)

      Use a função e_if ou a função e_switch para verificar logs. Para mais informações, consulte Funções de controle de fluxo.

      • Função e_if

        e_if(condition1, operation1, condition2, operation2, condition3, operation3, ....)
      • Função e_switch

        A função e_switch consiste em pares de condição-operação. Ela verifica as condições sequencialmente. Se uma condição for atendida, a operação correspondente será executada e o resultado retornado imediatamente. Caso contrário, a função verifica a próxima condição. Se nenhuma condição for atendida e o parâmetro default estiver configurado, a operação definida para default será executada e seu resultado retornado.

        e_switch(condition1, operation1, condition2, operation2, condition3, operation3, ...., default=None)

      Exemplo:

      • Log bruto

        status1: 200
        status2: 404
      • Função e_if

        • Regra de transformação

          e_if(e_match("status1", "200"), e_set("status1_info", "normal"),
               e_match("status2", "404"), e_set("status2_info", "error"))
        • Resultado da transformação

          status1: 200
          status2: 404
          status1_info: normal
          status2_info: error
      • Função e_switch

        • Regra de transformação

          e_switch(e_match("status1", "200"), e_set("status1_info", "normal"), 
                   e_match("status2", "404"), e_set("status2_info", "error"))
        • Resultado da transformação

          Se qualquer condição for atendida, o resultado é retornado e nenhuma outra condição é verificada.

          status1: 200
          status2: 404
          status1_info: normal

      Caso de uso 7: Converter dados em um timestamp UNIX com precisão de nanossegundos

      Em alguns cenários, a transformação de dados no SLS precisa oferecer suporte a precisão de timestamp no nível de nanossegundos. Se um log bruto contiver um campo no formato de timestamp UNIX, use funções de operação de campo para analisá-lo e obter um horário de log com precisão de nanossegundos.

      • Log bruto

        {
          "__source__": "1.2.3.4",
          "__time__": 1704983810,
          "__topic__": "test",
          "log_time_nano":"1705043680630940602"
        }
      • Regra de transformação

        e_set(
            "__time__", op_div_floor(ct_int(v("log_time_nano")), 1000000000),
        )
        e_set(
            "__time_ns_part__", op_mod(ct_int(v("log_time_nano")), 1000000000),
        )
      • Resultado da transformação

        {
          "__source__": "1.2.3.4",
          "__time__": 1705043680,
          "__time_ns_part__": 630940602,
          "__topic__": "test",
          "log_time_nano":"1705043680630940602"
        }

      Caso de uso 8: Converter dados em um timestamp ISO 8601 padrão com precisão de microssegundos

      Em determinados cenários, a transformação de dados no SLS exige suporte a timestamps de alta precisão. Se um log bruto contiver um campo no formato de hora padrão ISO 8601, use funções de operação de campo para analisá-lo e obter um horário de log com precisão de microssegundos.

      • Log bruto

        {
          "__source__": "1.2.3.4",
          "__time__": 1704983810,
          "__topic__": "test",
          "log_time":"2024-01-11 23:10:43.992847200"
        }
      • Regra de transformação

        e_set(
            "__time__", dt_parsetimestamp(v("log_time"), tz="Asia/Shanghai"), mode="overwrite",
        )
        e_set("tmp_ms", dt_prop(v("log_time"), "microsecond"))
        e_set(
            "__time_ns_part__", op_mul(ct_int(v("tmp_ms")), 1000),
        )
      • Resultado da transformação

        {
          "__source__": "1.2.3.4",
          "__time__": 1704985843,
          "__time_ns_part__": 992847000,
          "__topic__": "test",
          "log_time": "2024-01-11 23:10:43.992847200",
          "tmp_ms": "992847"
        }