En esta página se explica cómo exportar métricas del agente de conexión a Cloud Monitoring desde Google Distributed Cloud, GKE en AWS o cualquier otro clúster de Kubernetes registrado.
Información general
En un clúster de Google Distributed Cloud o de GKE en AWS, Prometheus recoge métricas y las almacena de forma local en el clúster. Si registras un clúster externo Google Cloud en una flota se crea una implementación llamada "Agente de Connect" en el clúster. Prometheus recoge métricas útiles del agente de conexión, como los errores al conectarse a Google y el número de conexiones abiertas. Para que estas métricas estén disponibles en Cloud Monitoring, debes hacer lo siguiente:
- Expón el agente de Connect mediante un servicio.
- Implementa
prometheus-to-sd
, un componente sencillo que recoge métricas de Prometheus y las exporta a Cloud Monitoring.
Después, puedes ver las métricas mediante Monitoring en la consolaGoogle Cloud o reenviando el puerto del servicio y usando curl
.
Crear una variable para el espacio de nombres de Connect Agent
El agente de Connect suele ejecutarse en el espacio de nombres gke-connect
.
Connect Agent 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)
Haz los cambios siguientes:
KUBECONFIG
: el archivo kubeconfig de tu clústerPROJECT_ID
: el ID del proyecto
Exponer la implementación del agente de Connect
Copia la siguiente configuración en un archivo YAML llamado
gke-connect-agent.yaml
. Esta configuración crea un servicio,gke-connect-agent
, que expone la implementación del agente de conexión.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
Aplica el archivo YAML al espacio de nombres del agente de Connect en tu clúster, donde
KUBECONFIG
es la ruta al archivo kubeconfig del clúster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
Vincula el rol de
roles/monitoring.metricWriter
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"
PROJECT_ID
es el ID de tu proyecto Google Cloud . Consulta cómo encontrar este valor.SERVICE_ACCOUNT_NAME
es la cuenta de servicio que se usa al registrar el clúster.
Desplegando prometheus-to-sd
Copia la siguiente configuración en un archivo YAML llamado
prometheus-to-sd.yaml
, donde:PROJECT_ID
es el ID de tu proyecto Google Cloud . Consulta cómo encontrar este valor.CLUSTER_NAME
es el del clúster de Kubernetes en el que se ejecuta el agente de Connect.REGION
es la ubicación geográficamente cercana a donde se ejecuta tu clúster. Elige una Google Cloud zona que esté cerca geográficamente de la ubicación física del clúster.ZONE
es la ubicación cercana a tu centro de datos local. Elige una Google Cloud zona que esté geográficamente cerca de donde se produce el flujo de tráfico.
Esta configuración crea dos recursos:
- Un ConfigMap,
prom-to-sd-user-config
, que declara varias variables para que las use el Deployment - Un Deployment,
prometheus-to-monitoring
, que ejecutaprometheus-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
Aplica el archivo YAML al espacio de nombres del agente de Connect en tu clúster, donde
KUBECONFIG
es la ruta al archivo kubeconfig del clúster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml
Ver métricas
Consola
Ve a la página Monitoring de la Google Cloud consola.
En el menú de la izquierda, haga clic en Explorador de métricas.
Las métricas de Connect Agent tienen el prefijo
custom.googleapis.com/gke-connect-agent/
, dondegke-connect-agent
es la cadena especificada en el argumento--source
. Por ejemplo:custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total
cURL
En un shell, usa
kubectl
para reenviar el puerto del serviciogke-connect-monitoring
:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
Abre otra shell y ejecuta lo siguiente:
curl localhost:8080/metrics
Eliminar los recursos utilizados
Para eliminar los recursos que has creado en este tema, sigue estos pasos:
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}