Connect Agent-Messwerte in Cloud Monitoring exportieren

Auf dieser Seite wird erläutert, wie Sie Connect-Agent-Messwerte von GKE on VMware, GKE on AWS oder einem anderen registrierten Kubernetes-Cluster nach Cloud Monitoring exportieren.

Überblick

In einem GKE on VMware oder GKE on AWS-Cluster erfasst Prometheus Messwerte und speichert sie lokal im Cluster. Wenn Sie einen Cluster bei der Google Cloud Console registrieren, wird ein Depolyment namens Connect-Agent im Cluster erstellt. Prometheus erfasst nützliche Messwerte von Connect-Agent, z. B. Fehler, die eine Verbindung zu Google herstellen, und die Anzahl der offenen Verbindungen. So stellen Sie diese Messwerte für Cloud Monitoring zur Verfügung:

  • Connect-Agent mithilfe eines Dienstes verfügbar machen.
  • Stellen Sie prometheus-to-sd bereit, eine einfache Komponente, die Prometheus-Messwerte abruft und sie in Cloud Monitoring exportiert.

Anschließend können Sie die Messwerte mithilfe von Monitoring in der Google Cloud Console oder durch Portweiterleitung des Dienstes und curl aufrufen.

Variable für den Namespace des Connect-Agents erstellen

Connect Agent wird normalerweise im Namespace gke-connect ausgeführt.

Connect-Agent hat das Label hub.gke.io/project. Der HTTP-Server überwacht Port 8080.

Erstellen Sie eine Variable namens AGENT_NS für den Namespace:

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

Dabei gilt:

  • KUBECONFIG: Die kubeconfig-Datei für Ihren Cluster
  • PROJECT_ID: die Projekt-ID

Connect-Agent-Deployment verfügbar machen

  1. Kopieren Sie die folgende Konfiguration in eine YAML-Datei mit dem Namen gke-connect-agent.yaml. Mit dieser Konfiguration wird der gke-connect-agent-Dienst erstellt, der das Deployment des Connect-Agents bereitstellt.

    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. Wenden Sie die YAML-Datei auf den Namespace des Connect-Agents in Ihrem Cluster an, wobei KUBECONFIG der Pfad zur kubeconfig-Datei des Clusters ist:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. Weisen Sie dem Google-Dienstkonto des Gerätepools die IAM-Rolle roles/monitoring.metricWriter zu:

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

prometheus-to-sd bereitstellen

  1. Kopieren Sie die folgende Konfiguration in eine YAML-Datei mit dem Namen prometheus-to-sd.yaml, wobei:

    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID. Informationen zum Ermitteln dieses Werts
    • CLUSTER_NAME ist der Kubernetes-Cluster, in dem der Connect-Agent ausgeführt wird.
    • REGION ist der Standort, der sich in der Nähe des Clusters befindet. Wählen Sie eine Google Cloud-Zone aus, die sich geografisch in der Nähe des Clusters befindet.
    • ZONE ist der Standort in der Nähe Ihres lokalen Rechenzentrums. Wählen Sie eine Google Cloud-Zone aus, die geografisch in der Nähe des Traffics liegt.

    Mit dieser Konfiguration werden zwei Ressourcen erstellt:

    • Die prom-to-sd-user-config-ConfigMap, die mehrere Variablen für das Deployment deklariert
    • Ein prometheus-to-monitoring-Deployment, die prometheus-to-sd in einem einzelnen Pod ausführt.
    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. Wenden Sie die YAML-Datei auf den Namespace des Connect-Agents in Ihrem Cluster an, wobei KUBECONFIG der Pfad zur kubeconfig-Datei des Clusters ist:

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

Messwerte ansehen

Console

  1. Rufen Sie in der Google Cloud Console die Seite "Monitoring" auf.

    Zur Seite "Monitoring"

  2. Klicken Sie im linken Menü auf Metrics Explorer.

  3. Die Messwerte des Connect-Agents haben das Präfix custom.googleapis.com/gke-connect-agent/, wobei gke-connect-agent der String ist, der im Argument --source angegeben ist. Beispiel: custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. Verwenden Sie in einer Shell kubectl, um den gke-connect-monitoring-Dienst weiterzuleiten:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. Öffnen Sie eine weitere Shell und führen Sie dann Folgendes aus:

    curl localhost:8080/metrics

Bereinigen

So löschen Sie die Ressourcen, die Sie in diesem Thema erstellt haben:

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}