Esta página explica como exportar métricas do agente Connect para o Cloud Monitoring a partir do Google Distributed Cloud, do GKE on AWS ou de qualquer outro cluster Kubernetes registado.
Vista geral
Num cluster do Google Distributed Cloud ou do GKE na AWS, o Prometheus recolhe métricas e armazena-as localmente no cluster. O registo de um cluster fora Google Cloud de uma frota cria uma implementação denominada Agente Connect no cluster. O Prometheus recolhe métricas úteis do agente de ligação, como erros de ligação ao Google e o número de ligações abertas. Para disponibilizar estas métricas ao Cloud Monitoring, tem de:
- Exponha o agente de ligação através de um serviço.
- Implemente o
prometheus-to-sd
, um componente simples que extrai métricas do Prometheus e as exporta para o Cloud Monitoring.
Posteriormente, pode ver as métricas através da monitorização na
Google Cloud consola ou encaminhando a porta do serviço e usando curl
.
Criar uma variável para o espaço de nomes do agente de ligação
Normalmente, o agente Connect é executado no espaço de nomes gke-connect
.
O agente de ligação tem uma etiqueta: hub.gke.io/project
. O servidor HTTP escuta na porta 8080.
Crie uma variável, AGENT_NS
, para o espaço de nomes:
AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)
Substitua o seguinte:
KUBECONFIG
: o ficheiro kubeconfig do seu clusterPROJECT_ID
: o ID do projeto
Exposição da implementação do agente do Connect
Copie a seguinte configuração para um ficheiro YAML denominado
gke-connect-agent.yaml
. Esta configuração cria um serviço,gke-connect-agent
, que expõe a implementação do agente do 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
Aplique o ficheiro YAML ao espaço de nomes do agente Connect no seu cluster, onde
KUBECONFIG
é o caminho para o ficheiro kubeconfig do cluster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
Associe a função do IAM
roles/monitoring.metricWriter
à conta de serviço Google da frota:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
PROJECT_ID
é o ID do seu Google Cloud projeto. Saiba como encontrar este valor.SERVICE_ACCOUNT_NAME
é a conta de serviço usada ao registar o cluster.
A implementar prometheus-to-sd
Copie a seguinte configuração para um ficheiro YAML com o nome
prometheus-to-sd.yaml
onde:PROJECT_ID
é o ID do seu Google Cloud projeto. Saiba como encontrar este valor.CLUSTER_NAME
é o nome do cluster do Kubernetes onde o agente Connect é executado.REGION
é a localização geograficamente próxima do local onde o cluster é executado. Escolha uma Google Cloud zona que esteja geograficamente perto da localização física do cluster.ZONE
é a localização perto do seu centro de dados no local. Escolha uma Google Cloud zona geograficamente próxima do local onde o tráfego flui.
Esta configuração cria dois recursos:
- Um ConfigMap,
prom-to-sd-user-config
, que declara várias variáveis para utilização pela implementação - Uma implementação,
prometheus-to-monitoring
, que executaprometheus-to-sd
num único agrupamento.
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
Aplique o ficheiro YAML ao espaço de nomes do agente Connect no seu cluster, onde
KUBECONFIG
é o caminho para o ficheiro kubeconfig do cluster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml
Visualizar métricas
Consola
Aceda à página Monitorização na Google Cloud consola.
No menu do lado esquerdo, clique em Explorador de métricas.
As métricas do Connect Agent têm o prefixo
custom.googleapis.com/gke-connect-agent/
, em quegke-connect-agent
é a string especificada no argumento--source
. Por exemplo,custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total
cURL
Numa shell, use
kubectl
para encaminhar a porta do serviçogke-connect-monitoring
:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
Abra outra shell e, de seguida, execute:
curl localhost:8080/metrics
Limpar
Para eliminar os recursos que criou neste tópico:
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}