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 con Monitoring en la consola deGoogle Cloud o con 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: ClusterIPAplica el archivo YAML al espacio de nombres de Connect Agent en el clúster, en el que
KUBECONFIGes la ruta de acceso al archivo kubeconfig del clúster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yamlVincula el rol
roles/monitoring.metricWriterde 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_IDes el ID de tu proyecto de Google Cloud . Obtén más información para encontrar este valor.SERVICE_ACCOUNT_NAMEes 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_IDes el ID de tu proyecto de Google Cloud . Obtén más información para encontrar este valor.CLUSTER_NAMEes el clúster de Kubernetes en el que se ejecuta el Connect Agent.REGIONes la ubicación geográficamente cercana al lugar donde se ejecuta tu clúster. Elige una zona que esté geográficamente cerca de la ubicación física del clúster.Google CloudZONEes la ubicación cercana a tu centro de datos local. Elige una Google Cloud zona 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-sden 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-gcpAplica el archivo YAML al espacio de nombres de Connect Agent en el clúster, en el que
KUBECONFIGes 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-agentes 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
kubectlpara redireccionar los puertos del Servicegke-connect-monitoring:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080Abre 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}