Todos los productos
Search
Centro de documentos

Simple Log Service:Limpieza de datos mediante la llamada a funciones

Última actualización: Sep 22, 2026

Utilice las funciones de transformación de datos de Simple Log Service (SLS) para limpiar grandes volúmenes de registros recopilados y estandarizar el formato de los datos. Este tema describe los casos de uso comunes y las operaciones relacionadas con la limpieza de datos mediante la llamada a funciones.

Caso de uso 1: filtrar registros (funciones e_keep y e_drop)

Use la función e_drop o e_keep para filtrar registros. También puede emplear la función e_if o e_if_else junto con el parámetro DROP para lograr el mismo resultado.

Las reglas más habituales son las siguientes:

  • e_keep(e_search(...)): conserva el registro si se cumple la condición; lo descarta en caso contrario.

  • e_drop(e_search(...)): descarta el registro si se cumple la condición; lo conserva cuando no se cumple.

  • e_if_else(e_search("..."), KEEP, DROP): mantiene el registro al cumplirse la condición y lo elimina si no se cumple.

  • e_if(e_search("not ..."), DROP): elimina el registro cuando la condición es verdadera; lo retiene si es falsa.

  • e_if(e_search("..."), KEEP): esta regla de transformación carece de utilidad práctica.

Ejemplo:

  • Registros originales

    #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>
  • Regla de transformación

    Descarte los registros que no contengan el campo __topic__ ni el campo __tag__:__receive_time__.

    e_if(e_not_has("__topic__"),e_drop())
    e_if(e_not_has("__tag__:__receive_time__"),e_drop())
  • Resultado de la transformación

    __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: asignar valores a campos vacíos del registro (función e_set)

Utilice la función e_set para asignar valores a los campos vacíos de un registro.

  • Asigne un valor a un campo cuando este no exista o esté vacío en el registro original.

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

    Para obtener más información sobre los valores del parámetro mode, consulte Field extraction check and overwrite modes.

    Ejemplo:

    • Registro original

      name:
    • Regla de transformación

      e_set("name", "aspara2.0", mode="fill")
    • Resultado de la transformación

      name:  aspara2.0
  • Emplee GROK function para simplificar las expresiones regulares y extraer el contenido de los campos.

    Ejemplo:

    • Registro original

      content: "ip address: 192.168.1.1"
    • Regla de transformación

      Extraiga la dirección IP del campo content mediante la función GROK.

      e_regex("content", grok(r"(%{IP})"),"addr")
    • Resultado de la transformación

      addr:  192.168.1.1
      content: "ip address: 192.168.1.1"
  • Asigne valores a varios campos simultáneamente.

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

    Ejemplo:

    • Registro original

      __source__:  192.168.0.1
      __topic__:
      __tag__:
      __receive_time__:
      id:  7990
      test_string:  <function test1 at 0x1020401e0>
    • Regla de transformación

      Asigne valores a los campos __topic__, __tag__ y __receive_time__.

      e_set("__topic__","app", "__tag__","stu","__receive_time__","1597214851")
    • Resultado de la transformación

      __source__:  192.168.0.1
      __topic__:  app
      __tag__:  stu
      __receive_time__:  1597214851
      id:  7990
      test_string:  <function test1 at 0x1020401e0>

Caso de uso 3: eliminar y renombrar campos de forma condicional (funciones e_search, e_rename y e_compose)

En la mayoría de los escenarios, utilice la función e_compose para agrupar operaciones condicionales repetitivas.

Ejemplo:

  • Registro original

    content: 123
    age: 23
    name: twiss
  • Regla de transformación

    Primero, compruebe si el valor del campo content es 123. Si coincide, elimine los campos age y name. Después, cambie el nombre del campo content por ctx.

    e_if(e_search("content==123"),e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
  • Resultado de la transformación

    ctx: 123

Caso de uso 4: convertir los tipos de los parámetros de un registro (funciones v, ct_int y dt_totimestamp)

Durante la transformación de datos, los campos de un registro y sus valores siempre son cadenas de texto. Los datos de otros tipos se convierten automáticamente a cadenas. Por ello, al llamar a una función, preste atención a los tipos de parámetro que admite. Para obtener más información, consulte Syntax overview.

  • Llame a la función op_add para concatenar cadenas y sumar números.

    La función op_add admite tanto cadenas como valores numéricos, por lo que no necesita convertir los tipos de los parámetros.

    Ejemplo:

    • Registro original

      a : 1
      b : 2
    • Regla de transformación

      e_set("d",op_add(v("a"), v("b")))
      e_set("e",op_add(ct_int(v("a")), ct_int(v("b"))))
    • Resultado de la transformación

      a:1
      b:2
      d:12
      e:3
  • Utilice field operation functions y la función ct_int para convertir los tipos de datos. Luego, llame a la función Arithmetic functions para multiplicar números.

    Ejemplo:

    • Registro original

      a:2
      b:5
    • Regla de transformación

      Los valores v("a") y v("b") son cadenas de texto, pero el segundo parámetro de la función op_mul solo acepta tipos numéricos. Por lo tanto, debe usar la función ct_int para convertir esas cadenas a enteros antes de pasarlas a 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 de la transformación

      a: 2
      b: 5
      c: 10
      d: 22222
  • Llame a la función dt_parse y a la función dt_parsetimestamp para convertir una cadena o un objeto datetime a un formato de hora estándar.

    La función dt_totimestamp requiere un objeto datetime, no una cadena. Por consiguiente, debe invocar primero dt_parse para transformar el valor de cadena de time1 en un objeto datetime. Como alternativa, use directamente dt_parsetimestamp, ya que es compatible con objetos datetime y cadenas. Para más detalles, consulte Date and time functions.

    Ejemplo:

    • Registro original

      time1: 2020-09-17 9:00:00
    • Regla de transformación

      Convierta la fecha y hora representada por time1 a una marca de tiempo 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 de la transformación

      time1:  2019-06-03 2:41:26 
      time2:  1559529686 

Caso de uso 5: rellenar campos inexistentes con valores predeterminados (pasar el parámetro default)

Algunas funciones de expresiones DSL de SLS imponen requisitos específicos a los parámetros de entrada. Si estos no se cumplen, la ventana de transformación de datos genera un error o devuelve un valor predeterminado. Cuando un registro contiene un campo obligatorio incompleto, especifique un valor predeterminado en la función op_len.

Importante

Pasar un valor predeterminado a una función posterior podría provocar otro error. Gestione de inmediato las excepciones que devuelva la función.

  • Registro original

    data_len: 1024
  • Regla de transformación

    e_set("data_len", op_len(v("data", default="")))
  • Resultado de la transformación

    data: 0
    data_len: 0

Caso de uso 6: comprobar registros de forma condicional y agregar campos (funciones e_if y e_switch)

Utilice la función e_if o la función e_switch para evaluar registros. Para obtener más información, consulte Flow control functions.

  • Función e_if

    e_if(condition1, operation1, condition2, operation2, condition3, operation3, ....)
  • Función e_switch

    La función e_switch está formada por pares de condición y operación. Evalúa las condiciones de manera secuencial: si una se cumple, ejecuta la operación correspondiente y devuelve el resultado de inmediato. En caso contrario, pasa a la siguiente condición. Si ninguna se cumple y se configuró el parámetro default, se ejecuta la operación definida en default y se devuelve su resultado.

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

Ejemplo:

  • Registro original

    status1: 200
    status2: 404
  • Función e_if

    • Regla de transformación

      e_if(e_match("status1", "200"), e_set("status1_info", "normal"),
           e_match("status2", "404"), e_set("status2_info", "error"))
    • Resultado de la transformación

      status1: 200
      status2: 404
      status1_info: normal
      status2_info: error
  • Función e_switch

    • Regla de transformación

      e_switch(e_match("status1", "200"), e_set("status1_info", "normal"), 
               e_match("status2", "404"), e_set("status2_info", "error"))
    • Resultado de la transformación

      Si alguna condición se cumple, la función devuelve el resultado y deja de evaluar las demás.

      status1: 200
      status2: 404
      status1_info: normal

Caso de uso 7: convertir datos a una marca de tiempo UNIX con precisión de nanosegundos

En ciertos escenarios, la transformación de datos en SLS debe admitir marcas de tiempo con precisión de nanosegundos. Si el registro original incluye un campo con formato de marca de tiempo UNIX, utilice las funciones de operación de campos para analizarlo y obtener una hora de registro con precisión de nanosegundos.

  • Registro original

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time_nano":"1705043680630940602"
    }
  • Regla de transformación

    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 de la transformación

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

Caso de uso 8: convertir datos a una marca de tiempo ISO 8601 estándar con precisión de microsegundos

Existen casos de uso donde la transformación de datos en SLS requiere marcas de tiempo de alta precisión. Si el registro original contiene un campo con el formato de hora estándar ISO 8601, aplique las funciones de operación de campos para analizarlo y generar una hora de registro con precisión de microsegundos.

  • Registro original

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time":"2024-01-11 23:10:43.992847200"
    }
  • Regla de transformación

    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 de la transformación

    {
      "__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"
    }