Interroger les données du service Prometheus

Après avoir déployé Google Cloud Managed Service pour Prometheus, vous pouvez interroger les données envoyées au service géré et afficher les résultats dans des graphiques et des tableaux de bord.

Ce document décrit les champs d'application de métriques, qui déterminent les données que vous pouvez interroger, ainsi que les méthodes suivantes pour récupérer et utiliser les données que vous avez collectées :

  • Interfaces basées sur Prometheus :

    • Page Managed Service pour Prometheus dans Google Cloud Console
    • API HTTP Prometheus
    • Interface utilisateur Prometheus
    • Grafana
  • Cloud Monitoring dans Google Cloud Console

Avant de commencer

Si vous n'avez pas encore déployé le service géré, configurez la collecte gérée ou la collecte auto-déployée.

Configurer votre environnement

Pour éviter de saisir à plusieurs reprises l'ID de votre projet ou le nom de votre cluster, effectuez la configuration suivante :

  • Configurez les outils de ligne de commande comme suit :

    • Configurez l'outil gcloud pour faire référence à l'ID de votre projet Cloud :

      gcloud config set project PROJECT_ID
      
    • Configurez l'outil kubectl pour utiliser votre cluster :

      kubectl config set-cluster CLUSTER_NAME
      

    Pour en savoir plus sur ces outils, consultez les articles suivants :

Configurer un espace de noms

Créez l'espace de noms Kubernetes gmp-test pour les ressources que vous créez dans le cadre de l'exemple d'application :

kubectl create ns gmp-test

Configurer un compte de service pour Workload Identity

Vous pouvez ignorer cette section si Workload Identity n'est pas activé pour votre cluster Kubernetes.

Managed Service pour Prometheus capture les données de métriques à l'aide de l'API Cloud Monitoring. Si votre cluster utilise Workload Identity, vous devez autoriser votre compte de service Kubernetes à accéder à l'API Monitoring. Cette section décrit les opérations suivantes :

Créer et associer le compte de service

Cette étape apparaît à plusieurs endroits de la documentation de Managed Service pour Prometheus. Si vous avez déjà effectué cette étape dans le cadre d'une tâche précédente, vous n'avez pas besoin de la répéter. Passez directement à la section Autoriser le compte de service.

La séquence de commandes suivante crée le compte de service gmp-test-sa et l'associe au compte de service Kubernetes par défaut dans l'espace de noms gmp-test :

gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[gmp-test/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace gmp-test \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com

Si vous utilisez un autre espace de noms ou compte de service GKE, ajustez les commandes en conséquence.

Autoriser le compte de service

Les groupes d'autorisations associées sont collectés dans des rôles que vous attribuez à un compte principal, dans cet exemple, le compte de service Google Cloud. Pour en savoir plus sur ces rôles, consultez la page Contrôle des accès.

La commande suivante accorde au compte de service Google Cloud gmp-test-sa les rôles de l'API Monitoring dont il a besoin pour écrire les données de métriques.

Si vous avez déjà attribué un rôle spécifique au compte de service Google Cloud dans le cadre de la tâche précédente, vous n'avez pas besoin de le faire à nouveau.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer

Workload Identity dans les environnements de production

L'exemple décrit dans ce document associe le compte de service Google Cloud au compte de service Kubernetes par défaut et accorde au compte de service Google Cloud toutes les autorisations nécessaires pour utiliser l'API Monitoring.

Dans un environnement de production, vous pouvez utiliser une approche plus précise, avec un compte de service pour chaque composant, chacun disposant d'autorisations minimales. Pour en savoir plus sur la configuration des comptes de service pour la gestion des identités de charge de travail, consultez la page Utiliser Workload Identity.

Champs d'application des requêtes et des métriques

Les données que vous pouvez interroger sont déterminées par le champ d'application des métriques Cloud Monitoring, quelle que soit la méthode que vous utilisez pour interroger les données. Par exemple, si vous utilisez Grafana pour interroger les données de Managed Service pour Prometheus, chaque champ d'application des métriques doit être configuré en tant que source de données distincte.

Un champ d'application des métriques Monitoring est une construction en lecture seule qui vous permet de surveiller plusieurs projets Google Cloud à partir d'un projet Cloud désigné, appelé projet de champ d'application, qui héberge un champ d'application des métriques.

Par défaut, un projet est le projet de champ d'application pour son propre champ d'application des métriques. Le champ d'application des métriques contient les métriques et la configuration de ce projet. Un projet peut comprendre plusieurs projets dans son champ d'application des métriques. Les métriques et les configurations de tous les projets dans le champ d'application des métriques sont visibles sur le projet de champ d'application. Un projet peut également appartenir à plusieurs champs d'application des métriques.

Lorsque vous interrogez les métriques d'un projet et si ce projet héberge un champ d'application des métriques multiprojets, vous pouvez extraire les données de plusieurs projets.

Pour en savoir plus sur les projets de champ d'application et les champs d'application des métriques, consultez la section Champs d'application des métriques. Pour en savoir plus sur la configuration des champs d'application des métriques multiprojets, consultez la section Afficher les métriques pour plusieurs projets.

Page Managed Service pour Prometheus

Le moyen le plus simple de vérifier que vos données Prometheus sont exportées consiste à utiliser la page Managed Service pour Prometheus basé sur PromQL dans Google Cloud Console.

Pour afficher cette page, procédez comme suit :

  1. Dans Cloud Console, accédez à Monitoring ou cliquez sur le bouton suivant :

    Accéder à Monitoring

  2. Dans le volet de navigation Monitoring, cliquez sur Prometheus géré.

Sur la page Managed Service pour Prometheus, vous pouvez utiliser les requêtes PromQL pour récupérer et représenter sous forme de graphique les données collectées avec le service géré. Cette page ne peut interroger que les données collectées par Managed Service pour Prometheus.

La capture d'écran suivante montre un graphique affichant la métrique up :

Graphique Managed Service pour Prometheus pour la métrique "up" de Prometheus

API HTTP Prometheus

Managed Service pour Prometheus est compatible avec l'API HTTP Prometheus en amont à l'URL précédée du préfixe https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/. Pour en savoir plus sur les points de terminaison compatibles, consultez la section Compatibilité de l'API.

Cette API est accessible par n'importe quel outil pouvant interagir avec un serveur Prometheus standard. Il s'agit d'un point de terminaison d'API uniquement. il ne livre pas d'UI. En tant qu'API Google Cloud, l'API utilise l'authentification OAuth2. Dans le cadre de l'API Cloud Monitoring, la valeur de PROJECT_ID correspond au projet de champ d'application d'un champ d'application des métriques. Vous pouvez donc extraire des données de projet dans le champ d'application des métriques. Pour en savoir plus sur les champs d'application, consultez la section Champs d'application des métriques.

Pour utiliser ce point de terminaison, fournissez une expression PromQL. Par exemple, la requête instantanée suivante récupère toutes les séries temporelles portant le nom de métrique up :

curl https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/query \
  -d "query=up" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"

Si la requête aboutit, elle renvoie un résultat semblable à celui-ci, qui a été formaté pour faciliter la lecture :

{
  "status":"success",
  "data":{
    "resultType":"vector",
    "result":[{
      "metric": {
        "__name__":"up",
        "cluster":"gmp-test",
        "instance":"prom-example-84c6f547f5-g4ljn:web",
        "job":"prometheus",
        "location":"us-central1-a",
        "project_id":"a-gcp-project"
      },
      "value": [1634873239.971,"1"]
    }]
  }
}

Vous ne pouvez utiliser PromQL que pour interroger les métriques ingérées par Managed Service pour les collecteurs Prometheus. Vous ne pouvez pas interroger les métriques système Google Cloud à l'aide de PromQL.

Interface utilisateur Prometheus

L'interface utilisateur de Prometheus vous permet d'accéder aux données ingérées et de les visualiser. Cette UIr exécute les requêtes PromQL sur toutes les données de votre projet Google Cloud, comme déterminé par le champ d'application des métriques associé à votre projet.

L'UI agit également en tant que proxy d'authentification pour l'accès aux données ingérées. Cette fonctionnalité peut être utilisée pour les outils clients non compatibles avec OAuth2, dont Grafana. Si vous prévoyez d'utiliser Grafana pour visualiser les données de Managed Service pour Prometheus, vous devez également déployer l'interface utilisateur de Prometheus.

Déployer l'interface utilisateur

Pour déployer l'interface utilisateur de Prometheus pour Managed Service pour Prometheus, exécutez les commandes suivantes :

  1. Déployez le service frontend et configurez-le pour interroger le projet de champ d'application du champ d'application des métriques de votre choix :

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/frontend.yaml |
    sed 's/\$PROJECT_ID/PROJECT_ID/' |
    kubectl apply -n gmp-test -f -
    
  2. Transférez le service frontend vers votre ordinateur local. L'exemple suivant transfère le service au port 9090 :

    kubectl -n gmp-test port-forward svc/frontend 9090
    

    Cette commande ne renvoie pas de résultat et signale les accès à l'URL pendant son exécution.

Si vous souhaitez continuer à utiliser un déploiement Grafana installé par kube-prometheus, déployez l'UI de Prometheus dans l'espace de noms monitoring.

Vous pouvez accéder à l'UI Prometheus dans votre navigateur à l'adresse http://localhost:9090. Si vous utilisez Cloud Shell à cette étape, vous pouvez obtenir un accès à l'aide du bouton Aperçu sur le Web.

La capture d'écran suivante montre une table de l'interface utilisateur de Prometheus qui affiche la métrique up :

Afficher une métrique dans l'UI de Prometheus

Vous pouvez également configurer l'authentification et l'autorisation appropriées sur le service frontend en utilisant, par exemple, Identity Aware Proxy. Pour en savoir plus sur l'exposition des services, consultez la page Exposer des applications à l'aide de services.

Fournir des identifiants de manière explicite

Lors de l'exécution sur GKE, l'interface récupère automatiquement les identifiants de l'environnement en fonction du compte de service Compute Engine par défaut ou de la configuration de Workload Identity.

Dans les clusters Kubernetes non GKE, les identifiants doivent être explicitement fournis à l'interface à l'aide d'options ou de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

  1. Créez un compte de service :

    gcloud iam service-accounts create gmp-test-sa
    

    Cette étape crée le compte de service que vous avez peut-être déjà créé dans les instructions de Workload Identity.

  2. Accordez les autorisations requises au compte de service :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer
    

  3. Créez et téléchargez une clé pour le compte de service :

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  4. Ajoutez le fichier de clé en tant que secret à votre cluster non-GKE :

    kubectl -n gmp-test create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  5. Ouvrez la ressource "Déploiement" de l'interface pour la modifier :

    kubectl -n gmp-test edit deploy frontend
    
  6. Ajoutez le texte affiché en gras à la ressource :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: gmp-test
      name: frontend
    spec:
      template
        containers:
        - name: frontend
          args:
          - --query.credentials-file=/gmp/key.json
    ...
          volumeMounts:
          - name: gmp-sa
            mountPath: /gmp
            readOnly: true
    ...
        volumes:
        - name: gmp-sa
          secret:
            secretName: gmp-test-sa
    ...
    

  7. Enregistrez le fichier et fermez l'éditeur. Une fois la modification appliquée, les pods sont recréés et commencent à s'authentifier auprès du backend de métrique avec le compte de service donné.

Plutôt que d'utiliser les options définies dans cet exemple, vous pouvez définir le chemin d'accès du fichier de clé à l'aide de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

Modifier le projet interrogé

Le déploiement frontend utilise le projet Google Cloud du cluster comme projet de champ d'application. Si ce projet est le projet d'un champ d'application des métriques multiprojets, il peut lire les métriques de tous les projets dans le champ d'application des métriques.

Vous pouvez spécifier un autre projet à l'aide de l'option --query.project-id.

En règle générale, vous utilisez un projet dédié en tant que projet de champ d'application. Ce projet n'est pas le même que celui dans lequel le déploiement frontend s'exécute. Pour permettre au déploiement de lire un autre projet cible, vous devez procéder comme suit :

  • Indiquez au déploiement frontend quel projet est le projet cible.
  • Accordez au compte de service l'autorisation de lire le projet cible. Si vous avez utilisé le compte de service Compute Engine default, vous pouvez effectuer l'une des opérations suivantes :

Pour accorder les autorisations nécessaires pour accéder à un autre projet Cloud, procédez comme suit :

  1. Accordez au compte de service l'autorisation de lire à partir du projet cible que vous souhaitez interroger :

    gcloud projects add-iam-policy-binding SCOPING_PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer
    
  2. Ouvrez le déploiement frontend créé précédemment pour le modifier :

    kubectl -n gmp-test edit deploy frontend
    
  3. Spécifiez le projet cible à l'aide de l'option --query.project-id :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: gmp-test
      name: frontend
    spec:
      template
        containers:
        - name: frontend
          args:
          - --query.project-id=SCOPING_PROJECT_ID
    ...
    

    Enregistrez le fichier et fermez l'éditeur. Une fois la modification appliquée, les pods frontend sont redémarrés et interrogent le nouveau projet de champ d'application.

Grafana

Grafana n'est pas compatible avec l'authentification OAuth2 pour les sources de données Prometheus. Pour utiliser Grafana avec une source de données Managed Service pour Prometheus, vous devez utiliser l'interface utilisateur Prometheus en tant que proxy d'authentification.

Si vous n'avez pas encore déployé l'interface utilisateur de Prometheus, déployez-la maintenant.

Déployer Grafana

Si vous disposez déjà d'un déploiement Grafana, vous pouvez y accéder comme d'habitude.

Si vous n'avez pas de déploiement Grafana en cours d'exécution sur votre cluster, vous pouvez créer un déploiement test éphémère.

Pour créer un déploiement Grafana éphémère, appliquez le fichier manifeste de Managed Service pour Prometheus grafana.yaml à votre cluster et transférez le service grafana vers votre ordinateur local. L'exemple suivant transfère le service au port 3000.

  1. Appliquez le fichier manifeste grafana.yaml :

    kubectl -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/grafana.yaml
    
  2. Transférez le service frontend vers votre ordinateur local. Cet exemple transfère le service vers le port 9090 :

    kubectl -n gmp-test port-forward svc/grafana 3000
    

    Cette commande ne renvoie pas de résultat et signale les accès à l'URL pendant son exécution.

    Vous pouvez accéder à Grafana dans votre navigateur à l'adresse http://localhost:3000 avec le nom d'utilisateur et le mode de passe admin:admin. Si vous utilisez Cloud Shell à cette étape, vous pouvez obtenir un accès à l'aide du bouton Aperçu sur le Web.

Configurer une source de données

Pour interroger Managed Service pour Prometheus dans Grafana en utilisant l'interface utilisateur Prometheus comme proxy d'authentification, vous devez ajouter une source de données à Grafana. Pour ajouter une source de données pour le service géré, procédez comme suit :

  1. Accédez à votre déploiement Grafana, par exemple en recherchant l'URL http://localhost:3000 pour accéder à la page d'accueil de Grafana.

  2. Dans le menu principal de Grafana, sélectionnez Configuration, puis Data Sources (Sources de données).

    Ajout d'une source de données dans Grafana

  3. Sélectionnez Add data source (Ajouter une source de données), puis sélectionnez Prometheus comme base de données de séries temporelles.

    Ajout d'une source de données Prometheus

  4. Dans le champ URL du volet HTTP, saisissez l'URL du service géré pour le service frontend de Prometheus. Si vous avez configuré l'interface utilisateur Prometheus pour qu'elle s'exécute sur le port 9090, l'URL du service pour ce champ est http://frontend.gmp-test.svc:9090.

    Dans le champ Méthode HTTP, sélectionnez GET.

    Si vous disposez de plusieurs sources de données Prometheus, vous pouvez leur attribuer un nom tel que "Managed Prometheus Service". Vous pouvez conserver les valeurs par défaut dans les autres champs.

    Configuration d'une source de données pour Managed Service pour Prometheus.

  5. Cliquez sur Test and Save (Tester et enregistrer), puis recherchez le message "Data source is working".

    Tester la source de données Managed Service pour Prometheus

Utiliser la nouvelle source de données

Vous pouvez maintenant créer des tableaux de bord Grafana en utilisant la nouvelle source de données. Vous pouvez également rediriger les tableaux de bord existants vers la nouvelle source de données. La capture d'écran suivante montre un graphique Grafana qui affiche la métrique up :

Graphique Grafana pour la métrique "Up" de Managed Service pour Prometheus.

Données Managed Service pour Prometheus dans Cloud Monitoring

Managed Service pour Prometheus partage le backend de stockage de données, Monarch, avec Cloud Monitoring. Vous pouvez utiliser tous les outils fournis par Cloud Monitoring avec les données collectées par Managed Service pour Prometheus. Par exemple, vous pouvez utiliser l'Explorateur de métriques, comme décrit dans Cloud Console pour Monitoring.

Lorsque vous travaillez avec des données Managed Service pour Prometheus dans Monitoring, vous utilisez les outils de requête fournis par Cloud Monitoring :

Cloud Monitoring n'est pas compatible avec PromQL, sauf sur la page Managed Service pour Prometheus.

Ressource prometheus_target

Dans Cloud Monitoring, les données de séries temporelles sont écrites par rapport à un type de ressource surveillée. Pour les métriques Prometheus, le type de ressource surveillée est prometheus_target. Ce type de ressource doit spécifier les requêtes de surveillance des données Managed Service pour Prometheus.

La ressource prometheus_target possède les libellés suivants, que vous pouvez utiliser pour filtrer et manipuler les données interrogées :

  • project_id : identifiant du projet Google Cloud associé à cette ressource.
  • location : emplacement physique (région du projet Cloud) dans lequel les données sont collectées et stockées. Cette valeur correspond généralement à la région de votre cluster GKE ou de votre instance Compute Engine. Si les données sont collectées à partir d'un déploiement AWS ou sur site, la valeur peut être la région du projet Cloud la plus proche.
  • cluster : cluster GKE ou concept associé ; peut être vide.
  • namespace : espace de noms GKE ou concept associ ; peut être vide.
  • job : libellé de la tâche de la cible Prometheus, si elle est connue. Il peut être vide pour les résultats d'évaluation de règles.
  • instance : libellé d'instance de la cible Prometheus, si elle est connue. Il peut être vide pour les résultats d'évaluation de règles.

Les valeurs de ces libellés sont définies lors de la collecte.

Cloud Console pour Monitoring

Pour afficher les données Managed Service pour Prometheus en tant que séries temporelles Cloud Monitoring, vous pouvez utiliser l'explorateur de métriques. Pour configurer l'explorateur de métriques afin d'afficher les métriques, procédez comme suit :

  1. Dans Cloud Console, accédez à Monitoring ou cliquez sur le bouton suivant :

    Accéder à Monitoring

  2. Dans le volet de navigation "Surveillance", cliquez sur  Explorateur de métriques.

  3. Spécifiez les données que vous souhaitez faire apparaître dans le graphique. Vous pouvez utiliser l'onglet MQL ou l'onglet Configuration.

    • Pour utiliser l'onglet MQL, procédez comme suit :

      1. Sélectionnez l'onglet MQL.

      2. Saisissez la requête suivante :

        fetch prometheus_target::prometheus.googleapis.com/up/gauge
        
      3. Cliquez sur Exécuter la requête (Run Query).

    • Pour utiliser l'onglet Configuration, procédez comme suit :

      1. Accédez à l'onglet Configuration.

      2. Dans le champ Resource type (Type de ressource), saisissez "prometheus" pour filtrer la liste, puis sélectionnez Prometheus Target (Cible Prometheus).

      3. Dans le champ Metric (Métrique), saisissez "up/" pour filtrer la liste, puis sélectionnez prometheus/up/gauge.

La capture d'écran suivante montre le graphique de l'explorateur de métriques dans l'onglet MQL qui affiche la métrique up :

Graphique de l'explorateur de métriques pour la métrique "up" de Managed Service pour Prometheus

Compatibilité avec les API

Les points de terminaison de l'API HTTP Prometheus suivants sont compatibles avec Managed Service pour Prometheus sous l'URL précédée du préfixe https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/.

  • Les points de terminaison suivants sont entièrement compatibles :

    • /api/v1/query
    • /api/v1/query_range
    • /api/v1/metadata

    Pour plus d'informations sur la compatibilité PromQL, consultez la page Compatibilité de PromQL.

  • Le point de terminaison /api/v1/$label/values n'accepte que le libellé __name__. Cette limitation entraîne l'échec des requêtes de variables label_values($label) dans Grafana. Vous pouvez utiliser label_values($metric, $label) à la place. Ce type de requête est recommandé, car il évite de récupérer des valeurs de libellés sur les métriques qui ne sont pas pertinentes pour le tableau de bord donné.

  • Le point de terminaison /api/v1/series est compatible avec les requêtes GET, mais pas POST. Lorsque vous utilisez le proxy d'interface, le proxy gère cette restriction automatiquement. Vous pouvez également configurer vos sources de données Prometheus dans Grafana pour n'émettre que des requêtes GET.