Este tema describe la sintaxis básica del lenguaje específico de dominio (DSL) de Simple Log Service (SLS).
Comentarios
Para agregar un comentario que explique la sintaxis, inicie la línea con un signo de número (#). A continuación se muestra un ejemplo:
# Set the default topic for logs. This is a comment at the beginning of a line.
e_set("__topic__", "access_log") # Set the default topic for logs. This is a comment at the end of a line.
Saltos de línea
Si la lista de parámetros de una llamada a función es demasiado larga, puede agregar un salto de línea.
Si la estructura de la función contiene una coma (,), agregue el salto de línea directamente después de la coma.
Si una cadena es demasiado larga y requiere un salto de línea, utilice una barra diagonal inversa (\).
Ejemplo:
e_set("__topic__", "v1",
"type", "v2", # When parameters are separated by commas (,), you can add a line break directly.
"length", 100)
e_set("__topic__", "this is a very long long long .........." \
"......long text") # Use a backslash (\) to add a line break.
Métodos de invocación de funciones
-
Invocación básica
e_set("abc", "xyz")NotaCuando escriba una instrucción de transformación de datos, los tipos de datos y la cantidad de parámetros de entrada deben coincidir con la sintaxis de la función.
-
Invocación básica con parámetros variables
str_replace(value, old [,new [,count] ])NotaSi los parámetros de una función incluyen corchetes ([]), los parámetros dentro de ellos, como
newycount, son opcionales. No puede invocarlos como parámetros con nombre; debe invocarlos en la secuencia especificada.# Invalid examples str_replace("a-b-c", "-", new='%') str_replace("a-b-c", "-", new='%', count=1) # Valid examples str_replace("a-b-c", "-", '%') str_replace("a-b-c", "-", '%', 2) -
Invocación con parámetros con nombre
Un parámetro con un valor predeterminado es un parámetro con nombre. Por ejemplo,
modeene_set("abc", "xyz", mode="fill")es un parámetro con nombre.En algunas funciones, debe pasar valores para los parámetros con nombre bajo condiciones específicas. Para obtener más información, consulte la descripción de parámetros de cada función.
Para pasar un valor a un parámetro con nombre, utilice el formato:
mode=....Si hay varios parámetros con nombre, el orden en el que los especifique no importa. Por ejemplo,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")es lo mismo quee_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
NotaEn una llamada a función, los parámetros con nombre siempre deben especificarse después de los parámetros sin nombre.
-
Llamadas a funciones anidadas
Puede usar el valor devuelto por una función como parámetro en otra función. Asegúrese de que los tipos de datos sean consistentes. Por ejemplo:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz"))) -
Parámetros variables
Algunas funciones admiten parámetros variables.
v("f1", ....)indica que puede pasar más parámetros, comov("f1", "f2", "f3").Cuando pase parámetros con nombre, colóquelos al final. Por ejemplo,
v("f1", "f2", "f3", "f4", mode="fill").
Operadores
-
Operadores de comparación
El modo estándar del DSL de SLS admite operadores de comparación, entre ellos
>, <, >=, <=, !=, and ==. También puede usar las funciones de comparación que proporciona SLS para lograr el mismo efecto.-
Uso directo de los operadores de comparación
# The following examples show how to use comparison operators. If the comparison result is True, the log is dropped. e_if(3 > 2, DROP) # If 3 is greater than 2, the log is dropped. e_if(3 < 2, DROP) # If 3 is less than 2, the log is dropped. e_if(3 >= 2, DROP) # If 3 is greater than or equal to 2, the log is dropped. e_if(3 <= 2, DROP) # If 3 is less than or equal to 2, the log is dropped. e_if(3 == 2, DROP) # If 3 is equal to 2, the log is dropped. e_if(3 != 2, DROP) # If 3 is not equal to 2, the log is dropped. e_if(1 < 2 < 3, DROP) # If 2 is greater than 1 and less than 3, the log is dropped. e_if(0 < ct_int(v('x')) < 100, DROP) # If the value of the x field is greater than 0 and less than 100, the log is dropped. -
Uso de las funciones de comparación proporcionadas por SLS
Operación
Función
Ejemplo
Igual a
==op_eq
op_eq(v("name"), "xiao ming")Distinto de
!=op_ne
op_ne(v("name"), "xiao ming")Mayor que
>op_gt
op_gt(ct_int(v("age")))Mayor o igual que
>=op_ge
op_ge(ct_int(v("age")), 18)Menor que
<op_lt
op_lt(ct_int(v("age")), 18)Menor o igual que
<=op_le
op_le(ct_int(v("age")), 18)
-
-
Operadores lógicos
El modo estándar del DSL de SLS admite los operadores lógicos and, or y not. También puede usar las funciones lógicas que proporciona SLS para lograr el mismo efecto.
-
Uso directo de los operadores lógicos
# The following examples show how to use logical operators. If the result of the logical operation is True, the log is dropped. e_if(True and False, DROP) # The result is False. e_if(True or False, DROP) # The result is True. e_if(True and not False, DROP) # The result is True. e_if(3 > 2 and 1 < 3, DROP) # The result is True. e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # The value of the x field is greater than 100 or the value of the y field is less than 100. -
Uso de las funciones lógicas proporcionadas por SLS
Operación
Función
Ejemplo
AND lógico
andop_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))OR lógico
orop_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))NOT lógico
notop_not
op_not(op_gt(v("age"), 18))
-
-
Otros operadores
Los siguientes operadores no se admiten de forma directa en el modo estándar del DSL de SLS. SLS proporciona funciones correspondientes para lograr los mismos efectos.
Operaciones según escenario
Función
Ejemplo
Suma
+op_add
op_add(v("age"), 2)Resta
-op_sub
op_sub(v("age"), 2)Multiplicación
*op_mul
op_mul(v("size"), 2)Exponenciación
**op_pow
op_pow(v("size"), 2)División entera
//op_div_floor
op_div_floor(v("bytes"), 1024)Operación de módulo
%op_mod
op_mod(v("age"), 10)Negación
-op_neg
op_neg(v("profit"))Comprobación de existencia
inop_in
op_in(["pass", "ok"], v("result"))Comprobación de inexistencia
not inop_not_in
op_not_in(["pass", "ok"], v("result"))Segmentación de cadenas
[ ...]op_slice
op_slice(v("message"), 0, 20)Por ejemplo, para establecer el valor del campo
aen 3600*6:# * e_set("a", 3600 * 6) # Invalid e_set("a", op_mul(3600, 6)) # Valid # / e_set("bytes_kb", v("bytes") / 1024) # Invalid e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) # Valid
Evaluación de verdadero y falso
Algunas funciones aceptan una condición y determinan la lógica posterior según el valor de dicha condición. La condición puede ser un campo estático o el valor devuelto por una expresión.
El DSL de SLS admite la evaluación de cualquier tipo de dato. En la siguiente tabla se describen las condiciones de valores verdaderos y falsos para los distintos tipos de datos.
|
Tipo de dato |
Condición para verdadero |
Condición para falso |
|
Booleano |
True, true |
False, false |
|
Ninguna |
None |
Siempre falso |
|
Numérico |
Distinto de 0 o 0.0 |
0 o 0.0 |
|
Cadena |
No vacía |
Cadena vacía |
|
Bytes |
No vacío |
Bytes vacíos |
|
Tupla |
No vacía |
Tupla vacía |
|
Lista |
No vacía |
Lista vacía |
|
Diccionario |
No vacío |
Diccionario vacío |
|
Tabla |
Verdadero si existe |
Objeto nulo (None) |
|
Fecha y hora |
Verdadero si existe |
Objeto nulo (None) |
A continuación se muestra un ejemplo de un evento descartado:
e_if(True, DROP) # If the input is True, the event is dropped.
e_if(1, DROP) # If the input is 1, the event is dropped.
e_if(v("abc"), DROP) # If the abc field exists and is not empty, the event is dropped.
e_if(str_isdigit(v("abc")), DROP) # If the abc field exists and its content consists only of digits, the event is dropped.