Le langage DSL (Domain Specific Language) de Log Service (SLS) est basé sur Python et propose plus de 200 fonctions intégrées pour simplifier les tâches de transformation des données. Cette rubrique décrit les modes linguistiques, les catégories de fonctions et les principes d'exécution du DSL.
Modes linguistiques
Le DSL SLS est compatible avec Python. En mode standard, le DSL SLS constitue un sous-ensemble de Python. À l'exception des structures de données de base et des expressions, toutes les autres règles syntaxiques reposent sur des fonctions.
Catégorie | Syntaxe Python | Mode standard |
Structure de données | Nombre, chaîne et booléen | Pris en charge. Les chaînes qui commencent ou se terminent par |
Tuple, liste, ensemble et dictionnaire | Pris en charge. La structure | |
Objet | Seules les structures de données étendues intégrées, telles que les objets table et datetime, sont prises en charge. | |
Syntaxe de base | Opérateurs tels que le signe plus (+), le signe moins (-), le signe de multiplication (×) et l'opérateur de division (/) | Seuls les opérateurs de comparaison, tels que |
Commentaires | Pris en charge. | |
Affectation de variable | Non pris en charge. Transmettez la valeur via un appel de fonction. | |
Conditions préalables | Pris en charge. Fonctions : e_if, e_if_else et e_switch. | |
Boucles | Prises en charge indirectement. Utilisez des fonctions intégrées imbriquées pour implémenter des boucles. Les exemples de fonctions suivants montrent comment parcourir les éléments d'un tableau : | |
Fonction | Fonctions intégrées standard de Python | Non pris en charge. Utilisez plutôt les plus de 200 fonctions intégrées fournies par le DSL SLS. |
Appels de fonction | Pris en charge. Les appels de fonction utilisant le déballage de paramètres ne sont pas pris en charge. | |
Fonctions définies par l'utilisateur telles que def ou lambda | Non pris en charge. Toutefois, le système propose plus de 200 fonctions d'opération globale et d'expression que vous pouvez combiner librement. | |
Module | Importation et utilisation de la bibliothèque standard Python | Non pris en charge. |
Création de threads et de processus | Non pris en charge. | |
Importation de bibliothèques tierces | Non pris en charge. | |
Connexion au réseau externe ou appel de commande externe | Comprend des connecteurs de ressources intégrés. |
Catégories de fonctions
En mode standard, le DSL SLS effectue toutes les opérations en appelant des fonctions. Le DSL propose plus de 200 fonctions intégrées, réparties en fonctions de traitement global et fonctions d'expression.
-
Fonctions de traitement global
Les fonctions de traitement global servent à recevoir, traiter et renvoyer des journaux. Seules ces fonctions permettent de construire chaque étape d'une règle de transformation.
-
Fonctions d'expression
Ces fonctions polyvalentes acceptent des paramètres spécifiques. Leur invocation combinée et leur transmission en tant que paramètres à une fonction d'opération globale permettent de définir une logique plus flexible.
Le tableau suivant compare les capacités de ces deux types de fonctions.
|
Type de fonction |
Étapes globales |
Réception |
Renvoi |
Modification du journal |
Appels combinés |
|
Opérations et fonctions globales |
Pris en charge |
Réception automatique des journaux |
Zéro à plusieurs journaux |
Pris en charge dans la plupart des cas |
Pris en charge |
|
Fonctions d'expression |
Non pris en charge |
Seules quelques fonctions prennent en charge le traitement direct des journaux. |
Structures de données spécifiques |
Non pris en charge |
Pris en charge |
Fonctions de traitement global
Une fonction qui accepte et renvoie des journaux.
Seule une fonction de traitement global peut figurer sur la première ligne de chaque étape.
Une règle de transformation dans le DSL SLS utilise la syntaxe suivante :
GlobalFunction1(..parameters....)
GlobalFunction2(..parameters....)
GlobalFunction3(..parameters....)
GlobalFunction4(..parameters....)
Les fonctions de traitement global se divisent en deux catégories :
Classification fonctionnelle | Description | Exemple |
Fonctions de contrôle de flux | Ces fonctions gèrent le flux de processus, reçoivent des journaux et appellent conditionnellement d'autres fonctions pour traiter les journaux. |
|
Fonctions de traitement d'événements | Ces fonctions transforment les journaux et renvoient de zéro à plusieurs journaux. | Voici un exemple de fonction :
|
Logique de transformation :
-
Traitement de base
La fonctionnalité de transformation des données lit les données du Logstore source en continu. Elle transmet chaque journal sous forme de dictionnaire à la règle de transformation. Le système traite ensuite les données du journal séquentiellement selon les fonctions définies dans la règle. Enfin, le système envoie le résultat de la transformation vers le Logstore de destination.
RemarqueTous les champs et valeurs d'un journal sont envoyés sous forme de chaînes. Par exemple, le journal brut
{"__time__": "1234567", "__topic__": "", "k1": "test"}est traité par la fonctione_set("f1", 200). La fonction ajoute le champf1avec la valeur 200. Après traitement, le journal devient{"__time__": "1234567", "__topic__": "", "k1": "test", "f1": "200"}. Dans ce journal, le champf1et la valeur 200 sont tous deux des chaînes.Les fonctions de traitement d'événements spécifiées dans une règle de transformation sont appelées séquentiellement. Chaque fonction reçoit un journal, le traite, puis renvoie le journal traité.
Par exemple, la fonction
e_set("type", "test")ajoute le champtypeavec la valeur test à un journal. La fonction suivante reçoit et traite le journal modifié. -
Évaluation des conditions
-
e_if : La fonction e_if vous permet d'ajouter des expressions conditionnelles pour traiter les journaux. Si un journal ne remplit pas la condition spécifiée, l'opération correspondante est ignorée. La fonction e_if implémente la logique
if.Par exemple, la fonction
e_if(e_match("status", "200"), e_regex("data", "ret: \d+", "result"))vérifie si la valeur du champstatusest 200. Si c'est vrai, la fonction extrait le champresultdu champdataà l'aide de l'expression régulière spécifiée. Sinon, aucune opération n'est effectuée. e_if_else: Cette fonction fonctionne de manière similaire à l'opérationif_else.
-
-
Arrêt du traitement
-
Une étape d'une règle de transformation peut ne renvoyer aucun journal, ce qui indique que le journal a été supprimé.
Par exemple, la fonction
e_if(str_islower(v("result")), e_drop())vérifie si la valeur du champresultest une chaîne en minuscules. Si c'est vrai, le journal est ignoré et les étapes suivantes ne sont pas exécutées sur ce journal. Le système traite automatiquement le journal suivant. -
L'écriture d'un journal dans un Logstore de destination met fin au traitement. Par exemple, si la fonction
e_outputécrit un journal dans un Logstore de destination et le supprime, les étapes suivantes ne sont pas exécutées sur ce journal.RemarqueLa fonction
e_coutputcopie le journal de sortie et poursuit le traitement des étapes suivantes.
-
-
Fractionnement parallèle :
Une étape d'une règle de transformation peut renvoyer plusieurs journaux, ce qui indique que le journal a été fractionné.
Par exemple, la fonction
e_split(data)divise un journal en deux journaux en fonction de la valeur du champdata. Si la valeur du champdataest"abc, xyz", le journal est divisé en deux journaux. Dans l'un des journaux, la valeur du champdataest abc. Dans l'autre journal, la valeur est xyz.Les journaux générés après le fractionnement sont traités lors des étapes suivantes.
Pour plus d'informations, consultez Fonctions d'opération globale.
Fonctions d'expression
Outre les fonctions de traitement global, le DSL SLS propose 200 fonctions d'expression qui acceptent des paramètres spécifiques et renvoient des valeurs spécifiques. Appelez une fonction d'expression ou une combinaison de fonctions d'expression au sein d'une fonction de traitement global. La syntaxe est la suivante :
Global Processing Function 1(Expression Function 1(...), ...)
Global Processing Function 2(..., Expression Function 2(...), Expression Function 3(...), ...)
Les fonctions d'expression se divisent en quatre catégories :
|
Classification fonctionnelle |
Description |
Exemple |
|
Fonctions de vérification d'événements |
Ces fonctions reçoivent des journaux, extraient ou récupèrent des informations spécifiques et renvoient ces informations sans modifier les journaux. |
La fonction |
|
Fonctions de ressource |
Ces fonctions se connectent à des ressources locales ou externes, utilisent des paramètres spécifiques et renvoient des données telles que des dictionnaires ou des tables. |
Fonctions de ressource OSS, RDS et Logstore. |
|
Fonctions de contrôle |
Ces fonctions effectuent des opérations logiques sur des expressions. Elles utilisent des paramètres spécifiques, appliquent un contrôle conditionnel et appellent d'autres fonctions d'expression pour renvoyer des résultats. |
|
|
Autres fonctions d'expression |
Ces fonctions acceptent des valeurs fixes ou les résultats d'autres appels de fonction et renvoient des valeurs spécifiques. |
Fonctions de chaîne, de date et heure, et de conversion de type. |
Pour plus d'informations, consultez Fonctions d'expression.