Las funciones de procesamiento de eventos permiten descartar, conservar, dividir y generar registros durante la transformación de datos. Este tema describe la sintaxis, los parámetros y ejemplos de cada función.
Funciones
|
Categoría |
Función |
Descripción |
|
Operaciones de eventos |
Descarta un registro según una condición. Se puede utilizar con otras funciones. Para obtener más información, consulte Replicate and distribute data. |
|
|
Conserva un registro según una condición. Tanto e_keep como e_drop descartan registros. e_keep descarta un registro cuando no se cumple la condición, mientras que e_drop lo descarta cuando sí se cumple.
Se puede utilizar con otras funciones. Para obtener más información, consulte Transform complex JSON data. |
||
|
División de eventos |
Divide un registro en varios registros según el valor de un campo. También permite extraer campos con JMESPath antes de la división. Se puede utilizar con otras funciones. Para obtener más información, consulte Transform complex JSON data. |
|
|
Salida de eventos |
Envía un registro a un Logstore específico. Es posible configurar el tema, el origen, las etiquetas y el hash del shard para el registro de salida.
Se puede utilizar con otras funciones. Para obtener más información, consulte Aggregate log data from different Logstores into one Logstore. |
|
|
Transformación de eventos en datos de series temporales |
Convierte un registro al formato de series temporales (Metricstore). Nota
Después de procesar los datos en formato de series temporales, seleccione un Metricstore como destino al guardar los resultados de la transformación. A continuación se muestra un ejemplo típico de datos de series temporales:
Para obtener más información, consulte Time series data (Metric). Se puede utilizar con otras funciones. Para obtener más información, consulte Convert log fields in a Logstore to metric measures in a Metricstore. |
e_drop
Descarta un registro según una condición.
-
Sintaxis
e_drop(condition=True)Se admite el identificador fijo DROP, que equivale a e_drop().
-
Parámetros
Nombre del parámetro
Tipo
Obligatorio
Descripción
condition
Bool
No
Valor predeterminado: True. Por lo general, se pasa a este parámetro el resultado de una función condicional.
-
Respuesta
Descarta el registro y devuelve None si se cumple la condición. De lo contrario, devuelve el registro original.
-
Ejemplos
-
Ejemplo 1: Descartar el registro si el valor del campo __programe__ es access. En caso contrario, conservar el registro.
-
Registros sin procesar
__programe__: access age: 18 content: 123 name: maki __programe__: error age: 18 content: 123 name: maki -
Regla de transformación
e_if(e_search("__programe__==access"), DROP) -
Resultado
Se descarta el registro cuyo campo __programe__ tiene el valor access. Se conserva el registro cuyo campo __programe__ tiene el valor error.
__programe__: error age: 18 content: 123 name: maki
-
-
Ejemplo 2: La condición se evalúa como True. El registro se descarta.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_drop(e_search("k1==v1")) -
Resultado
El registro se descarta porque la condición k1==v1 es True.
-
-
Ejemplo 3: La condición se evalúa como False. El registro se conserva.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_drop(e_search("not k1==v1")) -
Resultado
k1: v1 k2: v2 k3: k1
-
-
Ejemplo 4: No se establece ninguna condición. Se utiliza el valor predeterminado True y el registro se descarta.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_drop() -
Resultado
El registro se descarta.
-
-
-
Referencias
Se puede utilizar con otras funciones. Para obtener más información, consulte Replicate and distribute data.
e_keep
Conserva un registro según una condición.
-
Sintaxis
e_keep(condition=True)Se admite el identificador fijo KEEP, que equivale a e_keep().
-
Parámetros
Nombre del parámetro
Tipo
Obligatorio
Descripción
condition
Bool
No
Valor predeterminado: True. Por lo general, se pasa a este parámetro el resultado de una función condicional.
-
Respuesta
Devuelve el registro original si se cumple la condición. Descarta el registro si no se cumple la condición.
-
Ejemplos
-
Ejemplo 1: Conservar el registro si el valor del campo
__programe__es access. En caso contrario, descartar el registro.-
Registros sin procesar
__programe__: access age: 18 content: 123 name: maki __programe__: error age: 18 content: 123 name: maki -
Regla de transformación
e_keep(e_search("__programe__==access")) # Equivalent to e_if(e_search("not __programe__==access"), DROP) # Equivalent to e_if_else(e_search("__programe__==access"), KEEP, DROP) -
Resultado
Se conserva el registro cuyo campo __programe__ tiene el valor access.
__programe__: access age: 18 content: 123 name: maki
-
-
Ejemplo 2: La condición se evalúa como True. El registro se conserva.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_keep(e_search("k1==v1")) -
Resultado
k1: v1 k2: v2 k3: k1
-
-
Ejemplo 3: La condición se evalúa como False. El registro se descarta.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_keep(e_search("not k1==v1")) -
Resultado
El registro se descarta.
-
-
Ejemplo 4: La condición es False. El registro se descarta.
-
Registro sin procesar
k1: v1 k2: v2 k3: k1 -
Regla de transformación
e_keep(False) -
Resultado
El registro se descarta.
-
-
-
Referencias
Se puede utilizar con otras funciones. Para obtener más información, consulte Transform complex JSON data.
e_split
Divide un registro en varios registros según el valor de un campo. También permite extraer campos con JMESPath antes de la división.
-
Sintaxis
e_split(field_name, sep=',', quote='"', lstrip=True, jmes=None, output=None)Reglas de división:
Si especifica el parámetro jmes, el valor del campo del registro se convierte a una lista JSON y se utiliza JMES para extraer valores para el siguiente paso. Si no especifica el parámetro jmes, el valor del campo se utiliza directamente en el siguiente paso.
Si el valor del paso anterior es una lista o una cadena en formato de lista JSON, el registro se divide según esta lista. De lo contrario, el valor se analiza como un archivo CSV mediante los parámetros sep, quote y lstrip. A continuación, el registro se divide según los valores analizados.
-
Parámetros
Nombre del parámetro
Tipo
Obligatorio
Descripción
field_name
String
Sí
Nombre del campo que se va a dividir. Para obtener información sobre cómo establecer nombres de campos especiales, consulte Event types.
sep
String
No
Separador que se utiliza para dividir varios valores.
quote
String
No
Carácter de comillas que se utiliza para encerrar valores.
lstrip
String
No
Indica si se deben eliminar los espacios iniciales de cada valor. Valor predeterminado: True.
jmes
String
No
Convierte el valor del campo en un objeto JSON, extrae un valor mediante una expresión JMES y luego divide el resultado.
output
String
No
Nombre del campo para los resultados de la división. De forma predeterminada, se sobrescribe el nombre del campo original.
-
Respuesta
Devuelve una lista de registros cuyos valores de campo se reemplazan por los valores divididos de la lista de origen.
-
Ejemplos
-
Registros sin procesar
__topic__: age: 18 content: 123 name: maki __topic__: age: 18 content: 123 name: maki -
Regla de transformación
e_set("__topic__", "V_SENT,V_RECV,A_SENT,A_RECV") e_split("__topic__") -
Resultado
__topic__: A_SENT age: 18 content: 123 name: maki __topic__: V_RECV age: 18 content: 123 name: maki ...
-
-
Referencias
Se puede utilizar con otras funciones. Para obtener más información, consulte Transform complex JSON data.
Logstore de salida
Envía un registro a un Logstore específico. Es posible configurar el tema, el origen y las etiquetas para el registro de salida.
-
Sintaxis
e_output(name=None, project=None, logstore=None, topic=None, source=None, tags=None, hash_key_field=None, hash_key=None) e_coutput(name=None, project=None, logstore=None, topic=None, source=None, tags=None, hash_key_field=None, hash_key=None)En el modo de vista previa, los registros no se envían al Logstore de destino. En su lugar, se envían al Logstore internal-etl-log, un Logstore dedicado que se crea automáticamente en el proyecto actual la primera vez que se obtiene una vista previa de un trabajo de transformación de datos. No es posible modificar la configuración de este Logstore ni escribir otros datos en él. Este Logstore es gratuito.
-
Parámetros
NotaSi configura los parámetros name, project y logstore en la función e_output o e_coutput, y también configura un proyecto de destino y un Logstore de destino en el panel Create Data Transformation Job, los parámetros de la función tienen prioridad. Los detalles son los siguientes:
Si solo configura el parámetro name en la función e_output o e_coutput, los resultados de la transformación se distribuyen y almacenan en el Logstore de destino correspondiente al nombre especificado.
-
Si solo configura los parámetros project y Logstore en la función e_output, los resultados de la transformación se distribuyen y almacenan en el Logstore de destino que especificó en la función e_output.
Si utiliza un par de AccessKey para la autorización, se utiliza el par de AccessKey de la cuenta con sesión iniciada actualmente durante el proceso de transformación.
-
Si configura los parámetros name, project y Logstore en la función e_output, los resultados de la transformación se distribuyen y almacenan en el Logstore de destino que especificó en la función e_output.
Si utiliza un par de AccessKey para la autorización, se utiliza el par de AccessKey especificado para el nombre de destino durante el proceso de transformación.
Nombre del parámetro
Tipo
Obligatorio
Descripción
name
String
No
Nombre del destino de almacenamiento. Valor predeterminado: None.
project
String
No
Proyecto de destino. Debe existir previamente.
Logstore
String
No
Logstore de destino. Debe existir previamente.
topic
String
No
Establece un nuevo tema para el registro.
source
String
No
Establece un nuevo origen para el registro.
tags
Dict
No
Establece nuevas etiquetas para el registro. Pase las etiquetas en formato de diccionario.
NotaNo es necesario agregar el prefijo
__tag__:a las palabras clave.hash_key_field
String
No
Nombre de un campo en el registro. El trabajo de transformación enruta el registro a un shard específico según el valor hash de este campo.
NotaSi el campo especificado no existe en el registro, el sistema recurre al modo de balanceo de carga y escribe el registro en un shard de forma aleatoria.
hash_key
String
No
Valor hash. El trabajo de transformación enruta el registro a un shard específico según este valor.
NotaEl parámetro hash_key_field tiene mayor prioridad que este parámetro. Si el parámetro hash_key_field ya está configurado en la sintaxis de transformación, este parámetro no surte efecto.
-
Establecer el destino de almacenamiento predeterminado
Cuando utilice la función e_output o e_coutput, debe configurar un destino de almacenamiento predeterminado en el panel Create Data Transformation Job. Simple Log Service utiliza el destino de almacenamiento etiquetado como 1 como predeterminado. Por ejemplo, el trabajo de transformación de datos envía los datos que cumplen los criterios de una función e_output a los Logstores de destino respectivos de target_01, target_02 y target_03. El trabajo envía todos los demás datos no descartados durante la transformación al Logstore de destino del destino de almacenamiento predeterminado (target0). En el área Storage destination, configure dos destinos de almacenamiento. Destino de almacenamiento 1: Establezca Target name en
target0, Target region en China (Hangzhou), Target Project enProject0, Destination Logstore enLogstore0y Authorization method en default role. Destino de almacenamiento 2: Establezca Target name entarget1, Target region en China (Hangzhou), Target Project enProject1, Destination Logstore enLogstore1y Authorization method en default role. -
Configuración avanzada de parámetros
Cuando utilice la función e_output o e_coutput y el proyecto o Logstore de destino no exista, vaya al panel Create Data Transformation Job. En la sección Advanced Parameter Settings, establezca key en config.sls_output.failure_strategy y value en {"drop_when_not_exists":"true"} para omitir el registro. El registro omitido se descarta y se notifica como un registro de nivel de advertencia. Si no configura Advanced Parameter Settings, el trabajo de transformación de datos espera a que se creen el proyecto y el Logstore de destino antes de ejecutarse.
AvisoCuando utilice Advanced Parameter Settings, los registros se descartarán si el proyecto o Logstore de destino no existe. Utilice esta función con precaución.
-
Resultados
e_output: Envía el registro al Logstore especificado. Las reglas de transformación posteriores no se ejecutan en este registro.
e_coutput: Envía el registro al Logstore especificado. Las reglas de transformación posteriores continúan ejecutándose en este registro.
-
Ejemplos
-
Ejemplo 1: Si el valor del campo k2 coincide con una expresión regular, envíe el registro a target2 y establezca topic en topic1.
-
Registro sin procesar
__topic__: k1: v1 k2: v2 x1: v3 x5: v4 -
Regla de transformación
Aquí se utiliza la función
e_drop()para descartar los datos filtrados por la funcióne_if(). Si no agrega esta función, los datos filtrados se entregan al destino de almacenamiento predeterminado.e_if(e_match("k2", r"\w+"), e_output(name="target2", source="source1", topic="topic1")) e_drop() -
Resultado
__topic__: topic1 k1: v1 k2: v2 x1: v3 x5: v4
-
-
Ejemplo 2: Calcular un hash según el valor del campo db_version en el registro. Enviar el registro a un shard específico del destino de almacenamiento según este valor hash.
-
Registros sin procesar
__topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 -
Regla de transformación
e_output(name="target1", hash_key_field="db_version") -
Resultado
# Assume the storage destination target1 has two shards. # The range of shard 0 is [00000000000000000000000000000000,80000000000000000000000000000000). # The range of shard 1 is [80000000000000000000000000000000,ffffffffffffffffffffffffffffffff). # The hash values for db_version values 5.6 and 5.7 are 0ebe1a34e990772a2bad83ce076e0766 and f1867131d82f2256b4521fe34aec2405, respectively. # shard 0: __topic__: db_name: db-01 db_version:5.6 # shard 1: __topic__: db_name: db-02 db_version:5.7
-
-
Ejemplo 3: Especificar directamente un valor hash para enviar el registro a un shard específico del destino de almacenamiento.
-
Registros sin procesar
__topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 -
Regla de transformación
e_output(name="target1", hash_key="00000000000000000000000000000000") -
Resultado
# Assume the storage destination has two shards. # The range of shard 0 is [00000000000000000000000000000000,80000000000000000000000000000000). # The range of shard 1 is [80000000000000000000000000000000,ffffffffffffffffffffffffffffffff). # shard 0: __topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 # shard 1: None
-
-
-
Referencias
Se puede utilizar con otras funciones. Para obtener más información, consulte Aggregate log data from different Logstores into one Logstore.
e_to_metric
Convierte un registro al formato de series de tiempo (Metricstore).
-
Sintaxis
e_to_metric(names=None, labels=None, time_field='__time__', time_precision='s', ignore_none_names=True, ignore_none_labels=True) -
Parámetros
Nombre del parámetro
Tipo
Obligatorio
Descripción
names
String, StringList o Tuple List
Sí
El nombre de la métrica para los datos de series de tiempo. Puede ser una cadena única, una lista de cadenas o una lista de tuplas. Su valor corresponde al nombre del campo del registro.
-
String: Convierte un campo del registro en un nombre de métrica para los datos de series de tiempo. Contiene una sola cadena, como rt. Se devuelve un registro de datos de series de tiempo que contiene
__name__:rt. -
StringList: Convierte campos del registro en nombres de métricas para los datos de series de tiempo. Contiene varias cadenas, como ["rt", "qps"]. Se devuelven dos registros de datos de series de tiempo que contienen
__name__:rty__name__:qps, respectivamente. -
Tuple List: Convierte varios campos del registro en nombres de métricas para los datos de series de tiempo y les cambia el nombre. Contiene varias tuplas, como [("rt","max_rt"),("qps", "total_qps")]. El primer elemento de la tupla es el campo original del registro y el segundo es el campo del nombre de la métrica para los datos de series de tiempo transformados. Se devuelven dos registros de datos de series de tiempo que contienen
__name__:max_rty__name__:total_qps, respectivamente.
labels
String, StringList o Tuple List
No
El campo de etiquetas para los datos de series de tiempo. Puede ser una cadena única, una lista de cadenas o una lista de tuplas. Su valor corresponde al nombre del campo del registro.
NotaEn las siguientes descripciones, host y app son nombres de campos del registro, mientras que hostvalue y appvalue son valores de dichos campos.
-
String: Convierte un campo del registro en etiquetas para los datos de series de tiempo. Contiene una sola cadena, como host. Se devuelve un registro de datos de series de tiempo que contiene
__label__:host#$#hostvalue. -
StringList: Convierte campos del registro en etiquetas para los datos de series de tiempo. Contiene varias cadenas, como ["host", "app"]. Se devuelven dos registros de datos de series de tiempo que contienen
__label__:host#$#hostvaluey__label__:app#$#appvalue, respectivamente. -
Tuple List: Convierte varios campos del registro en etiquetas para los datos de series de tiempo y les cambia el nombre. Contiene varias tuplas, como [("host","hostname"),("app", "appname")]. El primer elemento de la tupla es el campo original del registro y el segundo es el campo de etiquetas para los datos de series de tiempo transformados. Se devuelven dos registros de datos de series de tiempo que contienen
__label__:hostname#$#hostvaluey__label__:appname#$#appvalue, respectivamente.
time_field
String
No
El campo de tiempo para los datos de series de tiempo. De forma predeterminada, se utiliza el campo
__time__del registro.time_precision
Int
No
La unidad de tiempo del campo de marca de tiempo en los registros sin procesar. Valores válidos: segundos, milisegundos, microsegundos y nanosegundos. Valor predeterminado: segundos. Por ejemplo,
time_field="ms"especifica milisegundos como unidad de tiempo.ignore_none_names
Boolean
No
Indica si se debe omitir la conversión cuando el campo del registro especificado no existe.
-
True (predeterminado): Omite la conversión. Los datos no se convierten al formato de series de tiempo.
-
False: Reporta un error si el campo no existe.
ignore_none_labels
Boolean
No
Indica si se debe omitir la conversión de etiquetas cuando el campo del registro especificado no existe.
-
True (predeterminado): Omite la conversión. Los datos no se convierten al formato de series de tiempo.
-
False: Reporta un error si el campo no existe.
-
-
Respuesta
Devuelve datos de series de tiempo.
-
Ejemplos
-
Ejemplo 1: Convertir un registro que contiene el campo rt al formato de datos de series de tiempo.
-
Registro sin procesar
__time__: 1614739608 rt: 123 -
Regla de transformación
e_to_metric(names="rt") -
Resultado
__labels__: __name__:rt __time_nano__:1614739608000000000 __value__:123.0
-
-
Ejemplo 2: Convertir un registro que contiene el campo rt al formato de datos de series de tiempo y utilizar el campo host como una nueva etiqueta.
-
Registro sin procesar
__time__: 1614739608 rt: 123 host: myhost -
Regla de transformación
e_to_metric(names="rt", labels="host") -
Resultado
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608000000000 __value__:123.0
-
-
Ejemplo 3: Convertir un registro que contiene los campos rt y qps al formato de datos de series de tiempo y utilizar el campo host como una nueva etiqueta.
-
Registro sin procesar
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regla de transformación
e_to_metric(names=["rt","qps"], labels="host") -
Resultado
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:host#$#myhost __name__:qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Ejemplo 4: Convertir un registro que contiene los campos rt y qps al formato de datos de series de tiempo, reemplazar los nombres de los campos por max_rt y total_qps, y utilizar el campo host como una nueva etiqueta.
-
Registro sin procesar
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regla de transformación
e_to_metric(names=[("rt","max_rt"),("qps","total_qps")], labels="host") -
Resultado
__labels__:host#$#myhost __name__:max_rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:host#$#myhost __name__:total_qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Ejemplo 5: Convertir un registro que contiene los campos rt y qps al formato de datos de series de tiempo, reemplazar los nombres de los campos por max_rt y total_qps, y cambiar el nombre del campo host a hostname para usarlo como una nueva etiqueta.
-
Registro sin procesar
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regla de transformación
e_to_metric(names=[("rt","max_rt"),("qps","total_qps")], labels=[("host","hostname")]) -
Resultado
__labels__:hostname#$#myhost __name__:max_rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:hostname#$#myhost __name__:total_qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Ejemplo 6: Convertir un registro que contiene los campos remote_user1 y request_length al formato de datos de series de tiempo, reemplazar los nombres de los campos por remote_user2 y request_length1, y utilizar el campo status1 como una nueva etiqueta.
-
Registro sin procesar
__time__:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regla de transformación
# The remote_user1 and status1 fields do not exist, so they are ignored and not converted. e_to_metric( names=[("remote_user1", "remote_user2"), ("request_length", "request_length1")], labels="status1", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__: __name__:request_length1 __time_nano__:1652943594000000000 __value__:4264.0
-
-
Ejemplo 7: Convertir un registro que contiene el campo remote_user al formato de datos de series de tiempo, utilizar el campo status como una nueva etiqueta y especificar la unidad de tiempo de los datos del registro de origen como milisegundos.
-
Registro sin procesar
__time__:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regla de transformación
e_to_metric( names="remote_user", labels="status", time_precision="ms", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__:status#$#200 __name__:remote_user __time_nano__:1652943594000000 __value__:89.0
-
-
Ejemplo 8: Convertir un registro que contiene el campo remote_user al formato de datos de series de tiempo, utilizar el campo status como una nueva etiqueta, usar el campo time como campo de tiempo para los datos de series de tiempo y especificar la unidad de tiempo de los datos del registro de origen como nanosegundos.
-
Registro sin procesar
time:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regla de transformación
e_to_metric( names="remote_user", labels="status", time_field="time", time_precision="ns", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__:status#$#200 __name__:remote_user __time_nano__:1652943594 __value__:89.0
-
-
-
Referencias
Se puede utilizar con otras funciones. Para obtener más información, consulte Convert log fields in a Logstore to metric measures in a Metricstore.