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ústerPROJECT_ID
: El ID del proyecto
Expón el Deployment de Connect Agent
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
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
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"
PROJECT_ID
es tu ID del proyecto de Cloud. Obtén más información para encontrar este valor.SERVICE_ACCOUNT_NAME
es la cuenta de servicio que se usa para registrar el clúster.
Implementa prometheus-to-sd
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 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 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
Ve a la página Monitoring en la consola de Google Cloud.
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/
, en el quegke-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
En una shell, usa
kubectl
para redireccionar los puertos del Servicegke-connect-monitoring
:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
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}