Réaliser vos requêtes PromQL avec Erlenmeyer

erlenmeyer-promql banner
Il y a fort à parier que vous utilisez Clever Cloud pour déployer des applications ou d’autres services managés. Mais saviez-vous que tous ces services génèrent des métriques. Et qu’en plus, vous avez déjà accès à ce service ? En effet, nous enregistrons de notre côté un agent dont le travail est de collecter toutes les données locales.Une fois que c’est fait, elles sont stockées dans une base de données Time Series appelée Warp10.

Pour simplifier l’adoption de Warp10, l’équipe de OVHcloud Metrics a construit il y a quelques années l’outil Erlenmeyer. Premièrement, cet outil permet l’utilisation de plusieurs protocoles open source tels que PromQL, OpenTSDB, InfluxQL ou Graphite pour interroger les métriques stockées de Warp10.
Deuxièmement, Erlenmeyer fonctionne comme un proxy devant un cluster Warp10. Ensuite, nous avons déployé quelques instances de Erlenmeyer devant notre infrastructure Warp10, fournissant de nouvelles façons d’interroger les métriques de vos applications.
Par ailleurs, nous avons déployé un ensemble d’instances Erlenmeyer devant notre infrastructure Warp10.

Dans ce billet, nous allons passer en revue ce qu’apporte Erlenmeyer et comment traiter les métriques des services Clever Cloud avec PromQL.

Protocoles d’Erlenmeyer

Erlenmeyer active presque entièrement les requêtes PromQL , OpenTSDB, InfluxQL et certaines des fonctions Graphite. De plus, vous pouvez récupérer la documentation sur l’implémentation et l’utilisation de chaque protocole sur le GitHub d’Erlenmeyer:

Sur Clever Cloud, nous avons déployé un Erlenmeyer devant notre backend Warp10. Cela signifie que tous ces protocoles open source peuvent être utilisés pour interroger les métriques de notre application. Le host est https://PROTO-c1-warp10-clevercloud-customers.services.clever-cloud.com/PROTO avec PROTO étant:

  • pour PromQL: prometheus,
  • pour OpenTSDB: opentsdb,
  • pour InfluxQL: influxql,
  • et pour Graphite: graphite.
Pour authentifier votre requête, vous devez utiliser le TOKEN READ de Warp10 comme mot de passe de l’authentification de base. Vous pouvez le trouver dans le panneau des métriques de toute application Clever Cloud :

Retrouver les données in memory avec PromQL

D’abord, stockons le token Warp10 READ TOKEN en tant que APP_ID as an variable d’environment:
export TOKEN=MY_AWESOME_TOKEN # Remplacez la valeur par votre token Clever Cloud Warp10
export APP_ID=app_test # Remplacez la valeur par une de vos propres applications Clever Cloud.

Récupérer les données brutes

Pour récupérer le mem.used_percent dans PromQL, nous avons besoin d’une requête HTTP GET vers Erlenmeyer, avec le TOKEN en basic AUTH. Dans ce cas, la requête PromQL GET requiert quatre paramètres: query, start, end et step. De même, pour en savoir plus sur le langage PromQL, vous pouvez lire la Documentation de Prometheus. Dans notre cas, nous allons créer une requête simple pour obtenir les données brutes :
api/v1/query_range?
query=mem.used_percent{app_id="$APP_ID"}&
start=1623289800&
end=1623311400&
step=120s
Le paramètre query est utilisé pour les requêtes PromQL: start et end sont des timestamps en millisecondes correspondant à la limite de temps pour obtenir des données. Et le step est le paramètre de sampling.
Comme les données sont collectées environ toutes les minutes, fixons au moins le double de cette durée: 120s.
Maintenant, pour obtenir le résultat, exécutons un cURL en url encoded:
curl --request GET --url "https://u:${TOKEN}@prometheus-c1-warp10-clevercloud-customers.services.clever-cloud.com/prometheus/api/v1/query_range?query=mem.used_percent%7Bapp_id%3D%22${APP_ID}%22%7D&start=1623289800&end=1623311400&step=120s" --header 'Content-Type: application/json'

Exemple “Group By”

Un groupe par requête peut être utile dans le cas de Clever Cloud pour fusionner certaines séries (déploiements ou instances multiples). Ainsi, nous allons regrouper les données en fonction des étiquettes app_id dans l’exemple suivant.

Nous réutiliserons la variable stockée READ_TOKEN et APP_ID. Pour calculer un groupe par dans notre cas, nous appliquons la max PromQL fonction regroupée par le label de la série app_id :
api/v1/query_range?
query=max(mem.used_percent{app_id="$APP_ID"}) by (app_id)&
start=1623289800&
end=1623311400&
step=120s
Enfin pour obtenir le résultat, exécutez le cURL url encodé suivant :
curl --request GET --url "https://u:${TOKEN}@prometheus-c1-warp10-clevercloud-customers.services.clever-cloud.com/prometheus/api/v1/query_range?query=max(mem.used_percent%7Bapp_id%3D%22${APP_ID}%22%7D)%20by%20(app_id)&start=1623289800&end=1623311400&step=120s" --header 'Content-Type: application/json'

Source de données Grafana PromQL

Vous pouvez utiliser Grafana pour créer vos propres tableaux de bord, qui est une application Web de visualisation interactive open source (pour déployer un Grafana en tant qu’application Clever Cloud, nous fournissez un exemple github et vous pouvez également suivre cet Article de blog en français). Bien sûr, vous pouvez configurer une source de données PromQL pour obtenir les métriques des applications Clever Cloud :

  • créer une source Prométhée,
  • puis définissez la source Prometheus host sur https://prometheus-c1-warp10-clevercloud-customers.services.clever-cloud.com/prometheus,</li >
  • activez en plus l’authentification de base avec un utilisateur défini sur metrics et un mot de passe contenant votre token Warp10,
  • pour conclure, cliquez sur Enregistrer et tester, votre source de données Prometheus devrait maintenant fonctionner !

Interface utilisateur Prometheus avec remote_read

Comme avec Grafana, vous pouvez utiliser Prometheus et tracer des métriques Clever Cloud dans l’interface utilisateur Web. Et en effet, remplissez simplement votre configuration Prometheus avec une source remote_read :

api/v1/query_range ?
remote_read:
  - url: "https://prometheus-c1-warp10-clevercloud-customers.services.clever-cloud.com/prometheus/remote_read/"
  basic_auth:
    username: "métriques"
    password: "TOKEN"
Redémarrez Prometheus, puis exécutez simplement une requête Prometheus dans l’interface utilisateur comme ci-dessous :
{ __name__= "mem.used_percent", app_id="$APP_ID" }
Notre backend est capable de résoudre correctement les . qui sont des caractères prométhéens invalides. Néanmoins, la réponse du backend traduira toujours ces valeurs . dans les données de la série (nom ou étiquettes) en _ valides.

Pour résumer

Comme vous pouvez le voir avec ce post, vous pouvez obtenir des métriques des applications et des add-ons de Clever Cloud. Actuellement, vous avez un moyen supplémentaire de les interroger, car Erlenmeyer permet l’utilisation du PromQL. Cependant l’inconvénient est que vous devrez mettre à jour régulièrement votre token, car ils expirent dans quelques jours. Nous travaillons sur une solution pour améliorer l’expérience utilisateur. Tout d’abord, nous fournirons bientôt à nos clients l’accès à un Grafana avec source de données configurée et tableaux de bord déjà pré-remplis. Le token sera géré de notre côté et vous pourrez ensuite construire vos propres graphiques avec des requêtes PromQL ou WarpScript.

Blog

À lire également

Clever Tools : une année d’évolutions au service de vos déploiements, cap sur la v4

Une interface en ligne de commandes (CLI) est au cœur de l'expérience développeur. Chez Clever Cloud, cela fait bientôt 10 ans que nous proposons les Clever Tools.
Engineering Fonctionnalités

Otoroshi with LLM : simplifiez la gestion de vos API et services IA sur Clever Cloud

Vos applications et services évoluent dans un environnement de plus en plus complexe, nécessitant une gestion efficace des API et des interactions avec des modèles d'intelligence artificielle tels que les très populaires LLM (Large Language Models).
Fonctionnalités

Markitdown-as-a-Service: de l’IA à la production sur Clever Cloud

Chaque jour, de nouveaux outils sont rendus disponibles, l'IA apporte de nouvelles perspectives, vous avez de nouvelles idées. C'est l'un des objectifs de Clever Cloud que de vous aider à les développer et les tester en conditions réelles sans effort, avant de pouvoir les mettre à disposition de tous.
Engineering