{{tag>software prometheus grafana promql}}
====== Prometheus: Présentation du PromQL ======
PromQL est un langage de requête permettant de sélectionner et d’agréger les séries temporelles stockées par Prometheus.
Il existe des bonnes pratiques à propos de la nomenclature des métriques et des labels, consulter la documentation officielle à l'URL https://prometheus.io/docs/practices/naming/
application_variable_unités_type
===== filtrage par regex =====
Les expressions rationnelles (regex) peuvent s'utiliser pour filtrer les métriques:
# sur les labels:
up{job=~"prometheus|routing"}
# sur un nom de métrique:
{__name__=~"node_network_(receive|transmit)_bytes_total"}
La métrique a un type, par exemple **counter**. Une métrique de type counter (compteur) à la particularité de ne pouvoir que croître.
Dans le cas du compteur, plutôt que d'afficher directement sa valeur courante, il peut être plus pertinent de l'utiliser pour calculer son taux (ou sa fréquence d'apparition) qui peut être plus représentatif de sa vitesse d’accroissement.
La fonction rate() du PromQL permet de facilement répondre a ce type de besoin:
rate(traefik_entrypoint_requests_total{job="routing",entrypoint!="METRICS"}[5m])
Dans cet exemple:
* La métrique est traefik_entrypoint_requests_total
* Les labels sont listés entre crochets job et entrypoint
PromQL permet de grouper les séries temporelles par labels grace à sa fonction sum():
sum( rate(traefik_entrypoint_requests_total{job="routing",entrypoint!="METRICS"}[5m])) by(entrypoint)
===== Manipulation des labels =====
La fonction **label_join()** permet de récupérer les valeurs de labels existants distincts et de les joindre pour former un nouveau label associé à la métrique.
# syntaxe
# label_join(metric, "newLabel", "separator", "label1", "label2", ...)
#
# Pour l'exemple on utilise la métrique up ayant les labels job et instance
# up{instance,job}
label_join(up, "newLabel", "separator", "job", "instance")
La fonction **label_replace()** permet de redéfinir un label existant
===== Références =====
* https://coralogix.com/blog/promql-tutorial-5-tricks-to-become-a-prometheus-god/
* https://logz.io/blog/promql-examples-introduction
* https://grafana.com/tutorials/grafana-fundamentals/
* https://valyala.medium.com/promql-tutorial-for-beginners-9ab455142085
* https://www.metricfire.com/blog/understanding-the-prometheus-rate-function/