Exporta las métricas de Connect Agent a Cloud Monitoring

En esta página, se explica cómo exportar las métricas del agente de Connect a Cloud Monitoring desde Google Distributed Cloud, GKE en AWS o cualquier otro clúster de Kubernetes registrado.

Descripción general

En un clúster de Google Distributed Cloud o GKE en AWS, Prometheus recopila métricas y las almacena de forma local dentro del clúster. El registro de un clúster fuera de Google Cloud en una flota crea un Deployment llamado agente de Connect en el clúster. Prometheus recopila métricas útiles del agente de Connect, como los errores de conexión a Google y la cantidad de conexiones abiertas. A fin de que estas métricas estén disponibles para Cloud Monitoring, debes realizar las siguientes acciones:

  • Expón el Connect Agent mediante un servicio.
  • Implementa prometheus-to-sd, un componente simple que recopila métricas de Prometheus y las exporta a Cloud Monitoring.

Luego, puedes ver las métricas mediante Monitoring en la consola de Google Cloud o mediante la redirección de puertos del Service y con curl.

Crea una variable para el espacio de nombres del Connect Agent

Por lo general, Connect Agent se ejecuta en el espacio de nombres gke-connect.

El agente de Connect tiene una etiqueta, hub.gke.io/project. El servidor HTTP escucha en el puerto 8080.

Crea una variable, AGENT_NS, para el espacio de nombres:

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

Reemplaza lo siguiente:

  • KUBECONFIG: El archivo kubeconfig del clúster
  • PROJECT_ID: El ID del proyecto

Expón el Deployment de Connect Agent

  1. Copia la siguiente configuración en un archivo YAML llamado gke-connect-agent.yaml. Esta configuración crea un Service, gke-connect-agent, que expone el Deployment del agente de 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. Aplica el archivo YAML al espacio de nombres de Connect Agent en el clúster, en el que KUBECONFIG es la ruta de acceso al archivo kubeconfig del clúster:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. Vincula el rol roles/monitoring.metricWriter de IAM a la cuenta de servicio de Google de la flota:

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

Implementa prometheus-to-sd

  1. Copia la siguiente configuración en un archivo YAML, llamado prometheus-to-sd.yaml, en el que:

    • PROJECT_ID es tu ID del proyecto de Cloud. Obtén más información para encontrar este valor.
    • CLUSTER_NAME es el clúster de Kubernetes en el que se ejecuta el Connect Agent.
    • REGION es la ubicación geográficamente cercana al lugar donde se ejecuta tu clúster. Elige una zona de Google Cloud que esté geográficamente cerca de la ubicación física del clúster.
    • ZONE es la ubicación cercana a tu centro de datos local. Elige una zona de Google Cloud que esté geográficamente cerca del lugar al que fluye el tráfico.

    Esta configuración crea dos recursos:

    • Un ConfigMap, prom-to-sd-user-config, que declara variables para que las use la implementación
    • Un Deployment, prometheus-to-monitoring, que ejecuta prometheus-to-sd en 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. Aplica el archivo YAML al espacio de nombres de Connect Agent en el clúster, en el que KUBECONFIG es la ruta de acceso al archivo kubeconfig del clúster:

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

Cómo ver métricas

Console

  1. Ve a la página Monitoring en la consola de Google Cloud.

    Abrir la página Monitoring

  2. En el menú de la izquierda, haga clic en Explorador de métricas.

  3. Las métricas de Connect Agent tienen el prefijo custom.googleapis.com/gke-connect-agent/, en el que gke-connect-agent es la string que se especifica en el argumento --source. Por ejemplo: custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. En una shell, usa kubectl para redireccionar los puertos del Service gke-connect-monitoring:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. Abre otra shell y, luego, ejecuta lo siguiente:

    curl localhost:8080/metrics

Realice una limpieza

Para borrar los recursos que creaste en este tema, ejecuta lo siguiente:

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}