Mengekspor metrik Connect Agent ke Cloud Monitoring

Halaman ini menjelaskan cara mengekspor metrik Connect Agent ke Cloud Monitoring dari GKE di VMware, GKE di AWS, atau cluster Kubernetes lainnya yang terdaftar.

Ringkasan

Di GKE pada VMware atau GKE di cluster AWS, Prometheus mengumpulkan metrik dan menyimpannya secara lokal di dalam cluster. Mendaftarkan cluster dengan Konsol Google Cloud akan membuat Deployment yang disebut Connect Agent dalam cluster. Prometheus mengumpulkan metrik yang berguna dari Connect Agent, seperti error saat menghubungkan ke Google dan jumlah koneksi yang terbuka. Agar metrik ini tersedia untuk Cloud Monitoring, Anda harus:

  • Mengekspos Agen Connect menggunakan Layanan.
  • Deploy prometheus-to-sd, komponen sederhana yang menyalin metrik Prometheus dan mengekspornya ke Cloud Monitoring.

Setelah itu, Anda akan melihat metrik dengan menggunakan Monitoring di Konsol Google Cloud, atau dengan meneruskan port Layanan dan menggunakan curl.

Membuat variabel untuk namespace Connect Agent

Connect Agent biasanya berjalan di namespace gke-connect.

Hubungkan Agen memiliki label, hub.gke.io/project. Server HTTP memantau port 8080.

Buat variabel, AGENT_NS, untuk namespace:

AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)

Ganti kode berikut:

  • KUBECONFIG: file kubeconfig untuk cluster Anda
  • PROJECT_ID: the project ID

Mengekspos Deployment Agen Connect

  1. Salin konfigurasi berikut ke file YAML bernama gke-connect-agent.yaml. Konfigurasi ini membuat Layanan, gke-connect-agent, yang mengekspos Connect Agent Deployment.

    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. Terapkan file YAML ke namespace Agen Connect di cluster Anda, dengan KUBECONFIG adalah jalur ke file kubeconfig cluster:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. Ikat peran IAM roles/monitoring.metricWriter dengan akun layanan Google fleet:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"

Men-deploy prometheus-to-sd

  1. Salin konfigurasi berikut ke file YAML, bernama prometheus-to-sd.yaml, dengan nama:

    • PROJECT_ID adalah ID project Google Cloud Anda. Pelajari cara menemukan nilai ini.
    • CLUSTER_NAME adalah cluster Kubernetes tempat Connect Agent dijalankan.
    • REGION adalah lokasi yang secara geografis dekat dengan tempat cluster Anda berjalan. Pilih zona Google Cloud yang secara geografis dekat dengan lokasi cluster secara fisik.
    • ZONE adalah lokasi di dekat pusat data lokal Anda. Pilih zona Google Cloud yang secara geografis dekat dengan tempat traffic mengalir.

    Konfigurasi ini membuat dua resource:

    • ConfigMap, prom-to-sd-user-config, yang mendeklarasikan beberapa variabel untuk digunakan oleh Deployment
    • Deployment, prometheus-to-monitoring, yang menjalankan prometheus-to-sd dalam satu 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. Terapkan file YAML ke namespace Agen Connect di cluster Anda, dengan KUBECONFIG adalah jalur ke file kubeconfig cluster:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml

Melihat metrik

Konsol

  1. Buka halaman Monitoring di Konsol Google Cloud.

    Buka halaman Monitoring

  2. Dari menu kiri, klik Metrics Explorer.

  3. Metrik Agen Connect diawali dengan custom.googleapis.com/gke-connect-agent/, dengan gke-connect-agent sebagai string yang ditentukan dalam argumen --source. Misalnya, custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. Dalam shell ini, gunakan kubectl untuk meneruskan port Layanan gke-connect-monitoring:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. Buka shell lain, lalu jalankan:

    curl localhost:8080/metrics

Pembersihan

Untuk menghapus referensi yang Anda buat dalam topik ini:

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}