Tous les produits
Search
Centre de documentation

Simple Log Service:Syntaxe des requêtes par analyse

Dernière mise à jour :Sep 22, 2026

Les requêtes par analyse vous permettent de rechercher des journaux en fonction des valeurs des champs sans configurer d'index. Combinées aux instructions SPL (Simple Log Service Processing Language), elles offrent la possibilité de filtrer, transformer et analyser les résultats directement à partir des données brutes des journaux.

Fonctionnement

Lorsque vous exécutez une requête par analyse, SLS :

  1. Exécute l'instruction de recherche pour récupérer les journaux.

    Important

    L'instruction de recherche au premier niveau du pipeline repose sur des requêtes basées sur les index. Utilisez * si aucun filtrage par index n'est nécessaire. Par exemple, avant d'exécuter status:200 | WHERE userId = '123' | extend host=upper(hostname), vous devez créer un index pour le champ status, mais pas pour les champs userId ou hostname.

  2. Applique les instructions SPL aux résultats de la recherche — filtrage, conversion et analyse des données — puis renvoie la sortie finale.

Syntaxe de base

La requête par analyse prend en charge la syntaxe SPL. Le langage SPL extrait les informations structurées, effectue des opérations sur 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 par analyse.

  • Champs indexés : identifiés par [I], applicables à la recherche par 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

Remarque
  • 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 à l'aide de 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 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 dans 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 supprimer les originaux

    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 à l'aide de mises en cascade de pipeline à plusieurs niveaux, exécutées 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

Limites

  1. L'exécution SPL dans les requêtes par analyse comporte des limites. Pour plus d'informations, consultez la syntaxe SPL.

  2. La pagination aléatoire n'est pas prise en charge.

Comparaison entre requêtes basées sur les index et requêtes par analyse

Élément

Requête basée sur les index

Requête par analyse

Syntaxe

Instruction de recherche. Pour plus d'informations, consultez Syntaxe et fonctions de recherche.

Instruction de recherche | Instruction SPL 1 | Instruction SPL 2 | .... Pour plus d'informations, consultez la syntaxe SPL.

Configuration d'index requise

Oui.

L'instruction de recherche basée sur les index nécessite des index, tandis que les autres instructions n'en nécessitent pas.

Instructions d'analyse prises en charge

Oui.

Oui.

Pagination aléatoire prise en charge

Oui.

Non.

Seule la pagination continue (avant/arrière) est prise en charge.

Histogramme des journaux

Affiché en fonction des résultats de l'instruction de recherche.

Affiché en fonction des résultats de l'instruction de recherche et de la progression de l'analyse.

Opérateurs et fonctions

Les calculs logiques et mathématiques ainsi que la recherche floue sont pris en charge. Les fonctions SQL ne le sont pas.

Pour plus de détails, consultez les instructions et fonctions SPL ainsi que les fonctions SQL prises en charge par SPL.

Types de champs

Déterminés par les types de données spécifiés dans les configurations d'index.

SPL traite tous les champs comme du texte, indépendamment de la configuration d'index. Pour plus d'informations, consultez la conversion de types de données.

Taille des résultats

Configurable dans la console SLS ou via SDK. Maximum : 100.

L'analyse s'arrête et renvoie les résultats lorsque l'une des conditions suivantes est remplie :

  • Le nombre de journaux identifiés atteint la limite de retour spécifiée.

    Vous pouvez définir cette valeur dans la console SLS ou via SDK.

  • Le nombre de journaux analysés dépasse la limite supérieure calculée automatiquement (par défaut : 100 000, dérivée des résultats de l'instruction de recherche).

  • La durée de l'analyse dépasse 45 secondes.

Frais

Des frais vous sont facturés pour le trafic d'index et le stockage d'index. Pour plus d'informations, consultez les éléments facturables par fonctionnalité.

Facturation basée sur le trafic d'analyse (volume de données renvoyé lors de l'analyse). L'identification des journaux utilise les résultats des requêtes basées sur les index.