Exécuter une requête avec Grafana

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 et comment utiliser Grafana pour récupérer et utiliser les données que vous avez collectées.

Toutes les interfaces de requête de Managed Service pour Prometheus sont configurées pour récupérer les données de Monarch à l'aide de l'API Cloud Monitoring. En interrogeant Monarch au lieu d'interroger les données des serveurs Prometheus locaux, vous obtenez une surveillance globale à grande échelle.

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. Vous pouvez ignorer cette étape si vous souhaitez uniquement interroger des métriques Cloud Monitoring à l'aide de PromQL.

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 la CLI gcloud pour faire référence à l'ID de votre projet Google Cloud :

      gcloud config set project PROJECT_ID
      
    • Configurez la CLI 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 NAMESPACE_NAME pour les ressources que vous créez dans le cadre de l'exemple d'application :

kubectl create ns NAMESPACE_NAME

Vérifier les identifiants du compte de service

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

Lors de l'exécution sur GKE, Managed Service pour Prometheus récupère automatiquement les identifiants de l'environnement en fonction du compte de service Compute Engine par défaut. Le compte de service par défaut dispose des autorisations nécessaires, monitoring.metricWriter et monitoring.viewer, par défaut. Si vous n'utilisez pas Workload Identity et que vous avez précédemment supprimé l'un de ces rôles du compte de service de nœud par défaut, vous devrez rajouter ces autorisations manquantes avant de continuer.

Si vous n'exécutez pas sur GKE, consultez la section Fournir les identifiants explicitement.

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 NAMESPACE_NAME :

gcloud config set project PROJECT_ID \
&&
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[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  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 lire 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.

Pour autoriser votre compte de service à lire les données de métriques d'un champ d'application de métriques multiprojets, suivez ces instructions, puis consultez la section Modifier le projet interrogé.

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

Déboguer votre configuration Workload Identity

Si vous rencontrez des difficultés pour utiliser Workload Identity, consultez la documentation sur la vérification de la configuration de Workload Identity et le guide de dépannage de Workload Identity.

Les fautes de frappe et les copier-coller partiels sont les sources d'erreurs les plus courantes lors de la configuration de Workload Identity. Nous vous recommandons vivement d'utiliser les variables modifiables et les icônes de copier-coller cliquables intégrées dans les exemples de code figurant dans ces instructions.

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 structure en lecture seule qui vous permet d'interroger les données de métriques appartenant à plusieurs projets Google Cloud. Chaque champ d'application des métriques est hébergé par un projet Google Cloud désigné, appelé projet de champ d'application.

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 de champ d'application peut avoir plusieurs projets surveillés dans son champ d'application des métriques, et les métriques et les configurations de tous les projets surveillés dans le champ d'application des métriques sont visibles dans le projet de champ d'application. Un projet surveillé peut également appartenir à plusieurs champs d'application des métriques.

Lorsque vous interrogez les métriques d'un projet effectuant une surveillance et si ce projet héberge un champ d'application des métriques multiprojets, vous pouvez extraire les données de plusieurs projets. Si le champ d'application des métriques contient tous vos projets, vos requêtes et règles sont évaluées globalement.

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 d'un champ d'application de métriques multiprojets, consultez la section Afficher les métriques de plusieurs projets.

Données Managed Service pour Prometheus dans Cloud Monitoring

Le moyen le plus simple de vérifier que vos données Prometheus sont exportées consiste à utiliser la page de l'Explorateur de métriques Cloud Monitoring dans Google Cloud Console, qui est compatible avec PromQL. Pour obtenir des instructions, consultez la page Interroger des données à l'aide de PromQL dans Cloud Monitoring.

Vous pouvez également importer vos tableaux de bord Grafana dans Cloud Monitoring. Vous pouvez ainsi continuer à utiliser les tableaux de bord Grafana créés par la communauté ou sans avoir à configurer ni déployer une instance Grafana.

Grafana

Managed Service pour Prometheus utilise la source de données Prometheus intégrée pour Grafana, ce qui signifie que vous pouvez continuer à utiliser n'importe quel tableau de bord Grafana créé par la communauté ou personnel sans aucune modification.

Déployer Grafana, si nécessaire

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 NAMESPACE_NAME apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/6ebc1afa8e609febe8d687bb7fa6bd2375e46db1/examples/grafana.yaml
    
  2. Transférez le service grafana vers votre ordinateur local. Cet exemple transfère le service vers le port 3000 :

    kubectl -n NAMESPACE_NAME 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.

Ensuite, ajoutez une nouvelle source de données Prometheus à Grafana en procédant 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 Connections, 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. Donnez un nom à la source de données. Définissez le champ URL sur http://localhost:9090, puis sélectionnez Enregistrer et tester. Vous pouvez ignorer les erreurs indiquant que la source de données n'est pas configurée correctement.

  5. Copiez l'URL du service local pour votre déploiement, qui se présentera comme suit :

    http://grafana.NAMESPACE_NAME.svc:3000
    

Configurer et authentifier la source de données Grafana

Les API Google Cloud nécessitent toutes une authentification via OAuth2. Toutefois, Grafana n'est pas compatible avec l'authentification OAuth2 pour les comptes de service utilisés avec les sources de données Prometheus. Pour utiliser Grafana avec Managed Service pour Prometheus, vous devez utiliser le synchronisateur de sources de données pour générer des identifiants OAuth2 pour votre compte de service et les synchroniser avec Grafana via l'API de source de données Grafana.

Vous devez utiliser le synchronisateur de sources de données pour configurer et autoriser Grafana à interroger des données à l'échelle mondiale. Si vous ne suivez pas ces étapes, Grafana n'exécute des requêtes que sur les données du serveur Prometheus local.

Le synchronisateur de sources de données est un outil d'interface de ligne de commande qui utilise un contrôleur CronJob Kubernetes pour synchroniser à distance les valeurs de la configuration avec une source de données Grafana Prometheus spécifiée. Cela garantit que les éléments suivants sont correctement configurés pour votre source de données Grafana :

  • Authentification, effectuée en actualisant périodiquement un jeton d'accès OAuth2
  • API Cloud Monitoring définie comme URL du serveur Prometheus
  • Méthode HTTP définie sur GET
  • Type et version de Prometheus définis sur 2.40.x comme version minimale
  • Les valeurs du délai d'expiration HTTP et de la requête sont définies sur 2 minutes

Le synchronisateur de sources de données utilise le compte de service local de votre cluster pour générer périodiquement un jeton d'accès à l'API Google Cloud, avec les autorisations IAM nécessaires pour interroger les données Cloud Monitoring. Comme les jetons d'accès à l'API Google Cloud ont une durée de vie d'une heure, le synchronisateur de source de données s'exécute toutes les 30 minutes pour garantir que vous disposez d'une connexion authentifiée ininterrompue entre Grafana et l'API Cloud Monitoring.

Pour déployer et exécuter le synchronisateur de sources de données, procédez comme suit :

  1. Choisissez un projet, un cluster et un espace de noms dans lesquels déployer le synchronisateur de sources de données. Nous vous recommandons de déployer le synchroniseur de sources de données dans un cluster appartenant au projet de surveillance d'un champ d'application de métriques multiprojets. Le synchronisateur de sources de données utilise le projet Google Cloud configuré comme projet de surveillance.

    Ensuite, assurez-vous de bien configurer et autoriser le synchroniseur de sources de données :

    Déterminez ensuite si vous devez accorder davantage d'autorisations au synchroniseur de sources de données pour les requêtes multiprojets :

  2. Identifiez l'URL de votre instance Grafana, par exemple https://yourcompanyname.grafana.net pour un déploiement Grafana Cloud ou http://grafana.NAMESPACE_NAME.svc:3000 pour une instance locale configurée à l'aide du fichier YAML de déploiement de test.

    Si vous déployez Grafana localement et que votre cluster est configuré pour sécuriser tout le trafic dans le cluster à l'aide de TLS, vous devez utiliser https:// dans votre URL et vous authentifier à l'aide de l'une des options d'authentification TLS compatibles.

  3. Choisissez la source de données Prometheus Grafana que vous souhaitez utiliser pour Managed Service pour Prometheus, qui peut être une nouvelle source ou une source de données préexistante, puis recherchez et notez l'UID de la source de données. L'UID de la source de données se trouve dans la dernière partie de l'URL lorsque vous explorez ou configurez une source de données. Exemple : https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID. Ne pas copier l'intégralité de l'URL de la source de données.. Ne copiez que l'identifiant unique dans l'URL.

    Recherchez un ID unique de source de données dans Grafana.

  4. Configurez un compte de service Grafana en créant le compte de service et en générant un jeton que le compte utilisera:

    1. Dans la barre latérale de navigation de Grafana, cliquez sur Administration > Utilisateurs et accès > Comptes de service.
    2. Créez le compte de service en cliquant sur Ajouter un compte de service, en lui attribuant un nom et en lui attribuant le rôle "Administrateur" dans Grafana.

    3. Cliquez sur Ajouter un jeton de compte de service.

    4. Définissez le délai d'expiration du jeton sur "Aucun délai d'expiration", cliquez sur Générer un jeton, puis copiez le jeton généré dans le presse-papiers pour l'utiliser en tant que GRAFANA_SERVICE_ACCOUNT_TOKEN à l'étape suivante:

      Générer et enregistrer un jeton de compte de service dans Grafana.

  5. Configurez les variables d'environnement suivantes à l'aide des résultats des étapes précédentes :

    # These values are required.
    PROJECT_ID=SCOPING_PROJECT_ID # The value from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The value from step 2. This is a URL.
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The value from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The value from step 4.
    
  6. Exécutez la commande suivante pour créer un contrôleur CronJob qui actualise la source de données lors de l'initialisation, puis toutes les 30 minutes : Si vous utilisez Workload Identity, la valeur de NAMESPACE_NAME doit correspondre au même espace de noms que celui que vous avez précédemment associé au compte de service.

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/main/cmd/datasource-syncer/datasource-syncer.yaml \
    | sed 's|$DATASOURCE_UIDS|'"$DATASOURCE_UIDS"'|; s|$GRAFANA_API_ENDPOINT|'"$GRAFANA_API_ENDPOINT"'|; s|$GRAFANA_API_TOKEN|'"$GRAFANA_API_TOKEN"'|; s|$PROJECT_ID|'"$PROJECT_ID"'|;' \
    | kubectl -n NAMESPACE_NAME apply -f -
    
  7. Accédez à la source de données Grafana que vous venez de configurer, puis vérifiez que la valeur de l'URL du serveur Prometheus commence par https://monitoring.googleapis.com. Vous devrez peut-être actualiser la page. Une fois la validation effectuée, accédez au bas de la page et sélectionnez Enregistrer et tester. Vous devez sélectionner ce bouton au moins une fois pour vous assurer que la saisie semi-automatique des étiquettes dans Grafana fonctionne.

Exécuter des requêtes à l'aide de Grafana

Vous pouvez maintenant créer des tableaux de bord Grafana et exécuter des requêtes à l'aide de la source de données configurée. 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.

Pour en savoir plus sur l'interrogation des métriques système Google Cloud à l'aide de PromQL, consultez la page PromQL pour les métriques Cloud Monitoring.

Exécuter le synchronisateur de sources de données en dehors de GKE

Vous pouvez ignorer cette section si vous exécutez le synchronisateur de sources de données dans un cluster Google Kubernetes Engine. Si vous rencontrez des problèmes d'authentification sur GKE, consultez la page Vérifier les identifiants du compte de service.

Lors de l'exécution sur GKE, le synchronisateur de sources de données récupère automatiquement les identifiants de l'environnement en fonction du compte de service du nœud ou de la configuration de Workload Identity. Dans les clusters Kubernetes non GKE, les identifiants doivent être explicitement fournis au synchronisateur de source de données à l'aide de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

  1. Définissez le contexte de votre projet cible :

    gcloud config set project PROJECT_ID
    
  2. 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.

  3. 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 \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/iam.serviceAccountTokenCreator
    

  4. 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
    
  5. Définissez le chemin d'accès du fichier de clé à l'aide de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

Autoriser le synchroniseur de sources de données à surveiller plusieurs projets

Managed Service pour Prometheus est compatible avec la surveillance multi-projets à l'aide de champs d'application de métriques. Si votre projet local est votre projet de champ d'application et que vous avez suivi les instructions pour vérifier ou configurer un compte de service pour le projet local, les requêtes multi-projets devraient fonctionner sans autre configuration.

Si votre projet local n'est pas votre projet de champ d'application, vous devez autoriser le compte de service Compute par défaut du projet local ou votre compte de service Workload Identity pour disposer de l'accès monitoring.viewer au projet de champ d'application. Transmettez ensuite l'ID du projet de champ d'application en tant que valeur de la variable d'environnement PROJECT_ID.

Si vous utilisez le compte de service Compute Engine default, vous pouvez effectuer l'une des opérations suivantes :

Pour accorder à un compte de service les autorisations nécessaires pour accéder à un autre projet Google 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. Lors de la configuration du synchroniseur de sources de données, transmettez l'ID du projet de champ d'application en tant que valeur de la variable d'environnement PROJECT_ID.

Inspecter la tâche cron

Pour inspecter la tâche cron et vous assurer que toutes les variables sont correctement définies, exécutez la commande suivante :

kubectl describe cronjob datasource-syncer

Pour afficher les journaux de la tâche qui configure initialement Grafana, exécutez la commande suivante immédiatement après l'application du fichier datasource-syncer.yaml :

kubectl logs job.batch/datasource-syncer-init

Suppression

Pour désactiver la tâche Cron du synchronisateur de sources de données, exécutez la commande suivante :

kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/main/cmd/datasource-syncer/datasource-syncer.yaml

La désactivation du synchronisateur de sources de données cesse de mettre à jour le fichier Grafana associé avec de nouveaux identifiants d'authentification et, par conséquent, l'interrogation du service géré pour Prometheus ne fonctionne plus.

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/.

Pour obtenir la documentation complète, consultez la documentation de référence de l'API Cloud Monitoring.

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

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

    • /api/v1/query
    • /api/v1/query_range
    • /api/v1/metadata
    • /api/v1/labels
    • /api/v1/query_exemplars
  • Le point de terminaison /api/v1/label/<label_name>/values ne fonctionne que si l'étiquette __name__ est fournie en l'utilisant en tant que valeur <label_name> ou comme correspondance exacte dans le sélecteur de séries. Par exemple, les appels suivants sont entièrement compatibles :

    • /api/v1/label/__name__/values
    • /api/v1/label/__name__/values?match[]={__name__=~".*metricname.*"}
    • /api/v1/label/labelname/values?match[]={__name__="metricname"}

    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 d'étiquettes 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 synchronisateur de sources de données ou le proxy d'interface, cette restriction est gérée automatiquement. Vous pouvez également configurer vos sources de données Prometheus dans Grafana pour n'émettre que des requêtes GET.

Étapes suivantes