Esta página explica como exportar métricas do agente do Connect para o Cloud Monitoring a partir do Google Distributed Cloud, do GKE na AWS ou de qualquer outro cluster do Kubernetes registrado.
Visão geral
Em um cluster do Google Distributed Cloud ou do GKE na AWS, o Prometheus coleta métricas e as armazena localmente no cluster. O registro de um cluster fora do Google Cloud em uma frota cria uma implantação chamada agente do Connect no cluster. O Prometheus coleta métricas úteis do Connect Agent, como erros de conexão com o Google e o número de conexões abertas. Para disponibilizar essas métricas para o Cloud Monitoring, é preciso:
- Expor o agente do Connect usando um serviço.
- Implante
prometheus-to-sd
, um componente simples que copia as métricas do Prometheus e as exporta para o Cloud Monitoring.
Em seguida, você visualiza as métricas usando o Monitoring no
Console do Cloud ou encaminhando a porta do Serviço e usando curl
.
Como criar uma variável para o namespace do agente do Connect
O agente do Connect normalmente é executado no namespace gke-connect
.
O agente do Connect tem um rótulo, hub.gke.io/project
. O servidor HTTP detecta na porta 8080.
Crie uma variável, AGENT_NS
, para o namespace:
AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)
Substitua:
KUBECONFIG
: o arquivo kubeconfig do clusterPROJECT_ID
: o ID do projeto;
Como expor a implantação do agente do Connect
Copie a seguinte configuração para um arquivo YAML chamado
gke-connect-agent.yaml
. Essa configuração cria um serviço,gke-connect-agent
, que expõe a implantaçã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 arquivo YAML ao namespace do agente do Connect no cluster, em que
KUBECONFIG
é o caminho para o arquivo kubeconfig do cluster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
Vincule o papel do IAM
roles/monitoring.metricWriter
à conta de serviço do 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 projeto no Google Cloud. Saiba como encontrar esse valor.SERVICE_ACCOUNT_NAME
é a conta de serviço usada ao registrar o cluster.
Como implantar prometheus-to-sd
Copie a seguinte configuração para um arquivo YAML chamado
prometheus-to-sd.yaml
em que:PROJECT_ID
é o ID do projeto no Google Cloud. Saiba como encontrar esse valor.CLUSTER_NAME
é o cluster do Kubernetes em que o agente do Connect é executado;REGION
é o local geograficamente próximo ao local em que seu cluster é executado. Escolha uma zona do Google Cloud que esteja geograficamente próxima à localização física do cluster.ZONE
é o local próximo ao data center local. Escolha uma zona do Google Cloud geograficamente próxima de onde o tráfego flui.
Essa configuração cria dois recursos:
- Um ConfigMap,
prom-to-sd-user-config
, que declara várias variáveis para uso pela implantação - Uma implantação,
prometheus-to-monitoring
, que executaprometheus-to-sd
em um único 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
Aplique o arquivo YAML ao namespace do agente do Connect no cluster, em que
KUBECONFIG
é o caminho para o arquivo kubeconfig do cluster:kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml
Como ver métricas
Console
Acesse a página "Monitoramento" no Console do Google Cloud.
No menu esquerdo, clique em Metrics Explorer:
As métricas do agente do Connect têm como prefixo
custom.googleapis.com/gke-connect-agent/
, em quegke-connect-agent
é a string especificada no argumento--source
. Exemplo:custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total
cURL
Em um shell, use
kubectl
para encaminhar o serviçogke-connect-monitoring
:kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
Abra outro shell e execute:
curl localhost:8080/metrics
Limpeza
Para excluir os recursos criados 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}