Este tópico descreve a sintaxe básica da Domain-Specific Language (DSL) do Simple Log Service (SLS).
Comentários
Para adicionar um comentário explicativo à sintaxe, inicie a linha com o caractere cerquilha (#). Exemplo:
# 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.
Quebras de linha
Se a lista de parâmetros de uma chamada de função for muito extensa, adicione uma quebra de linha.
Se a estrutura da função contiver uma vírgula (,), insira a quebra de linha logo após a vírgula.
Se uma string for longa e exigir uma quebra de linha, use uma barra invertida (\).
Exemplo:
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 invocação de funções
-
Invocação básica
e_set("abc", "xyz")NotaAo escrever uma instrução de transformação de dados, garanta que os tipos de dados e a quantidade de parâmetros de entrada correspondam à sintaxe da função.
-
Invocação básica com parâmetros variáveis
str_replace(value, old [,new [,count] ])NotaSe os parâmetros de uma função incluírem colchetes ([]), os parâmetros internos, como
newecount, são opcionais. Não é possível chamá-los como parâmetros nomeados; informe-os na sequência 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) -
Invocação com parâmetros nomeados
Um parâmetro com valor padrão é considerado um parâmetro nomeado. Por exemplo,
modeeme_set("abc", "xyz", mode="fill")é um parâmetro nomeado.Em certas funções, é obrigatório passar valores para parâmetros nomeados sob condições específicas. Para mais detalhes, consulte a descrição dos parâmetros de cada função.
Para atribuir um valor a um parâmetro nomeado, use o formato:
mode=....A ordem de especificação não importa quando há múltiplos parâmetros nomeados. Assim,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")equivale ae_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
NotaEm uma chamada de função, especifique os parâmetros nomeados sempre após os parâmetros não nomeados.
-
Invocações de funções aninhadas
Use o valor de retorno de uma função como parâmetro para outra. Certifique-se de que os tipos de dados sejam compatíveis. Exemplo:
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz"))) -
Parâmetros variáveis
Algumas funções aceitam parâmetros variáveis. A notação
v("f1", ....)indica a possibilidade de passar parâmetros adicionais, como emv("f1", "f2", "f3").Posicione os parâmetros nomeados ao final da lista de argumentos. Por exemplo:
v("f1", "f2", "f3", "f4", mode="fill").
Operadores
-
Operadores de comparação
O modo padrão da DSL do SLS oferece suporte a operadores de comparação, incluindo
>, <, >=, <=, !=, and ==. Alternativamente, use as funções de comparação do SLS para obter o mesmo resultado.-
Uso direto de operadores de comparação
# 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 das funções de comparação do SLS
Operação
Função
Exemplo
Igual a
==op_eq
op_eq(v("name"), "xiao ming")Diferente de
!=op_ne
op_ne(v("name"), "xiao ming")Maior que
>op_gt
op_gt(ct_int(v("age")))Maior ou igual a
>=op_ge
op_ge(ct_int(v("age")), 18)Menor que
<op_lt
op_lt(ct_int(v("age")), 18)Menor ou igual a
<=op_le
op_le(ct_int(v("age")), 18)
-
-
Operadores lógicos
O modo padrão da DSL do SLS suporta operadores lógicos, incluindo and, or e not. Você também pode usar as funções lógicas do SLS para obter o mesmo efeito.
-
Aplicação direta de 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 das funções lógicas do SLS
Operação
Função
Exemplo
E lógico
andop_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))OU lógico
orop_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))NÃO lógico
notop_not
op_not(op_gt(v("age"), 18))
-
-
Outros operadores
Os operadores listados abaixo não têm suporte direto no modo padrão da DSL do SLS. Para executar essas operações, use as funções correspondentes do SLS.
Operações baseadas em cenários
Função
Exemplo
Adição
+op_add
op_add(v("age"), 2)Subtração
-op_sub
op_sub(v("age"), 2)Multiplicação
*op_mul
op_mul(v("size"), 2)Exponenciação
**op_pow
op_pow(v("size"), 2)Divisão inteira
//op_div_floor
op_div_floor(v("bytes"), 1024)Operação de módulo
%op_mod
op_mod(v("age"), 10)Negação
-op_neg
op_neg(v("profit"))Verificação de existência
inop_in
op_in(["pass", "ok"], v("result"))Verificação de não existência
not inop_not_in
op_not_in(["pass", "ok"], v("result"))Fatiamento de string
[ ...]op_slice
op_slice(v("message"), 0, 20)Por exemplo, para definir o valor do campo
acomo 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
Avaliação de verdadeiro e falso
Certas funções aceitam uma condição e determinam a lógica subsequente com base no valor dessa condição. A condição pode ser um campo estático ou o valor de retorno de uma expressão.
A DSL do SLS permite avaliar qualquer tipo de dado. A tabela a seguir descreve as condições que resultam em valores verdadeiros ou falsos para diferentes tipos de dados.
|
Tipo de dado |
Condição para Verdadeiro |
Condição para Falso |
|
Booleano |
True, true |
False, false |
|
None |
None |
Sempre False |
|
Numérico |
Diferente de 0 ou 0,0 |
0 ou 0,0 |
|
String |
Não vazia |
String vazia |
|
Bytes |
Não vazio |
Bytes vazios |
|
Tupla |
Não vazia |
Tupla vazia |
|
Lista |
Não vazia |
Lista vazia |
|
Dicionário |
Não vazio |
Dicionário vazio |
|
Tabela |
Verdadeiro se existir |
Objeto nulo (None) |
|
Datetime |
Verdadeiro se existir |
Objeto nulo (None) |
Veja abaixo um exemplo de 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.