Utiliser la journalisation et la surveillance

Cette page explique comment utiliser Cloud Logging et Cloud Monitoring, ainsi que Prometheus et Grafana pour la journalisation et la surveillance. Pour obtenir un récapitulatif des options de configuration disponibles, consultez la page Présentation de la journalisation et de la surveillance.

Utiliser Cloud Logging et Cloud Monitoring

Les sections suivantes expliquent comment utiliser Logging et Monitoring avec des clusters GKE On-Prem.

Ressources surveillées

Les ressources surveillées correspondent à la manière dont Google représente les ressources, telles que les clusters, les nœuds, les pods et les conteneurs. Pour en savoir plus, consultez la documentation Types de ressources surveillées de Cloud Monitoring.

Pour interroger des journaux et des métriques, vous devez au moins connaître les libellés de ressources suivants :

  • project_id : ID du projet associé au cluster GKE On-Prem.

  • location : région Google Cloud où vous souhaitez stocker les journaux de Logging et les métriques de Monitoring. Il est recommandé de choisir une région à proximité de votre centre de données sur site. Vous avez fourni cette valeur lors de l'installation dans le champ stackdriver.clusterlocation de votre fichier de configuration GKE On-Prem.

  • cluster_name : nom du cluster défini lors de la création du cluster.

    Vous pouvez récupérer la valeur cluster_name du cluster d'administrateur ou d'utilisateur en inspectant la ressource personnalisée Stackdriver :

      kubectl -n kube-system get stackdrivers stackdriver -o yaml | grep 'clusterName:'

Accéder aux données des journaux

Vous pouvez accéder aux journaux à l'aide de la visionneuse de journaux de Cloud Console. Par exemple, pour accéder aux journaux d'un conteneur, procédez comme suit :

  1. Dans Cloud Console, ouvrez la visionneuse de journaux pour votre projet.
  2. Recherchez les journaux d'un conteneur comme suit :
    1. Cliquez sur la boîte déroulante du catalogue de journaux dans l'angle supérieur gauche, puis sélectionnez Conteneur Kubernetes.
    2. Sélectionnez le nom du cluster, l'espace de noms et un conteneur dans la hiérarchie.

Créer des tableaux de bord pour surveiller l'état du cluster

Par défaut, les clusters GKE On-Prem sont configurés pour surveiller les métriques du système et des conteneurs. Après avoir créé un cluster (d'administrateur ou d'utilisateur), il est recommandé de créer les tableaux de bord suivants avec Monitoring pour permettre à votre équipe en charge des opérations GKE On-Prem de surveiller l'état du cluster :

Cette section explique comment créer ces tableaux de bord. Pour plus d'informations sur le processus de création de tableau de bord décrit dans les sections suivantes, consultez la page Gérer les tableaux de bord à l'aide d'API.

Prérequis

Votre compte Google doit disposer des autorisations suivantes pour créer des tableaux de bord :

  • monitoring.dashboards.create
  • monitoring.dashboards.delete
  • monitoring.dashboards.update

Vous obtiendrez ces autorisations si votre compte dispose de l'un des rôles suivants. Vous pouvez vérifier vos autorisations (dans Cloud Console) :

  • monitoring.dashboardEditor
  • monitoring.editor
  • Projet editor
  • Projet owner

Créer un tableau de bord d'état du plan de contrôle

Le plan de contrôle GKE On-Prem comprend le serveur d'API, le programmeur, le gestionnaire du contrôleur et etcd. Pour surveiller l'état du plan de contrôle, créez un tableau de bord qui surveille l'état de ces composants.

  1. Téléchargez la configuration du tableau de bord : control-plane-status.json

  2. Créez un tableau de bord personnalisé avec le fichier de configuration en exécutant la commande suivante :

    gcloud monitoring dashboards create --config-from-file=control-plane-status.json
  3. Dans Google Cloud Console, sélectionnez Monitoring ou utilisez le bouton suivant :

    Accéder à Monitoring

  4. Sélectionnez Ressources > Tableaux de bord, puis affichez le tableau de bord intitulé état du plan de contrôle GKE On-Prem. L'état du plan de contrôle de chaque cluster d'utilisateur est collecté à partir d'espaces de noms distincts dans le cluster d'administrateur. Le champ namespace_name correspond au nom du cluster d'utilisateur.

    Un objectif de niveau de service (SLO, Service Level Objective) de 0,999 est défini dans chaque graphique.

  5. Vous pouvez également créer des règles d'alerte.

Créer un tableau de bord d'état du pod

Pour créer un tableau de bord incluant la phase de chaque pod, ainsi que les temps de redémarrage et l'utilisation des ressources de chaque conteneur, procédez comme suit.

  1. Téléchargez la configuration du tableau de bord : pod-status.json

  2. Créez un tableau de bord personnalisé avec le fichier de configuration en exécutant la commande suivante :

    gcloud monitoring dashboards create --config-from-file=pod-status.json
  3. Dans Google Cloud Console, sélectionnez Monitoring ou utilisez le bouton suivant :

    Accéder à Monitoring

  4. Sélectionnez Ressources > Tableaux de bord, puis affichez le tableau de bord intitulé état du pod GKE On-Prem.

  5. Vous pouvez également créer des règles d'alerte.

Créer un tableau de bord d'état du nœud

Pour créer un tableau de bord d'état du nœud GKE On-Prem afin de surveiller l'état du nœud, le processeur, la mémoire et le disque, procédez comme suit :

  1. Téléchargez la configuration du tableau de bord : node-status.json

  2. Créez un tableau de bord personnalisé avec le fichier de configuration en exécutant la commande suivante :

    gcloud monitoring dashboards create --config-from-file=node-status.json
  3. Dans Google Cloud Console, sélectionnez Monitoring ou utilisez le bouton suivant :

    Accéder à Monitoring

  4. Sélectionnez Ressources > Tableaux de bord, puis affichez le tableau de bord intitulé état du nœud GKE On-Prem.

  5. Vous pouvez également créer des règles d'alerte.

Accéder aux données des métriques

L'explorateur de métriques vous permet de choisir parmi plus de 1 500 métriques. Pour y accéder, procédez comme suit :

  1. Dans Google Cloud Console, sélectionnez Monitoring ou utilisez le bouton suivant :

    Accéder à Monitoring

  2. Sélectionnez Ressources > Explorateur de métriques.

Accéder aux métadonnées Monitoring

Les métadonnées sont utilisées indirectement via les métriques. Dans l'explorateur de métriques Monitoring, des options vous permettent de filtrer les métriques par metadata.systemLabels et metadata.userLabels. Les libellés système correspondent à des libellés tels que le nom du nœud et le nom du service pour les pods. Les libellés utilisateur sont des libellés attribués aux pods dans les fichiers YAML Kubernetes dans la section "Métadonnées" de la spécification du pod.

Limites de quotas Cloud Monitoring par défaut

La surveillance GKE On-Prem est limitée par défaut à 6 000 appels d'API par minute pour chaque projet. Si vous dépassez cette limite, il est possible que vos métriques ne s'affichent pas. Si vous avez besoin d'une limite de surveillance plus élevée, faites-en la demande via Google Cloud Console.

Problème connu : condition d'erreur Cloud Monitoring

(ID du problème 159761921)

Dans certaines conditions, le pod Cloud Monitoring par défaut, déployé par défaut dans chaque nouveau cluster, peut ne plus répondre. Lors de la mise à niveau des clusters, par exemple, les données de stockage peuvent être corrompues lorsque des pods de statefulset/prometheus-stackdriver-k8s sont redémarrés.

Plus précisément, le pod de surveillance stackdriver-prometheus-k8s-0 peut tourner en boucle lorsque des données corrompues empêchent l'écriture de prometheus-stackdriver-sidecar sur l'espace de stockage du cluster PersistentVolume.

Vous pouvez diagnostiquer et récupérer manuellement l'erreur en suivant les étapes ci-dessous.

Diagnostiquer l'échec de Cloud Monitoring

Lorsque le pod de surveillance a échoué, les journaux indiquent les éléments suivants :

{"log":"level=warn ts=2020-04-08T22:15:44.557Z caller=queue_manager.go:534 component=queue_manager msg=\"Unrecoverable error sending samples to remote storage\" err=\"rpc error: code = InvalidArgument desc = One or more TimeSeries could not be written: One or more points were written more frequently than the maximum sampling period configured for the metric.: timeSeries[0-114]; Unknown metric: kubernetes.io/anthos/scheduler_pending_pods: timeSeries[196-198]\"\n","stream":"stderr","time":"2020-04-08T22:15:44.558246866Z"}

{"log":"level=info ts=2020-04-08T22:15:44.656Z caller=queue_manager.go:229 component=queue_manager msg=\"Remote storage stopped.\"\n","stream":"stderr","time":"2020-04-08T22:15:44.656798666Z"}

{"log":"level=error ts=2020-04-08T22:15:44.663Z caller=main.go:603 err=\"corruption after 29032448 bytes: unexpected non-zero byte in padded page\"\n","stream":"stderr","time":"2020-04-08T22:15:44.663707748Z"}

{"log":"level=info ts=2020-04-08T22:15:44.663Z caller=main.go:605 msg=\"See you next time!\"\n","stream":"stderr","time":"2020-04-08T22:15:44.664000941Z"}

Récupération à partir de l'erreur Cloud Monitoring

Pour récupérer Cloud Monitoring manuellement :

  1. Arrêtez la surveillance du cluster. Réduisez l'opérateur stackdriver pour empêcher la réconciliation de la surveillance :

    kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system scale deployment stackdriver-operator --replicas 0

  2. Supprimez les charges de travail du pipeline de surveillance :

    kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system delete statefulset stackdriver-prometheus-k8s

  3. Supprimez les PersistentVolumeClaims (PVC) du pipeline de surveillance :

    kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system delete pvc -l app=stackdriver-prometheus-k8s

  4. Redémarrez la surveillance du cluster. Effectuez un scaling de l'opérateur Stackdriver pour réinstaller un nouveau pipeline de surveillance et reprendre la réconciliation :

    kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system scale deployment stackdriver-operator --replicas=1

Prometheus et Grafana

Les sections suivantes expliquent comment utiliser Prometheus et Grafana avec des clusters GKE On-Prem.

Activer Prometheus et Grafana

Dans GKE 1.2 et les versions ultérieures, vous pouvez activer ou désactiver Prometheus et Grafana. Dans les nouveaux clusters d'utilisateur, Prometheus et Grafana sont désactivés par défaut.

  1. Votre cluster d'utilisateur dispose d'un objet Monitoring nommé monitoring-sample. Ouvrez l'objet à modifier :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] edit \
       monitoring monitoring-sample --namespace kube-system

    [USER_CLUSTER_KUBECONFIG] est le fichier kubeconfig pour votre cluster d'utilisateur.

  2. Pour activer Prometheus et Grafana, définissez enablePrometheus sur true. Pour les désactiver, définissez enablePrometheus sur false :

    apiVersion: addons.k8s.io/v1alpha1
    kind: Monitoring
    metadata:
     labels:
       k8s-app: monitoring-operator
     name: monitoring-sample
     namespace: kube-system
    spec:
     channel: stable
     ...
     enablePrometheus: true
  3. Fermez la session de modification pour enregistrer les modifications.

Problème connu

Lors de la mise à niveau des clusters d'utilisateur, Prometheus et Grafana sont automatiquement désactivés. Cependant, les données de configuration et de métriques sont conservées.

Pour contourner ce problème, ouvrez l'objet monitoring-sample après la mise à niveau pour y apporter des modifications, puis définissez enablePrometheus sur true.

Accéder aux métriques de surveillance à partir des tableaux de bord Grafana

Grafana affiche les métriques collectées à partir de vos clusters. Pour les consulter, vous devez accéder aux tableaux de bord de Grafana :

  1. Obtenez le nom du pod Grafana qui s'exécute dans l'espace de noms kube-system d'un cluster d'utilisateur :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods

    [USER_CLUSTER_KUBECONFIG] est le fichier kubeconfig du cluster d'utilisateur.

  2. Le conteneur du pod Grafana écoute sur le port TCP 3000. Transférez un port local vers le port 3000 du pod afin de pouvoir afficher les tableaux de bord de Grafana depuis un navigateur Web.

    Par exemple, supposons que le nom du pod soit grafana-0. Pour transférer le port 50000 vers le port 3000 du pod, saisissez la commande suivante :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system port-forward grafana-0 50000:3000
  3. Dans votre navigateur Web, accédez à la page http://localhost:50000. Le tableau de bord du cluster d'utilisateur doit se charger sur la page d'accueil de Grafana.

  4. Pour accéder à d'autres tableaux de bord, cliquez sur le menu déroulant Home (Accueil) dans l'angle supérieur gauche de la page.

Pour obtenir un exemple d'utilisation de Grafana, consultez Créer un tableau de bord Grafana.

Accéder aux alertes

Prometheus Alertmanager collecte les alertes du serveur Prometheus. Vous pouvez afficher ces alertes dans un tableau de bord Grafana. Pour ce faire, vous devez accéder au tableau de bord :

  1. Le conteneur du pod alertmanager-0 écoute sur le port TCP 9093. Transférez un port local vers le port 9093 du pod :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \
       -n kube-system alertmanager-0 50001:9093
  2. Dans votre navigateur Web, accédez à la page http://localhost:50001.

Modifier la configuration de Prometheus Alertmanager

Vous pouvez modifier la configuration par défaut de Prometheus Alertmanager en modifiant le fichier monitoring.yaml de votre cluster d'utilisateur. Vous devez effectuer cette opération si vous souhaitez diriger les alertes vers une destination spécifique au lieu de les conserver dans le tableau de bord. Pour apprendre à configurer Alertmanager, consultez la documentation sur la configuration de Prometheus.

Pour modifier la configuration Alertmanager, procédez comme suit :

  1. Créez une copie du fichier manifeste monitoring.yaml du cluster d'utilisateur :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \
       get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. Pour configurer Alertmanager, modifiez les champs sous spec.alertmanager.yml. Lorsque vous avez terminé, enregistrez le fichier manifeste modifié.

  3. Appliquez le fichier manifeste à votre cluster :

    kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml

Effectuer le scaling des ressources Prometheus

La configuration de la surveillance par défaut accepte jusqu'à cinq nœuds. Pour les clusters plus volumineux, vous pouvez ajuster les ressources du serveur Prometheus. Nous vous recommandons d'utiliser des cœurs de processeur de 50 milliCPU et 500 Mio de mémoire par nœud de cluster. Assurez-vous que votre cluster contient deux nœuds, chacun disposant de suffisamment de ressources pour s'adapter à Prometheus. Pour en savoir plus, consultez Redimensionner un cluster d'utilisateur.

Pour modifier les ressources du serveur Prometheus, procédez comme suit :

  1. Créez une copie du fichier manifeste monitoring.yaml du cluster d'utilisateur :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. Pour remplacer des ressources, modifiez les champs sous spec.resourceOverride. Lorsque vous avez terminé, enregistrez le fichier manifeste modifié. Exemple :

    spec:
      resourceOverride:
      - component: Prometheus
        resources:
          requests:
            cpu: 300m
            memory: 3000Mi
          limits:
            cpu: 300m
            memory: 3000Mi
    
  3. Appliquez le fichier manifeste à votre cluster :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml

Créer un tableau de bord Grafana

Vous avez déployé une application qui expose une métrique et vérifié que celle-ci est exposée et que Prometheus l'extrait. Vous pouvez désormais ajouter la métrique au niveau de l'application dans un tableau de bord Grafana personnalisé.

Pour créer un tableau de bord Grafana, procédez comme suit :

  1. Si nécessaire, accédez à Grafana.
  2. Dans le tableau de bord de la page d'accueil, cliquez sur le menu déroulant Home (Accueil) dans l'angle supérieur gauche de la page.
  3. Dans le menu de droite, cliquez sur New dashboard (Nouveau tableau de bord).
  4. Dans la section New panel (Nouveau panneau), cliquez sur Graph (Graphique). Un tableau de bord de graphique vide s'affiche.
  5. Cliquez sur Panel title (Titre du panneau), puis sur Edit (Modifier). Le panneau Graph (Graphique) du bas s'ouvre dans l'onglet Metrics (Métriques).
  6. Dans le menu déroulant Data Source (Source de données), sélectionnez user (utilisateur). Cliquez sur Add query (Ajouter une requête), puis saisissez foo dans le champ search (recherche).
  7. Cliquez sur le bouton Back to dashboard (Revenir au tableau de bord) dans l'angle supérieur droit de l'écran. Votre tableau de bord s'affiche.
  8. Pour enregistrer le tableau de bord, cliquez sur Save dashboard (Enregistrer le tableau de bord) dans l'angle supérieur droit de l'écran. Choisissez un nom pour le tableau de bord, puis cliquez sur Save (Enregistrer).

Désactiver la surveillance au sein du cluster

Pour désactiver la surveillance au sein du cluster, annulez les modifications apportées à l'objet monitoring-sample :

  1. Ouvrez l'objet monitoring-sample à modifier :

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
       monitoring monitoring-sample --namespace kube-system

    Remplacez USER_CLUSTER_KUBECONFIG par le fichier kubeconfig de votre cluster d'utilisateur.

  2. Pour désactiver Prometheus et Grafana, définissez enablePrometheus sur false.

       apiVersion: addons.k8s.io/v1alpha1
       kind: Monitoring
       metadata:
         labels:
           k8s-app: monitoring-operator
         name: monitoring-sample
         namespace: kube-system
       spec:
         channel: stable
         ...
         enablePrometheus: false
    
  3. Fermez la session de modification pour enregistrer les modifications.

  4. Vérifiez que les objets StatefulSet prometheus-0, prometheus-1 et grafana-0 ont été supprimés :

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods --namespace kube-system

Exemple : Ajouter des métriques au niveau de l'application dans un tableau de bord Grafana

Les sections suivantes vous expliquent comment ajouter des métriques pour une application. Dans cette section, vous allez effectuer les tâches suivantes :

  • Déployer un exemple d'application qui expose une métrique nommée foo
  • Vérifier que Prometheus expose et extrait la métrique
  • Créer un tableau de bord Grafana personnalisé

Déployer l'exemple d'application

L'exemple d'application s'exécute dans un seul pod. Le conteneur du pod affiche une métrique, foo, avec une valeur constante de 40.

Créez le fichier manifeste de pod suivant, pro-pod.yaml :

apiVersion: v1
kind: Pod
metadata:
  name: prometheus-example
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
    prometheus.io/path: '/metrics'
spec:
  containers:
  - image: k8s.gcr.io/prometheus-dummy-exporter:v0.1.0
    name: prometheus-example
    command:
    - /bin/sh
    - -c
    - ./prometheus_dummy_exporter --metric-name=foo --metric-value=40 --port=8080

Appliquez ensuite le fichier manifeste du pod à votre cluster d'utilisateur :

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f pro-pod.yaml

Vérifier que la statistique est exposée et extraite

  1. Le conteneur du pod prometheus-example écoute sur le port TCP 8080. Transférez un port local vers le port 8080 du pod :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
  2. Pour vérifier que l'application expose la métrique, exécutez la commande suivante :

    curl localhost:50002/metrics | grep foo
    

    La commande renvoie le résultat suivant :

    # HELP foo Custom metric
    # TYPE foo gauge
    foo 40
  3. Le conteneur du pod prometheus-0 écoute sur le port TCP 9090. Transférez un port local vers le port 9090 du pod :

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
  4. Pour vérifier que Prometheus extrait la métrique, accédez à la page http://localhost:50003/targets qui doit vous rediriger vers le pod prometheus-0 du groupe cible prometheus-io-pods.

  5. Pour afficher les métriques dans Prometheus, accédez à la page http://localhost:50003/graph. Dans le champ search (recherche), saisissez foo, puis cliquez sur Execute (Exécuter). La page doit afficher la métrique.