בדף הזה מוסבר איך לגרד מדדים מעומסי עבודה בסביבות של מכשירי 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 שבחרתם בנקודת קצה שהוגדרה באופן סטטי:
קובעים את הפרויקט של מכשיר GDC עם air gap שרוצים לאסוף ממנו מדדים לצורך מעקב.
במפרט של ה-Pod, מצהירים על היציאה שמשמשת למדדים בשדה
containerPort. בדוגמה הבאה אפשר לראות איך להצהיר על יציאה2112במפרט של ה-Pod:# ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...בהגדרה של
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מחילים את ההגדרה
MonitoringTargetעל שרת Management API באותו מרחב שמות כמו הפודים של היעד:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yamlמחליפים את מה שכתוב בשדות הבאים:
-
KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של שרת Management API. -
MONITORING_TARGET_NAME: השם של קובץ ההגדרהMonitoringTarget.
-
פלטפורמת המעקב מתחילה לאסוף מדדים.
הערות
כדי לחשוף מדדים באמצעות הערות אם לכל פוד יש נקודות קצה שונות:
קובעים את הפרויקט של מכשיר GDC עם air gap שרוצים לאסוף ממנו מדדים לצורך מעקב.
מוסיפים את ההערות הבאות לקטע
annotationsבקובץDeploymentשל הקונטיינר:prometheus.io/pathprometheus.io/portprometheus.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בהגדרות של
MonitoringTarget, מציינים את ההערות שהוספתם לקובץDeploymentשל מאגר התגים בקטעpodMetricsEndpoints. ההגדרה הזו מציינת למשאב המותאם אישית לאסוף את פרטי נקודת הקצה של המדדים מההערות בתרמילים שנבחרו.קובץ ה-YAML הבא מציג דוגמה של הגדרה באמצעות הערות:
MonitoringTargetapiVersion: 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מחילים את ההגדרה
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.