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. La registrazione di un cluster esterno Google Cloud in un parco risorse crea un deployment denominato Agente Connect nel cluster. Prometheus raccoglie metriche utili dall'agente Connect, ad esempio gli errori di connessione a Google e il numero 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 ed esporta 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 del clusterPROJECT_ID
: l'ID progetto
Esposizione del deployment dell'agente Connect
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
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
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"
PROJECT_ID
è il tuo Google Cloud ID progetto. Scopri come trovare questo valore.SERVICE_ACCOUNT_NAME
è l'account di servizio utilizzato durante la registrazione del cluster.
Deployment di prometheus-to-sd
Copia la seguente configurazione in un file YAML denominato
prometheus-to-sd.yaml
dove:PROJECT_ID
è il tuo Google Cloud ID progetto. Scopri come trovare questo valore.CLUSTER_NAME
è il nome del cluster Kubernetes in cui viene eseguito l'agente Connect.REGION
è la località geograficamente vicina alla posizione in cui viene eseguito il cluster. Scegli una Google Cloud zona che sia geograficamente vicina alla posizione in cui si trova fisicamente il cluster.ZONE
è la località vicino al tuo data center on-premise. Scegli una Google Cloud zona geograficamente vicina a dove si genera il 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 esegueprometheus-to-sd
in un unico 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
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 prometheus-to-sd.yaml
Visualizzazione delle metriche
Console
Vai alla pagina Monitoraggio nella console Google Cloud.
Nel menu a sinistra, fai clic su Esplora metriche.
Le metriche di Connect Agent sono precedute da
custom.googleapis.com/gke-connect-agent/
, dovegke-connect-agent
è la stringa specificata nell'argomento--source
. Ad esempio:custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total
cURL
In una shell, utilizza
kubectl
per eseguire il port forwarding del serviziogke-connect-monitoring
:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
Apri un'altra shell ed esegui:
curl localhost:8080/metrics
Pulizia
Per eliminare le risorse che hai creato 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}