ייצוא מדדים של Connect Agent אל Cloud Monitoring

בדף הזה מוסבר איך לייצא מדדים של Connect Agent אל Cloud Monitoring מ-Google Distributed Cloud, מ-GKE ב-AWS או מכל אשכול Kubernetes רשום אחר.

סקירה כללית

באשכול Google Distributed Cloud או GKE ב-AWS, ‏ Prometheus אוסף מדדים ומאחסן אותם באופן מקומי באשכול. רישום אשכול מחוץ ל- Google Cloud ב-Fleet יוצר פריסה בשם Connect Agent באשכול. ‫Prometheus אוסף מדדים שימושיים מ-Connect Agent, כמו שגיאות בחיבור ל-Google ומספר החיבורים הפתוחים. כדי שהמדדים האלה יהיו זמינים ב-Cloud Monitoring, צריך:

  • חשיפת סוכן Connect באמצעות שירות.
  • פריסת prometheus-to-sd, רכיב פשוט שמגרד מדדים של Prometheus ומייצא אותם ל-Cloud Monitoring.

אחרי כן, אפשר לראות את המדדים באמצעות Monitoring בGoogle Cloud מסוף, או באמצעות העברת פורטים של השירות ושימוש ב-curl.

יצירת משתנה למרחב השמות של Connect Agent

הסוכן Connect Agent פועל בדרך כלל במרחב השמות gke-connect.

לסוכן Connect יש תווית, hub.gke.io/project. שרת ה-HTTP מאזין ביציאה 8080.

יוצרים משתנה, AGENT_NS, למרחב השמות:

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

מחליפים את מה שכתוב בשדות הבאים:

  • KUBECONFIG: קובץ ה-kubeconfig של האשכול
  • PROJECT_ID: מזהה הפרויקט

חשיפת הפריסה של סוכן Connect

  1. מעתיקים את ההגדרות הבאות לקובץ YAML בשם gke-connect-agent.yaml. ההגדרה הזו יוצרת שירות, gke-connect-agent, שחושף את הפריסה של סוכן 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. מחילים את קובץ ה-YAML על מרחב השמות של Connect Agent באשכול, כאשר KUBECONFIG הוא הנתיב לקובץ kubeconfig של האשכול:

    kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
  3. מקשרים את התפקיד roles/monitoring.metricWriter ב-IAM לחשבון השירות של Google בצי:

    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

  1. מעתיקים את ההגדרה הבאה לקובץ YAML בשם prometheus-to-sd.yaml, כאשר:

    • PROJECT_ID הוא מזהה הפרויקט. Google Cloud איך מוצאים את הערך הזה
    • CLUSTER_NAME הוא שם אשכול Kubernetes שבו פועל Connect Agent.
    • REGION הוא המיקום שקרוב מבחינה גיאוגרפית למיקום שבו פועל האשכול. בוחרים Google Cloud אזור שקרוב מבחינה גיאוגרפית למיקום הפיזי של האשכול.
    • ZONE הוא המיקום שקרוב למרכז הנתונים המקומי. בוחרים אזור Google Cloud שקרוב מבחינה גיאוגרפית למקום שבו התנועה זורמת.

    ההגדרה הזו יוצרת שני משאבים:

    • ‫ConfigMap‏, prom-to-sd-user-config, שמצהיר על כמה משתנים לשימוש על ידי הפריסה
    • פריסה, prometheus-to-monitoring, שמריצה את prometheus-to-sd בקפסולה אחת.
    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. מחילים את קובץ ה-YAML על מרחב השמות של Connect Agent באשכול, כאשר KUBECONFIG הוא הנתיב לקובץ kubeconfig של האשכול:

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

הצגת מדדים

המסוף

  1. עוברים לדף Monitoring במסוף Google Cloud .

    כניסה לדף Monitoring

  2. בתפריט הימני, לוחצים על Metrics Explorer.

  3. למדדים של Connect Agent מצורפת הקידומת custom.googleapis.com/gke-connect-agent/, כאשר gke-connect-agent היא המחרוזת שצוינה בארגומנט --source. לדוגמה, custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total

cURL

  1. במעטפת, משתמשים בפקודה kubectl כדי להעביר את שירות gke-connect-monitoring:

    kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
  2. פותחים מעטפת אחרת ומריצים:

    curl localhost:8080/metrics

סידור וארגון

כדי למחוק את המשאבים שיצרתם בנושא הזה:

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}