Journalisation et surveillance des clusters Anthos associés

Cette page vous explique comment exporter les journaux et les métriques d'un cluster Anthos associé vers Cloud Logging et Cloud Monitoring.

Fonctionnement

La suite Google Cloud Operations est la solution d'observabilité intégrée pour Google Cloud. Pour exporter la télémétrie au niveau du cluster depuis un cluster associé vers Google Cloud, vous devez déployer les agents d'exportation Open Source suivants dans votre cluster :

  • Agrégateur de journaux Stackdriver (stackdriver-log-aggregator-*). Objet StatefulSet Fluentd qui envoie des journaux à l'API de Cloud Logging (anciennement Stackdriver Logging).
  • Transfert de journaux Stackdriver (stackdriver-log-forwarder-*). Objet Daemonset Fluentbit qui envoie les journaux de chaque nœud Kubernetes à l'agrégateur de journaux Stackdriver.
  • Collecteur de métriques Stackdriver (stackdriver-prometheus-k8s-*). Objet StatefulSet Prometheus, configuré avec un conteneur side-car d'exportation Stackdriver pour envoyer des métriques Prometheus à l'API de Cloud Monitoring (anciennement Stackdriver Monitoring). Le side-car est un autre conteneur au sein du même pod qui lit les métriques que le serveur Prometheus stocke sur le disque et qui permet de les transmet à l'API de Cloud Monitoring.

Prerequisites

  1. Un projet Google Cloud avec facturation activée. Consultez notre guide des tarifs pour en savoir plus sur les coûts des opérations dans le cloud.

  2. Un cluster Anthos associé, enregistré à l'aide de ce guide. Exécutez la commande suivante pour vérifier que votre cluster est enregistré.

    gcloud container fleet memberships list
    

    Exemple de résultat :

    NAME  EXTERNAL_ID
    eks   ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
    

  3. Environnement local à partir duquel vous pouvez accéder à votre cluster et exécuter des commandes kubectl. Consultez le guide de démarrage rapide de GKE pour savoir comment installer kubectl via gcloud. Exécutez la commande suivante pour vérifier que vous pouvez accéder au cluster associé à l'aide de kubectl.

    kubectl cluster-info
    

    Exemple de résultat :

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Prérequis

  1. Clonez l'exemple de dépôt et accédez au répertoire de ce guide.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. Définissez la variable d'ID du projet sur le projet dans lequel vous avez enregistré votre cluster.

    PROJECT_ID="your-project-id"
    
  3. Créez un compte de service Google Cloud avec les autorisations nécessaires pour écrire des métriques et des journaux sur les API de Cloud Monitoring et de Cloud Logging. Vous ajouterez la clé de ce compte de service aux charges de travail déployées dans la section suivante.

    gcloud iam service-accounts create anthos-lm-forwarder
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    
  4. Créez et téléchargez une clé JSON pour le compte de service que vous venez de créer, puis créez un secret Kubernetes dans votre cluster à l'aide de cette clé.

    gcloud iam service-accounts keys create credentials.json \
    --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
    

Installer l'agent Logging

  1. Accédez au répertoire logging/.

    cd logging/
    
  2. Ouvrir aggregator.yaml Au bas du fichier, définissez les variables suivantes sur la valeur correspondant à votre projet et à votre cluster :

    project_id [PROJECT_ID]
    k8s_cluster_name [CLUSTER_NAME]
    k8s_cluster_location [CLUSTER_LOCATION]
    

    Pour trouver l'emplacement de votre cluster, exécutez la commande suivante en indiquant le nom d'appartenance de votre cluster associé et récupérez l'emplacement qui s'affiche sur /locations/<location>.

    gcloud container fleet memberships describe eks | grep name
    

    Résultat :

    name: projects/my-project/locations/global/memberships/eks
    

  3. Dans aggregator.yaml, sous volumeClaimTemplates/spec, spécifiez le storageClassName PersistentVolumeClaim pour votre cluster : nous avons fourni des valeurs par défaut pour les KEK et AKS afin de vous permettre d'annuler la mise en commentaire si nécessaire. Si vous utilisez EKS, il s'agit de gp2. Pour AKS, il s'agit de default.

    Si vous avez configuré une classe de stockage Kubernetes personnalisée dans AWS ou Azure, souhaitez utiliser une classe de stockage autre que celle par défaut, ou utilisez un autre type de cluster conforme, vous pouvez ajouter votre propre storageClassName. La storageClassName appropriée est basée sur le type de PersistentVolume (PV) qui a été provisionné par un administrateur pour le cluster à l'aide de StorageClass. Pour en savoir plus sur les classes de stockage et les classes de stockage par défaut pour les principaux fournisseurs Kubernetes, consultez la documentation de Kubernetes.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Déployer l'agrégateur de journaux et le redirecteur sur le cluster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. Vérifiez que les pods ont démarré. Vous devriez voir 2 pods d'agrégateur et un pod de redirecteur par nœud de travail Kubernetes. Par exemple, dans un cluster à 4 nœuds, attendez-vous à voir 4 pods de redirecteur.

    kubectl get pods -n kube-system | grep stackdriver-log
    

    Résultat :

    stackdriver-log-aggregator-0                 1/1     Running   0          139m
    stackdriver-log-aggregator-1                 1/1     Running   0          139m
    stackdriver-log-forwarder-2vlxb              1/1     Running   0          139m
    stackdriver-log-forwarder-dwgb7              1/1     Running   0          139m
    stackdriver-log-forwarder-rfrdk              1/1     Running   0          139m
    stackdriver-log-forwarder-sqz7b              1/1     Running   0          139m
    

  6. Obtenez les journaux des agrégateurs et vérifiez que les journaux sont envoyés à Google Cloud.

    kubectl logs stackdriver-log-aggregator-0 -n kube-system
    

    Sortie :

    2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
    

  7. Déployez une application de test sur votre cluster Il s'agit d'un serveur Web HTTP de base avec un "loadgenerator".

    kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  8. Vérifiez que vous pouvez afficher les journaux du cluster associé dans le tableau de bord de Cloud Logging. Accédez à l'explorateur de journaux dans la console Google Cloud:

    Accéder à l'explorateur de journaux

  9. Dans l'explorateur de journaux, copiez l'exemple de requête ci-dessous dans le champ Générateur de requête, en remplaçant ${your-cluster-name} par le nom de votre cluster. Cliquez sur Exécuter la requête. Vous pourrez voir les journaux de cluster récents apparaître sous Résultats de la requête.

    resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
    

Journaux pour le cluster associé

Installer l'agent Monitoring

  1. Quittez le répertoire logging/ et accédez au répertoire monitoring/.

    cd ../monitoring
    
  2. Ouvrir prometheus.yaml Sous stackdriver-prometheus-sidecar/args, définissez les variables suivantes pour qu'elles correspondent à votre environnement.

    "--stackdriver.project-id=[PROJECT_ID]"
    "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
    "--stackdriver.generic.location=[CLUSTER_LOCATION]"
    "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
    
  3. Depuis le fichier prometheus.yaml, sous volumeClaimTemplates/spec, annulez la mise en commentaire du fichier storageClassName correspondant à votre fournisseur de services cloud, comme décrit dans la section "Installer l'agent Logging".

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Déployez l'objet StatefulSet stackdriver-prometheus, configuré avec le side-car exportateur, dans votre cluster.

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. Vérifiez que le pod stackdriver-prometheus est en cours d'exécution.

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    Sortie :
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. Récupérez les journaux du conteneur side-car Stackdriver Prometheus pour vérifier que le pod a démarré.

    kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
    
    Résultat :
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started"
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
    
  7. Vérifiez que les métriques de cluster sont correctement exportées vers Cloud Monitoring. Accédez à l'explorateur de métriques dans la console Google Cloud:

    Accéder à l'explorateur de métriques

  8. Cliquez sur Query editor (Éditeur de requête), puis copiez et exécutez la commande suivante, en remplaçant ${your-project-id} et ${your-cluster-name} par les informations de votre propre projet et cluster. Cliquez ensuite sur Run Query (Exécuter la requête). Vous devriez voir 1.0.

    fetch k8s_container
    | metric 'kubernetes.io/anthos/up'
    | filter
        resource.project_id == '${your-project-id}'
        && (resource.cluster_name =='${your-cluster-name}')
    | group_by 1m, [value_up_mean: mean(value.up)]
    | every 1m
    

Surveillance du cluster associé

Effectuer un nettoyage

  1. Pour supprimer toutes les ressources créées dans ce guide, procédez comme suit :

    kubectl delete -f logging
    kubectl delete -f monitoring
    kubectl delete secret google-cloud-credentials -n kube-system
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    rm -r credentials.json
    gcloud compute service-accounts delete anthos-lm-forwarder
    

Étape suivante

Découvrez Cloud Logging :

Découvrez Cloud Monitoring :