Cette rubrique décrit la syntaxe de base du langage DSL (Domain-Specific Language) de Log Service (SLS).
Commentaires
Pour ajouter un commentaire expliquant la syntaxe, commencez la ligne par un dièse (#). L'exemple de code suivant illustre cette pratique :
# 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.
Sauts de ligne
Si la liste des paramètres d'un appel de fonction est trop longue, insérez un saut de ligne.
Si la structure de la fonction contient une virgule (,), ajoutez directement le saut de ligne après celle-ci.
Si une chaîne de caractères est trop longue et nécessite un saut de ligne, utilisez une barre oblique inverse (\).
Exemple :
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éthodes d'appel de fonctions
-
Appel de base
e_set("abc", "xyz")RemarqueLorsque vous rédigez une instruction de transformation de données, les types de données et le nombre de paramètres d'entrée doivent correspondre à la syntaxe de la fonction.
-
Appel avec paramètres variables de base
str_replace(value, old [,new [,count] ])RemarqueSi les paramètres d'une fonction incluent des crochets ([]), les paramètres situés entre ces crochets, tels que
newetcount, sont facultatifs. Vous ne pouvez pas les appeler en tant que paramètres nommés et devez respecter l'ordre spécifié.# 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) -
Appel avec paramètres nommés
Un paramètre doté d'une valeur par défaut est un paramètre nommé. Par exemple,
modedanse_set("abc", "xyz", mode="fill")est un paramètre nommé.Pour certaines fonctions, vous devez transmettre des valeurs aux paramètres nommés dans des conditions spécifiques. Pour plus d'informations, consultez la description des paramètres de chaque fonction.
Pour transmettre une valeur à un paramètre nommé, utilisez le format suivant :
mode=....En présence de plusieurs paramètres nommés, l'ordre dans lequel vous les spécifiez n'a pas d'importance. Par exemple,
e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")équivaut àe_csv("data", ["f1", "f2", "f3"], quote="|", sep='#').
RemarqueDans un appel de fonction, les paramètres nommés doivent toujours être spécifiés après les paramètres non nommés.
-
Appels de fonctions imbriqués
Utilisez la valeur de retour d'une fonction comme paramètre dans une autre fonction. Assurez-vous que les types de données sont cohérents. Exemple :
e_set("abc", v("xyz")) e_set("abc", str_lower(v("xyz"))) -
Paramètres variables
Certaines fonctions prennent en charge les paramètres variables.
v("f1", ....)indique que vous pouvez transmettre davantage de paramètres, tels quev("f1", "f2", "f3").Lorsque vous transmettez des paramètres nommés, placez-les à la fin. Par exemple :
v("f1", "f2", "f3", "f4", mode="fill").
Opérateurs
-
Opérateurs de comparaison
Le mode standard du DSL SLS prend en charge les opérateurs de comparaison, notamment
>, <, >=, <=, !=, and ==. Vous pouvez également utiliser les fonctions de comparaison fournies par SLS pour obtenir le même effet.-
Utilisation directe des opérateurs de comparaison
# 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. -
Utilisation des fonctions de comparaison fournies par SLS
Opération
Fonction
Exemple
Égal à
==op_eq
op_eq(v("name"), "xiao ming")Différent de
!=op_ne
op_ne(v("name"), "xiao ming")Supérieur à
>op_gt
op_gt(ct_int(v("age")))Supérieur ou égal à
>=op_ge
op_ge(ct_int(v("age")), 18)Inférieur à
<op_lt
op_lt(ct_int(v("age")), 18)Inférieur ou égal à
<=op_le
op_le(ct_int(v("age")), 18)
-
-
Opérateurs logiques
Le mode standard du DSL SLS prend en charge les opérateurs logiques, notamment AND, OR et NOT. Vous pouvez également utiliser les fonctions logiques fournies par SLS pour obtenir le même effet.
-
Utilisation directe des opérateurs logiques
# 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. -
Utilisation des fonctions logiques fournies par SLS
Opération
Fonction
Exemple
ET logique
andop_and
op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))OU logique
orop_or
op_or(op_le(v("age"), 18), op_gt(v("age"), 65))NON logique
notop_not
op_not(op_gt(v("age"), 18))
-
-
Autres opérateurs
Les opérateurs suivants ne sont pas directement pris en charge dans le mode standard du DSL SLS. SLS fournit des fonctions correspondantes pour obtenir les mêmes effets.
Opérations contextuelles
Fonction
Exemple
Addition
+op_add
op_add(v("age"), 2)Soustraction
-op_sub
op_sub(v("age"), 2)Multiplication
*op_mul
op_mul(v("size"), 2)Exponentiation
**op_pow
op_pow(v("size"), 2)Division entière
//op_div_floor
op_div_floor(v("bytes"), 1024)Modulo
%op_mod
op_mod(v("age"), 10)Négation
-op_neg
op_neg(v("profit"))Vérification d'existence
inop_in
op_in(["pass", "ok"], v("result"))Vérification de non-existence
not inop_not_in
op_not_in(["pass", "ok"], v("result"))Découpage de chaîne
[ ...]op_slice
op_slice(v("message"), 0, 20)Par exemple, pour définir la valeur du champ
asur 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
Évaluation des valeurs vraies et fausses
Certaines fonctions acceptent une condition et déterminent la logique suivante en fonction de la valeur de cette condition. La condition peut être un champ statique ou la valeur de retour d'une expression.
Le DSL SLS prend en charge l'évaluation de tout type de données. Le tableau suivant décrit les conditions pour les valeurs vraies et fausses selon les différents types de données.
|
Type de données |
Condition pour Vrai |
Condition pour Faux |
|
Booléen |
True, true |
False, false |
|
None |
None |
Toujours faux |
|
Numérique |
Différent de 0 ou 0,0 |
0 ou 0,0 |
|
Chaîne |
Non vide |
Chaîne vide |
|
Octets |
Non vide |
Octets vides |
|
Tuple |
Non vide |
Tuple vide |
|
Liste |
Non vide |
Liste vide |
|
Dictionnaire |
Non vide |
Dictionnaire vide |
|
Table |
Vrai s'il existe |
Objet nul (None) |
|
Datetime |
Vrai s'il existe |
Objet nul (None) |
Voici un exemple d'événement supprimé :
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.