Esporta le metriche dell'agente Connect in Cloud Monitoring

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

Panoramica

In un cluster Google Distributed Cloud o GKE on AWS, Prometheus raccoglie le metriche e le archivia localmente all'interno del cluster. Registrazione di un cluster esterno a Google Cloud in un parco risorse crea un deployment chiamato agente Connect nel cluster. Prometheus raccoglie metriche utili dell'agente Connect, come gli errori di connessione a Google e di connessioni aperte. Per rendere disponibili queste metriche per Cloud Monitoring, devi:

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

Successivamente, puoi visualizzare le metriche utilizzando il monitoraggio nella console Google Cloud o inoltrando la porta del servizio e utilizzando curl.

Creazione di una variabile per lo spazio dei nomi di Connect Agent

In genere, l'agente Connect 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 di Connect Agent nel 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:

    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 nome del cluster Kubernetes in cui viene eseguito l'agente Connect.
    • REGION è la località geograficamente vicina al luogo dell'esecuzione del cluster. Scegli un'opzione la zona Google Cloud, il cluster è geograficamente vicino al luogo in cui si trova fisicamente il cluster.
    • ZONE è la località vicino al tuo data center on-premise. Scegli una zona Google Cloud geograficamente vicina al flusso di traffico.

    Questa configurazione crea due risorse:

    • Un ConfigMap, prom-to-sd-user-config, che dichiara diverse variabili per l'utilizzo da parte del deployment
    • Un deployment, prometheus-to-monitoring, che esegue prometheus-to-sd in un solo 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 Monitoraggio nella console Google Cloud.

    Vai alla pagina Monitoring

  2. Nel menu a sinistra, fai clic su Esplora metriche.

  3. Le metriche di Connect Agent sono precedute da 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 il port forwarding del servizio gke-connect-monitoring:

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

    curl localhost:8080/metrics

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}