איסוף מדדים מעומסי העבודה

בדף הזה מוסבר איך לגרד מדדים מעומסי עבודה בסביבות של מכשירי Google Distributed Cloud ‏ (GDC) עם בידוד פיזי כדי להקל על המעקב והניתוח של הנתונים.

אתם יכולים לבצע סקראפינג ולאסוף מדדים שהרכיבים שלכם מייצרים לאורך זמן. פלטפורמת המעקב מציעה API בהתאמה אישית כדי לגרד מדדים מעומסי עבודה שפועלים במרחב השמות של פרויקט מכשיר GDC עם air gap. כדי לגרד מדדים, צריך לפרוס MonitoringTarget משאב בהתאמה אישית למרחב השמות של הפרויקט בשרת Management API. עם הפריסה של המשאב הזה, פלטפורמת המעקב מתחילה לאסוף נתונים.

המשאב המותאם אישית MonitoringTarget מפנה את צינור הנתונים של המעקב לגירוד של פודים ייעודיים בפרויקט. הפודים האלה צריכים לחשוף נקודת קצה של HTTP שמספקת מדדים בפורמט חשיפה של Prometheus, כמו OpenMetrics. לאחר מכן המדדים שנאספו מוצגים במופע Grafana של הפרויקט, ומספקים תובנות לגבי המצב התפעולי של האפליקציה.

כדי להגדיר את המשאב המותאם אישית MonitoringTarget, צריך לציין את הפודים במרחב השמות של הפרויקט לאיסוף מדדים. אתם יכולים להתאים אישית הגדרות שונות, כולל תדירות הגירוד, נקודת הקצה של מדדי ה-Pods, תוויות והערות.

לפני שמתחילים

כדי לנהל משאבים מותאמים אישית של MonitoringTarget, צריך לבקש מהאדמין את ההרשאות הנדרשות.

התפקידים שצריך ב-IAM

פנו לאדמין של IAM בפרויקט ובקשו ממנו להקצות לכם את התפקידים הבאים:

  • MonitoringTarget Creator (monitoringtarget-creator): יצירת משאבי MonitoringTarget בהתאמה אישית במרחב השמות של הפרויקט.
  • MonitoringTarget Editor (monitoringtarget-editor): עריכה או מחיקה של MonitoringTarget משאבים בהתאמה אישית במרחב השמות של הפרויקט.
  • MonitoringTarget Viewer (monitoringtarget-viewer): צפייה במשאבים מותאמים אישית במרחב השמות של הפרויקט.MonitoringTarget

הגדרת המשאב המותאם אישית MonitoringTarget

משאב מותאם אישית MonitoringTarget מציין לפלטפורמת המעקב מאיפה לאסוף מדדים. אתם יכולים לציין את ה-pods שמהם אתם אוספים מדדים, את נקודת הקצה של המדדים של ה-pods האלה, את תדירות הגירוד והגדרות נוספות.

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

  • Targets: הפודים ונקודות הקצה שלהם בפרויקט שחושפים מדדים.
  • מרווח גירוד: באיזו תדירות רוצים לשלוף מדדים מנקודות הקצה שנבחרו.
  • התאמות אישיות של תוויות: כללים אופציונליים עם שינויים בתוויות של מדדים.

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

  • נקודות קצה סטטיות: אתם מצהירים באופן מפורש על נקודת הקצה (יציאה, נתיב, סכימה) בהגדרות של MonitoringTarget.
  • הערות: פרטי נקודת הקצה של מדד ה-Pod מאוחזרים מהערות בקובץ Deployment של הקונטיינר. השיטה הזו גמישה יותר אם לכל פוד יש נקודות קצה שונות.

נקודות קצה סטטיות

כדי לחשוף מדדים מה-Pods שבחרתם בנקודת קצה שהוגדרה באופן סטטי:

  1. קובעים את הפרויקט של מכשיר GDC עם air gap שרוצים לאסוף ממנו מדדים לצורך מעקב.

  2. במפרט של ה-Pod, מצהירים על היציאה שמשמשת למדדים בשדה containerPort. בדוגמה הבאה אפשר לראות איך להצהיר על יציאה 2112 במפרט של ה-Pod:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. בהגדרה של MonitoringTarget, מציינים את פרטי נקודת הקצה (יציאה, נתיב, סכימה) בקטע podMetricsEndpoints כך שיתאימו ליציאה שחשפתם במפרט של ה-Pod.

    קובץ ה-YAML הבא מציג דוגמה להגדרה MonitoringTarget שבה כל פוד שנבחר צריך לחשוף מדדים באותה נקודת קצה, http://your-container-name:2112/metrics:

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
          # Choose pod labels to consider for this job.
          # Optional: Map of key-value pairs.
          # Default: No filtering by label.
          # To consider every pod in the project namespace, remove selector fields.
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          value: 2112
        path:
          # Choose any value for your endpoint.
          # The /metrics value is an example.
          value: /metrics
        scheme:
          value: http
    
  4. מחילים את ההגדרה MonitoringTarget על שרת Management API באותו מרחב שמות כמו הפודים של היעד:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

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

    • KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של שרת Management API.
    • MONITORING_TARGET_NAME: השם של קובץ ההגדרה MonitoringTarget.

פלטפורמת המעקב מתחילה לאסוף מדדים.

הערות

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

  1. קובעים את הפרויקט של מכשיר GDC עם air gap שרוצים לאסוף ממנו מדדים לצורך מעקב.

  2. מוסיפים את ההערות הבאות לקטע annotations בקובץ Deployment של הקונטיינר:

    • prometheus.io/path
    • prometheus.io/port
    • prometheus.io/scheme

    בדוגמה הבאה מוצגות הערות למדדים ביציאה 2112:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: your-container-name
      namespace: your-project-namespace
      labels:
        app: your-app-label
      annotations:
        # These annotations are not required. They demonstrate selecting
        # pod metric endpoints through annotations.
        prometheus.io/path: /metrics
        prometheus.io/port: \"2112\"
        prometheus.io/scheme: http
    
  3. בהגדרות של MonitoringTarget, מציינים את ההערות שהוספתם לקובץ Deployment של מאגר התגים בקטע podMetricsEndpoints. ההגדרה הזו מציינת למשאב המותאם אישית לאסוף את פרטי נקודת הקצה של המדדים מההערות בתרמילים שנבחרו.

    קובץ ה-YAML הבא מציג דוגמה של הגדרה באמצעות הערות:MonitoringTarget

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          annotation: prometheus.io/port
        path:
          annotation: prometheus.io/path
        scheme:
          annotation: prometheus.io/scheme
    
  4. מחילים את ההגדרה MonitoringTarget על שרת Management API באותו מרחב שמות כמו הפודים של היעד:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

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

    • KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של שרת Management API.
    • MONITORING_TARGET_NAME: השם של קובץ ההגדרה MonitoringTarget.

פלטפורמת המעקב מתחילה לאסוף מדדים.

מידע על שדות ואפשרויות נוספים מופיע במפרט MonitoringTarget המלא ובמאמרי העזרה של ה-API.

המפרט המלא MonitoringTarget

קובץ ה-YAML הבא מציג דוגמה למפרט המלא של המשאב המותאם אישית MonitoringTarget. מידע נוסף ותיאור מלא של השדות זמינים במאמרי העזרה של ה-API.

apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
  # Choose the same namespace as the workload pods.
  namespace: PROJECT_NAMESPACE
  name: MONITORING_TARGET_NAME
spec:
  # Choose matching pattern that identifies pods for this job.
  # Optional
  # Relationship between different selectors: AND
  selector:
    # Choose clusters to consider for this job.
    # Optional: List
    # Default: All clusters applicable to this project.
    # Relationship between different list elements: OR
    matchClusters:
    - string

    # Choose pod labels to consider for this job.
    # Optional: Map of key-value pairs.
    # Default: No filtering by label.
    # Relationship between different pairs: AND
    matchLabels:
      key1: value1

    # Choose annotations to consider for this job.
    # Optional: Map of key-value pairs
    # Default: No filtering by annotation
    # Relationship between different pairs: AND
    matchAnnotations:
      key1: value1

  # Configure the endpoint exposed for this job.
  podMetricsEndpoints:
    # Choose a port either through static value or annotation.
    # Optional
    # Annotation takes priority.
    # Default: static port 80
    port:
      value: integer
      annotation: string

    # Choose a path either through static value or annotation.
    # Optional
    # Annotation takes priority
    # Default: static path /metrics
    path:
      value: string
      annotation: string

    # Choose a scheme either through a static value (http or https) or annotation.
    # Optional
    # Annotation takes priority
    # Default: static scheme http
    scheme:
      value: string
      annotation: string

    # Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
    # Optional
    # Default: 60s
    scrapeInterval: string

    # Dynamically rewrite the label set of a target before it gets scraped.
    # https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
    # Optional
    # Default: No filtering by label
    metricsRelabelings:
    - sourceLabels:
      - string
      separator: string
      regex: string
      action: string
      targetLabel: string
      replacement: string

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

  • PROJECT_NAMESPACE: מרחב השמות של הפרויקט.
  • MONITORING_TARGET_NAME: השם של קובץ ההגדרה MonitoringTarget.