Esporta le metriche dell'agente Connect in Cloud Monitoring

Questa pagina spiega come esportare le metriche dell'agente Connect in Cloud Monitoring da GKE su VMware, GKE su AWS o qualsiasi altro cluster Kubernetes registrato.

Panoramica

In un cluster GKE su VMware o GKE su AWS, Prometheus raccoglie le metriche e le archivia localmente all'interno del cluster. La registrazione di un cluster con la console Google Cloud crea un deployment chiamato agente Connect nel cluster. Prometheus raccoglie metriche utili da Connect Agent, come gli errori di connessione a Google e il numero di connessioni aperte. Per rendere disponibili queste metriche in Cloud Monitoring, devi:

  • Esporre l'agente Connect utilizzando un servizio.
  • Esegui il deployment di prometheus-to-sd, un semplice componente che esegue lo scraping dei dati di Prometheus e le esporta in Cloud Monitoring.

Successivamente, potrai visualizzare le metriche utilizzando Monitoring nella console Google Cloud o eseguendo il port forwarding del servizio e utilizzando curl.

Creazione di una variabile per lo spazio dei nomi dell'agente Connect

L'agente Connect in genere viene eseguito nello spazio dei nomi gke-connect.

L'agente Connect ha un'etichetta: hub.gke.io/project. Il server HTTP rimane in ascolto sulla porta 8080.

Crea una variabile, AGENT_NS, per lo spazio dei nomi:

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

Sostituisci quanto segue:

  • KUBECONFIG: il file kubeconfig per il cluster
  • PROJECT_ID: l'ID progetto

Esposizione del deployment dell'agente Connect

  1. Copia la seguente configurazione in un file YAML denominato gke-connect-agent.yaml. Questa configurazione crea un servizio, gke-connect-agent, che espone il deployment dell'agente 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. Applica il file YAML allo spazio dei nomi dell'agente Connect nel tuo cluster, dove KUBECONFIG è il percorso del file kubeconfig del cluster:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. Associa il ruolo IAM roles/monitoring.metricWriter all'account di servizio Google del parco risorse:

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

Deployment di prometheus-to-sd in corso...

  1. Copia la seguente configurazione in un file YAML, denominato prometheus-to-sd.yaml, dove:

    • PROJECT_ID è l'ID del tuo progetto Google Cloud. Scopri come trovare questo valore.
    • CLUSTER_NAME è il cluster Kubernetes in cui viene eseguito l'agente Connect.
    • REGION è la località geograficamente vicina a dove viene eseguito il cluster. Scegli una zona Google Cloud che sia geograficamente vicina alla località in cui si trova fisicamente il cluster.
    • ZONE è la località vicina al tuo data center on-prem. Scegli una zona Google Cloud geograficamente vicina al flusso del traffico.

    Questa configurazione crea due risorse:

    • Un ConfigMap, prom-to-sd-user-config, che dichiara varie variabili per l'uso da parte del deployment
    • Un deployment, prometheus-to-monitoring, che esegue prometheus-to-sd in un unico 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. Applica il file YAML allo spazio dei nomi dell'agente Connect nel tuo cluster, dove KUBECONFIG è il percorso del file kubeconfig del cluster:

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

Visualizzazione delle metriche

Console

  1. Vai alla pagina Monitoring nella console Google Cloud.

    Vai alla pagina Monitoring

  2. Nel menu a sinistra, fai clic su Metrics Explorer.

  3. Le metriche di Connect Agent hanno il prefisso custom.googleapis.com/gke-connect-agent/, dove gke-connect-agent è la stringa specificata nell'argomento --source. Ad esempio: custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. In una shell, utilizza kubectl per eseguire il port forwarding del servizio gke-connect-monitoring:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. Apri un'altra shell, quindi esegui:

    curl localhost:8080/metrics

esegui la pulizia

Per eliminare le risorse create in questo argomento:

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}