Como exportar as métricas do agente do Connect para o Cloud Monitoring

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 cluster
  • PROJECT_ID: o ID do projeto;

Como expor a implantação do agente do Connect

  1. 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
  2. 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
  3. 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"

Como implantar prometheus-to-sd

  1. 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 executa prometheus-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
  2. 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

  1. Acesse a página "Monitoramento" no Console do Google Cloud.

    Acessar a página do Monitoring

  2. No menu esquerdo, clique em Metrics Explorer:

  3. As métricas do agente do Connect têm como prefixo custom.googleapis.com/gke-connect-agent/, em que gke-connect-agent é a string especificada no argumento --source. Exemplo: custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. Em um shell, use kubectl para encaminhar o serviço gke-connect-monitoring:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. 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}