Simple Log Service (SLS) prend en charge les syntaxes PromQL, SQL et une combinaison SQL+PromQL pour interroger et analyser les données de métriques, avec des conventions de nommage et des limites d'interrogation spécifiques.
SLS propose trois syntaxes pour interroger et analyser les données de métriques :
Syntaxe PromQL : PromQL, le langage d'interrogation de Prometheus, simplifie les requêtes sur les données de métriques. Pour plus d'informations, consultez la documentation Prometheus et les exemples d'utilisation des fonctions PromQL.
Syntaxe SQL : Interrogez et analysez les données de métriques via SQL en fonction du format d'encodage des données.
Combinaison de SQL et PromQL : Combinez SQL et fonctions SLS PromQL pour effectuer des requêtes imbriquées. Les requêtes PromQL prennent également en charge la syntaxe d'apprentissage automatique de SLS.
Lorsque vous utilisez PromQL ou la combinaison SQL+PromQL, les noms de métriques et les libellés doivent respecter les conventions de nommage. Pour plus d'informations, consultez la section Identificateur de métrique.
Syntaxe PromQL
Exemples PromQL :
-
Interrogez les séries temporelles dont le nom de métrique est http_requests_total, le libellé job a la valeur apiserver et le libellé handler a la valeur /api/comments.
http_requests_total{job="apiserver", handler="/api/comments"} -
Recherchez les 3 principaux consommateurs de CPU regroupés par application et processus au cours des 5 dernières minutes. Le paramètre app spécifie les applications et proc spécifie les types de processus.
topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m]))) -
Recherchez les pods non sains.
min_over_time(sum by (namespace, pod) (kube_pod_status_phase{phase=~"Pending|Unknown|Failed"})[15m:1m]) > 0 -
Calculez la somme de l'utilisation du CPU pour les DaemonSets Kubernetes.
sum (rate (container_cpu_usage_seconds_total{pod=~"^x.*$",cluster=~".*",namespace=~".*"}[1m])) / sum (kube_pod_container_resource_limits_cpu_cores{pod=~"^null.*$",cluster=~".*",namespace=~".*"}) * 100
Pour plus d'informations sur la syntaxe PromQL, consultez la documentation Prometheus, les exemples d'interrogation et les cas d'utilisation de PromQL.
Syntaxe SQL
Exemples SQL. Pour plus d'informations, consultez les cas d'utilisation SQL.
-
Interrogez et analysez toutes les données.
*| SELECT * FROM "my_metric_store.prom" WHERE __name__ != '' -
Pour la métrique http_request_count, interrogez les données dont la valeur de domaine du champ __labels__ est www.example.com et obtenez la somme des valeurs du champ __value__.
*| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' -
Pour la métrique http_request_count, interrogez les données dont la valeur de domaine du champ __labels__ est www.example.com, agrégez les valeurs du champ __value__ par heure et obtenez la somme des valeurs.
*| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' GROUP BY t ORDER BY t DESC
Détails de la syntaxe SQL :
-
La syntaxe SQL pour les données de métriques correspond à celle des données de journaux (Syntaxe d'analyse). Lors de l'interrogation des données de métriques avec SQL, le nom de la table dans une clause FROM doit être au format {metrics_store_name}.prom. {metrics_store_name} spécifie le nom du Metricstore que vous avez créé.
RemarqueEntourez le nom de la table de guillemets doubles ("").
Utilisez la fonction element_at() pour obtenir la valeur d'une clé à partir du champ __labels__. Exemple : element_at(__labels__, 'key').
Pour plus d'informations sur les schémas de table, consultez la section Format d'encodage.
Syntaxe SQL+PromQL
SLS fournit sept fonctions PromQL. Les fonctions promql_query, promql_labels, promql_label_values et promql_series ne peuvent être appelées que sur la page d'interrogation et d'analyse personnalisée d'un Metricstore.
Lors de la combinaison de SQL et PromQL, le nom de la table dans une clause FROM doit être metrics.
Endpoints d'API et descriptions des fonctions PromQL : documentation Prometheus.
|
Nom de la fonction |
Description |
Exemple |
|
promql_query(string) |
Évalue une requête instantanée à l'heure de fin (EndTime) d'une plage de temps. Équivalent à l'API /query de Prometheus. Paramétrage : query=<string>. |
*| SELECT promql_query('up') FROM metrics |
|
promql_query_range(string, string) |
Évalue une requête dans la plage de temps allant de StartTime à EndTime. Équivalent à l'API /query_range de Prometheus. Paramétrages : query=<string> et step=<duration>. |
*| SELECT promql_query_range('up', '5m') FROM metrics |
|
promql_labels() |
Renvoie toutes les clés de libellé. Par défaut, cette fonction renvoie uniquement les données dans la plage de temps suivante : [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_labels() FROM metrics |
|
promql_labels(string) |
Prend en charge le paramètre match[] pour renvoyer les clés de libellé correspondant à <series_selector>. Prend en charge une seule valeur match[]. Exemple : promql_labels('up'). Par défaut, cette fonction renvoie uniquement les données dans la plage de temps suivante : [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_labels('up') FROM metrics |
|
promql_label_values(string) |
Renvoie les valeurs d'un libellé. Par défaut, cette fonction renvoie uniquement les données dans la plage de temps suivante : [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_label_values('__name__') FROM metrics |
|
promql_label_values(string, string) |
Prend en charge le paramètre match[] pour renvoyer les valeurs d'un libellé correspondant à <series_selector>. Prend en charge une seule valeur match[], qui doit précéder le paramètre Label. Exemple : promql_label_values('up', '__label_name__') . Par défaut, cette fonction renvoie uniquement les données dans la plage de temps suivante : [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_label_values('up', '__label_name__') FROM metrics |
|
promql_series(string) |
Renvoie les séries temporelles correspondantes. Par défaut, cette fonction renvoie uniquement les données dans la plage de temps suivante : [<EndTime> - 5min, <EndTime>]. |
*| SELECT promql_series('up') FROM metrics |
Chaque fonction PromQL renvoie une table, similaire à une fonction définie par l'utilisateur renvoyant une table (UDTF).
-
Schéma de table renvoyé par promql_query(string) et promql_query_range(string, string) :
Champ
Type de champ
Description
metric
varchar
Le nom de la métrique. Peut être vide si la requête inclut une clause GROUP BY.
labels
map<varchar, varchar>
Les libellés sous forme de map clé-valeur.
time
bigint
L'heure.
value
double
La valeur à un instant donné.
Exemples de requêtes :
-
Fonction promql_query(string)
Saisissez
*| select promql_query('up') from metricsdans l'éditeur de requête et cliquez sur Search & Analyze. Le résultat de la requête est renvoyé dans un tableau comportant quatre colonnes : time, metric, labels et value, affichant les valeurs de la métrique up pour chaque instance. -
Fonction promql_query_range(string, string)
Exécutez l'instruction SQL
select promql_query_range('up', '30s') from metricspour interroger les données de plage de la métrique PromQLupavec un pas de30s. Le résultat de la requête s'affiche dans un tableau présentant les données de séries temporelles.
-
-
Schéma de table renvoyé par promql_labels(), promql_labels(string), promql_label_values(string) et promql_label_values(string, string) :
Champ
Type de champ
Description
label
varchar
Clé de libellé
Exemples de requêtes :
-
Fonction promql_labels()
*| select promql_labels() from metrics. Le résultat de la requête renvoie la colonne label, contenant cinq noms de libellés : code, instance, job, le et method. -
Fonction promql_labels(string)
Par exemple, exécutez la requête
*| select promql_labels('up') from metricspour interroger tous les noms de libellés de la métriqueup. Le résultat inclut__name__,instanceetjob. -
Fonction promql_label_values(string)
Par exemple, exécutez la requête
*| select promql_label_values('instance') from metrics. La colonne label du résultat de la requête renvoie trois adresses d'instance : demo.promlabs.com:10000, demo.promlabs.com:10001 et demo.promlabs.com:10002. -
Fonction promql_label_values(string, string)
Exemple de requête :
*| select promql_label_values('up{demo!="a"}','instance') from metrics. Le résultat de la requête renvoie la colonne label avec trois lignes : demo.promlabs.com:10000, demo.promlabs.com:10001 et demo.promlabs.com:10002.
-
-
Schéma de table renvoyé par promql_series(string) :
Champ
Type de champ
Description
series
map<varchar, varchar>
La série temporelle.
Exemple de requête :
Par exemple, exécutez la requête
*| select promql_series('up') from metrics. La colonne series du résultat contient trois lignes correspondant à demo.promlabs.com:10001, demo.promlabs.com:10000 et demo.promlabs.com:10002. Chaque ligne est une map contenant les champs instance,__name__(valeur : up) et job (valeur : demo).
Limites
Un Metricstore prend uniquement en charge les endpoints d'API de requête Prometheus (/query et /query_range). Les autres endpoints tels que /admin, /alerts et /rules ne sont pas pris en charge.
Les requêtes PromQL et combinées SQL+PromQL renvoient des valeurs pour un maximum de 11 000 points de données.