Tous les produits
Search
Centre de documentation

Simple Log Service:Nettoyer les données en appelant des fonctions

Dernière mise à jour :Sep 22, 2026

Utilisez les fonctions de transformation de données de Simple Log Service (SLS) pour nettoyer de grands volumes de journaux collectés et normaliser leur format. Cette rubrique décrit les cas d'utilisation courants et les opérations associées au nettoyage des données par appel de fonctions.

Cas d'utilisation 1 : Filtrer les journaux (fonctions e_keep et e_drop)

Utilisez la fonction e_drop ou e_keep pour filtrer les journaux. Vous pouvez également utiliser la fonction e_if ou e_if_else avec le paramètre DROP pour filtrer les journaux.

Voici les règles courantes :

  • e_keep(e_search(...)) : conserve le journal si la condition est remplie ; le supprime sinon.

  • e_drop(e_search(...)) : supprime le journal si la condition est remplie ; le conserve sinon.

  • e_if_else(e_search("..."), KEEP, DROP) : conserve le journal si la condition est remplie ; le supprime sinon.

  • e_if(e_search("not ..."), DROP) : supprime le journal si la condition est remplie ; le conserve sinon.

  • e_if(e_search("..."), KEEP) : règle de transformation inutile.

Exemple :

  • Journaux bruts

    #Log 1
    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>
    
    #Log 2
    __source__:  192.168.0.1
    class:  produce_case
    id:  7990
    test_string:  <function test1 at 0x1020401e0>
  • Règle de transformation

    Supprimez les journaux ne contenant pas le champ __topic__ ni le champ __tag__:__receive_time__.

    e_if(e_not_has("__topic__"),e_drop())
    e_if(e_not_has("__tag__:__receive_time__"),e_drop())
  • Résultat de la transformation

    __source__:  192.168.0.1
    __tag__:__client_ip__:  192.168.0.2
    __tag__:__receive_time__:  1597214851
    __topic__: app 
    class:  test_case
    id:  7992
    test_string:  <function test1 at 0x1027401e0>

Cas d'utilisation 2 : Attribuer des valeurs aux champs de journal vides (fonction e_set)

Utilisez la fonction e_set pour attribuer des valeurs aux champs de journal vides.

  • Attribuez une valeur à un champ si le champ d'origine n'existe pas ou est vide.

    e_set("result", "......value......", mode="fill")

    Pour plus d'informations sur les valeurs du paramètre mode, consultez la section Modes de vérification et d'écrasement de l'extraction de champ.

    Exemple :

    • Journal brut

      name:
    • Règle de transformation

      e_set("name", "aspara2.0", mode="fill")
    • Résultat de la transformation

      name:  aspara2.0
  • Utilisez la fonction GROK pour simplifier les expressions régulières et extraire le contenu des champs.

    Exemple :

    • Journal brut

      content: "ip address: 192.168.1.1"
    • Règle de transformation

      Utilisez la fonction GROK pour extraire l'adresse IP du champ content.

      e_regex("content", grok(r"(%{IP})"),"addr")
    • Résultat de la transformation

      addr:  192.168.1.1
      content: "ip address: 192.168.1.1"
  • Attribuez des valeurs à plusieurs champs.

    e_set("k1", "v1", "k2", "v2", "k3", "v3", ......)

    Exemple :

    • Journal brut

      __source__:  192.168.0.1
      __topic__:
      __tag__:
      __receive_time__:
      id:  7990
      test_string:  <function test1 at 0x1020401e0>
    • Règle de transformation

      Attribuez des valeurs aux champs __topic__, __tag__ et __receive_time__.

      e_set("__topic__","app", "__tag__","stu","__receive_time__","1597214851")
    • Résultat de la transformation

      __source__:  192.168.0.1
      __topic__:  app
      __tag__:  stu
      __receive_time__:  1597214851
      id:  7990
      test_string:  <function test1 at 0x1020401e0>

Cas d'utilisation 3 : Supprimer et renommer des champs de manière conditionnelle (fonctions e_search, e_rename et e_compose)

Dans la plupart des cas, utilisez la fonction e_compose pour les opérations conditionnelles répétées.

Exemple :

  • Journal brut

    content: 123
    age: 23
    name: twiss
  • Règle de transformation

    Vérifiez d'abord si la valeur du champ content est 123. Si c'est le cas, supprimez les champs age et name. Ensuite, renommez le champ content en ctx.

    e_if(e_search("content==123"),e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")))
  • Résultat de la transformation

    ctx: 123

Cas d'utilisation 4 : Convertir les types de paramètres de journal (fonctions v, ct_int et dt_totimestamp)

Lors de la transformation des données, les champs de journal et leurs valeurs sont toujours des chaînes de caractères. Les données non textuelles sont automatiquement converties en type chaîne. Par conséquent, lorsque vous appelez une fonction, veillez aux types de paramètres qu'elle accepte. Pour plus d'informations, consultez la section Aperçu de la syntaxe.

  • Appelez la fonction op_add pour concaténer des chaînes et additionner des nombres.

    La fonction op_add accepte à la fois les types chaîne et numérique. Il n'est donc pas nécessaire de convertir les types de paramètres.

    Exemple :

    • Journal brut

      a : 1
      b : 2
    • Règle de transformation

      e_set("d",op_add(v("a"), v("b")))
      e_set("e",op_add(ct_int(v("a")), ct_int(v("b"))))
    • Résultat de la transformation

      a:1
      b:2
      d:12
      e:3
  • Utilisez les fonctions d'opération sur les champs et la fonction ct_int pour la conversion de type, puis appelez la fonction Fonctions arithmétiques pour multiplier des nombres.

    Exemple :

    • Journal brut

      a:2
      b:5
    • Règle de transformation

      Les valeurs v("a") et v("b") sont toutes deux des chaînes de caractères. Le deuxième paramètre de la fonction op_mul n'accepte que les types numériques. Vous devez donc utiliser la fonction ct_int pour convertir les chaînes en entiers avant de les transmettre à la fonction op_mul.

      e_set("c",op_mul(ct_int(v("a")), ct_int(v("b"))))
      e_set("d",op_mul(v("a"), ct_int(v("b"))))
    • Résultat de la transformation

      a: 2
      b: 5
      c: 10
      d: 22222
  • Appelez la fonction dt_parse et la fonction dt_parsetimestamp pour convertir une chaîne ou un objet datetime en un format d'heure standard.

    La fonction dt_totimestamp accepte un objet datetime, et non une chaîne. Vous devez donc appeler la fonction dt_parse pour convertir la valeur de chaîne de time1 en un objet datetime. Vous pouvez également utiliser directement la fonction dt_parsetimestamp, qui accepte à la fois les objets datetime et les chaînes. Pour plus d'informations, consultez la section Fonctions de date et d'heure.

    Exemple :

    • Journal brut

      time1: 2020-09-17 9:00:00
    • Règle de transformation

      Convertissez la date et l'heure représentées par time1 en horodatage UNIX.

      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1")))) or e_set("time2", dt_parsetimestamp(v("time1"))) 
    • Résultat de la transformation

      time1:  2019-06-03 2:41:26 
      time2:  1559529686 

Cas d'utilisation 5 : Remplir les champs de journal inexistants avec des valeurs par défaut (passer le paramètre default)

Certaines fonctions d'expression SLS DSL ont des exigences spécifiques concernant les paramètres d'entrée. Si ces exigences ne sont pas respectées, la fenêtre de transformation des données signale une erreur ou renvoie une valeur par défaut. Si un journal contient un champ requis mais incomplet, spécifiez une valeur par défaut dans la fonction op_len.

Important

Le passage d'une valeur par défaut à une fonction ultérieure peut provoquer une autre erreur. Gérez rapidement les exceptions renvoyées par la fonction.

  • Journal brut

    data_len: 1024
  • Règle de transformation

    e_set("data_len", op_len(v("data", default="")))
  • Résultat de la transformation

    data: 0
    data_len: 0

Cas d'utilisation 6 : Vérifier les journaux et ajouter des champs de manière conditionnelle (fonctions e_if et e_switch)

Utilisez la fonction e_if ou la fonction e_switch pour vérifier les journaux. Pour plus d'informations, consultez la section Fonctions de contrôle de flux.

  • Fonction e_if

    e_if(condition1, operation1, condition2, operation2, condition3, operation3, ....)
  • Fonction e_switch

    La fonction e_switch combine des paires condition-opération. Elle vérifie les conditions séquentiellement. Si une condition est remplie, l'opération correspondante est effectuée et le résultat est renvoyé immédiatement. Si une condition n'est pas remplie, la fonction vérifie la condition suivante. Si aucune condition n'est remplie et que le paramètre default est configuré, l'opération configurée pour default est exécutée et son résultat est renvoyé.

    e_switch(condition1, operation1, condition2, operation2, condition3, operation3, ...., default=None)

Exemple :

  • Journal brut

    status1: 200
    status2: 404
  • Fonction e_if

    • Règle de transformation

      e_if(e_match("status1", "200"), e_set("status1_info", "normal"),
           e_match("status2", "404"), e_set("status2_info", "error"))
    • Résultat de la transformation

      status1: 200
      status2: 404
      status1_info: normal
      status2_info: error
  • Fonction e_switch

    • Règle de transformation

      e_switch(e_match("status1", "200"), e_set("status1_info", "normal"), 
               e_match("status2", "404"), e_set("status2_info", "error"))
    • Résultat de la transformation

      Si une condition est remplie, le résultat est renvoyé et aucune autre condition n'est vérifiée.

      status1: 200
      status2: 404
      status1_info: normal

Cas d'utilisation 7 : Convertir les données en horodatage UNIX au niveau de la nanoseconde

Dans certains cas d'utilisation, la transformation des données dans SLS doit prendre en charge la précision de l'horodatage au niveau de la nanoseconde. Si un journal brut contient un champ au format d'horodatage UNIX, utilisez les fonctions d'opération sur les champs pour l'analyser en une heure de journal avec une précision nanoseconde.

  • Journal brut

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time_nano":"1705043680630940602"
    }
  • Règle de transformation

    e_set(
        "__time__", op_div_floor(ct_int(v("log_time_nano")), 1000000000),
    )
    e_set(
        "__time_ns_part__", op_mod(ct_int(v("log_time_nano")), 1000000000),
    )
  • Résultat de la transformation

    {
      "__source__": "1.2.3.4",
      "__time__": 1705043680,
      "__time_ns_part__": 630940602,
      "__topic__": "test",
      "log_time_nano":"1705043680630940602"
    }

Cas d'utilisation 8 : Convertir les données en horodatage ISO 8601 standard au niveau de la microseconde

Dans certains cas d'utilisation, la transformation des données dans SLS doit prendre en charge les horodatages de haute précision. Si un journal brut contient un champ au format d'heure ISO 8601 standard, utilisez les fonctions d'opération sur les champs pour l'analyser en une heure de journal avec une précision microseconde.

  • Journal brut

    {
      "__source__": "1.2.3.4",
      "__time__": 1704983810,
      "__topic__": "test",
      "log_time":"2024-01-11 23:10:43.992847200"
    }
  • Règle de transformation

    e_set(
        "__time__", dt_parsetimestamp(v("log_time"), tz="Asia/Shanghai"), mode="overwrite",
    )
    e_set("tmp_ms", dt_prop(v("log_time"), "microsecond"))
    e_set(
        "__time_ns_part__", op_mul(ct_int(v("tmp_ms")), 1000),
    )
  • Résultat de la transformation

    {
      "__source__": "1.2.3.4",
      "__time__": 1704985843,
      "__time_ns_part__": 992847000,
      "__topic__": "test",
      "log_time": "2024-01-11 23:10:43.992847200",
      "tmp_ms": "992847"
    }