Utilisez le langage SPL (SLS Processing Language) pour extraire des données structurées, traiter les champs et filtrer les journaux. Simple Log Service prend en charge la mise en cascade de pipelines à plusieurs niveaux afin d'enchaîner les opérations SPL et d'exporter les résultats traités.
Modes d'exécution du langage SPL
Le langage SPL s'exécute en mode index lorsque tous les champs interrogés sont indexés avec l'analyse activée. Dans le cas contraire, il bascule automatiquement en mode analyse. syntaxe des requêtes en mode analyse.
Syntaxe de base
Les requêtes basées sur l'analyse prennent en charge syntaxe SPL. Le langage SPL extrait les informations structurées, manipule les champs et filtre les données brutes. La mise en cascade de pipelines à plusieurs niveaux est prise en charge : le premier niveau correspond au filtre d'index, suivi des instructions SPL dans les niveaux suivants.
Index-based search statement | <spl-cmd> ... | <spl-cmd> ...
Exemple de journal
Champs bruts : identifiés par [R], applicables à la recherche en mode analyse.
Champs indexés : identifiés par [I], applicables à la recherche en mode index.
[I] __topic__: nginx-access-log
[I] Status: 200
[I] Host: api.abc.com
[R] Method: PUT
[R] ClientIp: 192.168.1.1
[R] Payload: {"Item": "1122", "UserId": "112233", "Operation": "AddCart"}
[R] BeginTime: 1705029260
[R] EndTime: 1705028561
[R] RT: 87
[R] Uri: /request/path-3/file-1
[R] UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
Exemples
Dans les instructions SPL, les chaînes constantes sont entourées de guillemets simples ('), par exemple
* | where ClientIp = '192.168.1.1'.Si un nom de champ contient des caractères spéciaux, entourez-le de guillemets doubles ("), par exemple
* | project-away "user-agent".
Filtrer selon différentes conditions
-
Comparaison d'égalité
Status: 200 | where ClientIp = '192.168.1.1' -
Recherche insensible à la casse
__topic__: nginx-access-log | where lower(Method) != 'put' -
Correspondance floue
Status: 200 | where UserAgent like '%Macintosh%' -
Comparaison numérique
Les champs sont par défaut de type varchar. Convertissez-les en bigint pour effectuer des comparaisons numériques.
Status: 200 | where cast(RT as bigint) > 50 -
Correspondance par expression régulière
# Find URIs that contain "path-number" Status: 200 | where regexp_like(Uri, 'path-\d+')
Calculer de nouveaux champs
Calculez de nouveaux champs à partir de champs existants en utilisant l'instruction extend.
-
Extraire des champs à l'aide d'expressions régulières
# Extract the file number from the Uri field * not Status: 200 | extend fileNumber=regexp_extract(Uri, 'file-(\d+)', 1) -
Extraire des champs depuis un format JSON
Status:200 | extend Item = json_extract_scalar(Payload, '$.Item') -
Extraire des champs en fonction d'un séparateur
Status:200 | extend urlParam=split_part(Uri, '/', 3) -
Calculer de nouveaux champs à partir de plusieurs valeurs de champ
# Calculate the time difference based on BeginTime and EndTime Status:200 | extend timeRange = cast(BeginTime as bigint) - cast(EndTime as bigint)
Conserver, supprimer et renommer des champs
-
Conserver uniquement des champs spécifiques et supprimer les autres
Status:200 | project Status, Uri -
Supprimer des champs spécifiques et conserver les autres
Status:200 | project-away UserAgent -
Renommer des champs
Status:200 | project-rename Latency=RT
Développer des données non structurées
-
Développer tous les champs d'un objet JSON
# Filter non-empty Payloads and expand all JSON fields __topic__: nginx-access-log | where Payload is not null | parse-json Payload -
Développer les champs JSON et ignorer les champs d'origine
status:200 | parse-json body | project-away body -
Extraire plusieurs champs à l'aide d'expressions régulières
Status:200 | parse-regexp Uri, 'path-(\d+)/file-(\d+)' as pathIndex, fileIndex
Mise en cascade de pipeline à plusieurs niveaux
Combinez les opérations ci-dessus dans une seule instruction en utilisant la mise en cascade de pipeline à plusieurs niveaux, qui s'exécute séquentiellement.
Status:200
| where Payload is not null
| parse-json Payload
| project-away Payload
| where Host='api.qzzw.com' and cast(RT as bigint) > 80
| extend timeRange=cast(BeginTime as bigint) - cast(EndTime as bigint)
| where timeRange > 500
| project UserId, Uri
Mode index contre mode analyse
Le langage SPL sélectionne automatiquement le mode d'exécution en fonction de l'indexation des champs interrogés avec l'analyse activée.
|
Élément |
SPL en mode index |
SPL en mode analyse |
|
La configuration de l'index est-elle requise ? |
Oui. Tous les champs interrogés doivent disposer d'index de champ avec l'analyse activée. |
Non requise. Important
L'instruction de requête précédant le premier tube (|) nécessite toujours un index. |
|
Performances |
Élevées |
Modérées |
|
La pagination aléatoire est-elle possible ? |
Prise en charge. |
Non prise en charge. |
|
Histogramme des journaux |
Basé sur les résultats de la requête. |
Basé sur les résultats de la requête et la progression de l'analyse. |
|
Opérateurs et fonctions |
Instructions et fonctions SPL et Fonctions SQL prises en charge par SPL. |
Instructions et fonctions SPL et Fonctions SQL prises en charge par SPL. |
|
Types de champ |
Tous les champs sont traités comme du texte. Conversion de type de données. |
Tous les champs sont traités comme du texte. Conversion de type de données. |
|
Taille de l'ensemble de résultats |
Configurable dans la console ou via le SDK. Maximum : 100 journaux. |
L'analyse s'arrête et renvoie les résultats lorsque l'une des conditions suivantes est remplie :
|
|
Frais |
Facturation du trafic d'index et du stockage d'index. Éléments facturables de la méthode de facturation par fonctionnalité. L'exécution des requêtes SPL n'entraîne aucun frais supplémentaire. |
Facturation du volume de données analysées, c'est-à-dire des données correspondant à l'analyse après la requête d'index initiale. |
Procédure
Avant d'interroger les journaux, assurez-vous d'avoir collecté les journaux et créé un index. Un index trie une ou plusieurs colonnes de données de journal pour une récupération efficace. Créer un index.
Console
Connectez-vous à la console Simple Log Service. Sur la page de requête et d'analyse de votre Logstore, exécutez une requête. Démarrage rapide pour la requête et l'analyse des journaux.
Exemple
Supposons qu'il existe 10 millions de journaux bruts. La requête Status:200 | where Category like '%xx%' renvoie 1 000 journaux correspondant à la fois à Status:200 et à where Category like '%xx%'. L'histogramme affiche la distribution de ces journaux dans le temps.
API
Appelez l'opération GetLogs ou GetLogsV2 pour interroger les journaux. GetLogs renvoie des résultats non compressés ; GetLogsV2 renvoie des résultats compressés.