Exporter des métriques Connect Agent vers Cloud Monitoring

Cette page explique comment exporter des métriques Connect Agent vers Cloud Monitoring à partir de Google Distributed Cloud, de GKE sur AWS ou de tout autre cluster Kubernetes enregistré.

Présentation

Dans un cluster Google Distributed Cloud ou GKE sur AWS, Prometheus collecte les métriques et les stocke localement dans le cluster. Enregistrer un cluster situé en dehors de Google Cloud dans un parc a pour effet de créer un déploiement appelé Connect Agent dans le cluster. Prometheus collecte des métriques utiles auprès de Connect Agent, telles que les erreurs de connexion à Google et le nombre de connexions ouvertes. Pour rendre ces métriques disponibles dans Cloud Monitoring, vous devez :

  • Exposer Connect Agent à l'aide d'un service.
  • Déployer prometheus-to-sd, un composant simple qui extrait les métriques Prometheus et les exporte vers Cloud Monitoring.

Vous pouvez ensuite afficher les métriques à l'aide de Monitoring dans la console Google Cloud ou en transférant le port du service et en utilisant curl.

Créer une variable pour l'espace de noms de Connect Agent

Connect Agent s'exécute généralement dans l'espace de noms gke-connect.

Connect Agent possède le libellé hub.gke.io/project. Le serveur HTTP écoute sur le port 8080.

Créez une variable, AGENT_NS, pour l'espace de noms :

AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)

Remplacez l'élément suivant :

  • KUBECONFIG : le fichier kubeconfig de votre cluster
  • PROJECT_ID : ID du projet

Exposer le déploiement de Connect Agent

  1. Copiez la configuration suivante dans un fichier YAML nommé gke-connect-agent.yaml. Cette configuration crée un service, gke-connect-agent, qui expose le déploiement de l'agent Connect.

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: gke-connect-agent
      name: gke-connect-agent
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        app: gke-connect-agent
      type: ClusterIP
  2. Appliquez le fichier YAML à l'espace de noms du Connect Agent de votre cluster, où KUBECONFIG correspond au chemin d'accès du fichier kubeconfig du cluster :

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. Associez le rôle IAM roles/monitoring.metricWriter au compte de service Google du parc :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"

Déployer prometheus-to-sd

  1. Copiez la configuration suivante dans un fichier YAML nommé prometheus-to-sd.yaml, où :

    • PROJECT_ID correspond à votre ID de projet Google Cloud. Découvrez comment identifier cette valeur.
    • CLUSTER_NAME correspond au cluster Kubernetes dans lequel Connect Agent est exécuté.
    • REGION est l'emplacement géographiquement proche de l'emplacement d'exécution de votre cluster. Choisissez une zone Google Cloud géographiquement proche de l'emplacement physique du cluster.
    • ZONE est l'emplacement à proximité de votre centre de données sur site. Choisissez une zone Google Cloud géographiquement proche de l'endroit où le trafic s'écoule.

    Cette configuration crée deux ressources :

    • Un fichier ConfigMap, prom-to-sd-user-config, qui déclare plusieurs variables à utiliser par le déploiement.
    • Un déploiement, prometheus-to-monitoring, qui exécute prometheus-to-sd dans un seul pod.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prom-to-sd-user-config
    data:
      # The project that the Connect Agent uses. Accepts ID or number.
      project: PROJECT_ID
      # A name for the cluster, which shows up in Cloud Monitoring.
      cluster_name: CLUSTER_NAME
      # cluster_location must be valid (e.g. us-west1-a); shows up in Cloud Monitoring.
      cluster_location: REGION
      # A zone name to report (e.g. us-central1-a).
      zone: ZONE
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: prometheus-to-monitoring
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          run: prometheus-to-monitoring
      template:
        metadata:
          labels:
            run: prometheus-to-monitoring
        spec:
          containers:
            - args:
                - /monitor
                # 'gke-connect-agent' is the text that will show up in the Cloud Monitoring metric name.
                - --source=gke-connect-agent:http://gke-connect-agent:8080
                - --monitored-resource-types=k8s
                - --stackdriver-prefix=custom.googleapis.com
                - --project-id=$(PROM_PROJECT)
                - --cluster-name=$(PROM_CLUSTER_NAME)
                - --cluster-location=$(PROM_CLUSTER_LOCATION)
                - --zone-override=$(PROM_ZONE)
                # A node name to report. This is a dummy value.
                - --node-name=MyGkeConnectAgent
              env:
                - name: GOOGLE_APPLICATION_CREDENTIALS
                  value: /etc/creds/creds-gcp.json
                - name: PROM_PROJECT
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: project
                - name: PROM_CLUSTER_NAME
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: cluster_name
                - name: PROM_CLUSTER_LOCATION
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: cluster_location
                - name: PROM_ZONE
                  valueFrom:
                    configMapKeyRef:
                      name: prom-to-sd-user-config
                      key: zone
              image: gcr.io/google-containers/prometheus-to-sd:v0.7.1
              imagePullPolicy: IfNotPresent
              name: prometheus-to-monitoring
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - mountPath: /etc/creds
                  name: creds-gcp
                  readOnly: true
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: creds-gcp
              secret:
                defaultMode: 420
                # This secret is already set up for the Connect Agent.
                secretName: creds-gcp
  2. Appliquez le fichier YAML à l'espace de noms du Connect Agent de votre cluster, où KUBECONFIG correspond au chemin d'accès du fichier kubeconfig du cluster :

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml

Afficher les métriques

Console

  1. Accédez à la page Monitoring dans Google Cloud Console.

    Accéder à la page "Surveillance"

  2. Dans le menu de gauche, cliquez sur Metrics Explorer (Explorateur de métriques).

  3. Les métriques de Connect Agent sont précédées du préfixe custom.googleapis.com/gke-connect-agent/, où gke-connect-agent correspond à la chaîne spécifiée dans l'argument --source. Par exemple : custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. Dans une interface système, utilisez kubectl pour transférer le service gke-connect-monitoring :

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. Ouvrez une autre interface système, puis exécutez la commande suivante :

    curl localhost:8080/metrics

Nettoyer

Pour supprimer les ressources créées dans cette rubrique :

AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project)
kubectl delete configmap prom-to-sd-user-config --kubeconfig KUBECONFIG -n ${AGENT_NS}
kubectl delete service gke-connect-agent --kubeconfig KUBECONFIG -n ${AGENT_NS}
kubectl delete deployment prometheus-to-monitoring --kubeconfig KUBECONFIG -n ${AGENT_NS}