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 :
-
Exécute l'instruction de recherche pour récupérer les journaux.
ImportantL'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écuterstatus:200 | WHERE userId = '123' | extend host=upper(hostname), vous devez créer un index pour le champstatus, mais pas pour les champsuserIdouhostname. 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
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
L'exécution SPL dans les requêtes par analyse comporte des limites. Pour plus d'informations, consultez la syntaxe SPL.
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 |
|
|
|
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 :
|
|
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. |