מעקב אחרי סנכרון תצורות באמצעות Prometheus

בדף הזה מוסבר איך לשלוח מדדים מ-סנכרון תצורות אל Prometheus.

בדף הזה מוסבר איך משתמשים ב-Prometheus כדי לראות את המדדים של סנכרון תצורות. מומלץ להשתמש ב-Prometheus (בדף הזה) או ב-Cloud Monitoring כדי לייצא מדדים. אפשר גם להשתמש במדדים מותאמים אישית.

‫סנכרון תצורות אוסף ומייצא מדדים באופן אוטומטי אל Prometheus. אפשר להגדיר את Cloud Monitoring כך שימשוך מדדים מותאמים אישית מ-Prometheus. אחרי זה תוכלו לראות את המדדים המותאמים אישית גם ב-Prometheus וגם ב-Monitoring. מידע נוסף זמין במאמר שימוש ב-Prometheus במסמכי התיעוד של GKE.

גירוד המדדים

כל מדדי Prometheus זמינים לגירוד ביציאה 8675. כדי שתוכלו לגרד מדדים, אתם צריכים להגדיר את האשכול שלכם ל-Prometheus באחת משתי דרכים. אחת מהאפשרויות:

  • פועלים לפי המסמכים של Prometheus כדי להגדיר את האשכול לגירוד, או

  • משתמשים ב-Prometheus Operator יחד עם המניפסטים הבאים, שסורקים את כל המדדים של סנכרון תצורות כל 10 שניות.

    1. יוצרים ספרייה זמנית להחזקת קובצי המניפסט.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. מורידים את מניפסט Prometheus Operator ממאגר CoreOS באמצעות הפקודה curl:

      curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
      

      קובץ המניפסט הזה מוגדר לשימוש במרחב השמות default, שלא מומלץ לשימוש. בשלב הבא משנים את ההגדרה כך שישתמשו במרחב שמות בשם monitoring. כדי להשתמש במרחב שמות אחר, מחליפים אותו במקום monitoring בשלבים הבאים.

    3. יוצרים קובץ כדי לעדכן את מרחב השמות של ClusterRoleBinding בחבילה שלמעלה.

      # patch-crb.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-operator
      subjects:
      - kind: ServiceAccount
        name: prometheus-operator
        namespace: monitoring # we are patching from default namespace
      
    4. יוצרים קובץ kustomization.yaml שמחיל את התיקון ומשנה את מרחב השמות של משאבים אחרים במניפסט.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. יוצרים את מרחב השמות monitoring אם הוא לא קיים. אפשר להשתמש בשם אחר למרחב השמות, אבל אם עושים את זה, צריך לשנות גם את הערך של namespace במניפסטים של YAML מהשלבים הקודמים.

      kubectl create namespace monitoring
      
    6. מחילים את מניפסט Kustomize באמצעות הפקודות הבאות:

      kubectl apply -k .
      
      until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \
      do date; sleep 1; echo ""; done

      הפקודה השנייה נחסמת עד שמשאבי ה-CRD יהיו זמינים באשכול.

    7. יוצרים את קובץ המניפסט של המשאבים שנדרשים להגדרת שרת Prometheus שסורק מדדים מ-Config Sync.

      # config-sync-monitoring.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: prometheus-config-sync
      rules:
      - apiGroups: [""]
        resources:
        - nodes
        - services
        - endpoints
        - pods
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources:
        - configmaps
        verbs: ["get"]
      - nonResourceURLs: ["/metrics"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-config-sync
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-config-sync
      subjects:
      - kind: ServiceAccount
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        replicas: 2
        serviceAccountName: prometheus-config-sync
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          prometheus: config-sync
      --- 
      --- 
      
    8. מחילים את המניפסט באמצעות הפקודות הבאות:

      kubectl apply -f config-sync.yaml
      
      until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \
      do sleep 1; done
      

      הפקודה השנייה נחסמת עד שה-Pods פועלים.

    9. כדי לוודא שההתקנה בוצעה, אפשר להעביר את יציאת האינטרנט של שרת Prometheus למחשב המקומי.

      kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
      

      עכשיו אפשר לגשת לממשק המשתמש של Prometheus באינטרנט בכתובת http://localhost:9190.

    10. מסירים את הספרייה הזמנית.

      cd ..
      rm -rf config-sync-monitor
      

מדדים זמינים של Prometheus

‫סנכרון תצורות אוסף את המדדים הבאים ומעמיד אותם לרשות Prometheus. בעמודה תוויות מפורטות כל התוויות שרלוונטיות לכל מדד. מדדים ללא תוויות מייצגים מדידה אחת לאורך זמן, ומדדים עם תוויות מייצגים כמה מדידות, אחת לכל שילוב של ערכי תוויות.

אם הטבלה הזו לא מסונכרנת, אפשר לסנן את המדדים לפי קידומת בממשק המשתמש של Prometheus. כל המדדים מתחילים בתחילית config_sync_.

שם סוג תוויות תיאור
config_sync_api_duration_seconds_bucket היסטוגרמה status, operation התפלגות זמן האחזור של קריאות לשרת API (מחולקת לקטגוריות לפי משך כל מחזור)
config_sync_api_duration_seconds_count היסטוגרמה status, operation התפלגות זמן האחזור של קריאות לשרת API (ללא התייחסות למשך)
config_sync_api_duration_seconds_sum היסטוגרמה status, operation סכום משכי הזמן של כל הקריאות לשרת API
config_sync_apply_duration_seconds_bucket היסטוגרמה commit, status התפלגות זמן האחזור של החלת משאבים שהוצהרו ממקור האמת על אשכול (מחולק לדליים לפי משך כל מחזור)
config_sync_apply_duration_seconds_count היסטוגרמה commit, status התפלגות זמן האחזור של החלת משאבים שהוגדרו ממקור מהימן על אשכול (תוך התעלמות מהמשך)
config_sync_apply_duration_seconds_sum היסטוגרמה commit, status סכום משכי הזמן של כל זמני האחזור של החלת משאבים שהוגדרו ממקור האמת על אשכול
config_sync_apply_operations_total הצעה נגדית פעולה, סטטוס, בקר מספר הפעולות שבוצעו כדי לסנכרן משאבים ממקור האמת לאשכול
config_sync_cluster_scoped_resource_count מד resourcegroup מספר המשאבים בהיקף אשכול ב-ResourceGroup
config_sync_crd_count מד resourcegroup מספר ה-CRD בקבוצת משאבים
config_sync_declared_resources מד להוריד לביצוע (Commit) מספר המשאבים שהוצהרו שנותחו מ-Git
config_sync_internal_errors_total הצעה נגדית מקור מספר השגיאות הפנימיות שהופעלו על ידי סנכרון תצורות. יכול להיות שהמדד לא יופיע אם לא קרתה שגיאה פנימית
config_sync_kcc_resource_count מד resourcegroup מספר המשאבים של Config Connector ב-ResourceGroup
config_sync_last_apply_timestamp מד commit, status חותמת הזמן של פעולת ההחלה האחרונה
config_sync_last_sync_timestamp מד commit, status חותמת זמן של הסנכרון האחרון מ-Git
config_sync_parser_duration_seconds_bucket היסטוגרמה סטטוס, טריגר, מקור התפלגות זמן האחזור של שלבים שונים שקשורים לסנכרון ממקור האמת לאשכול
config_sync_parser_duration_seconds_count היסטוגרמה סטטוס, טריגר, מקור התפלגות זמן האחזור של שלבים שונים שקשורים לסנכרון ממקור האמת לאשכול (ללא התייחסות למשך הזמן)
config_sync_parser_duration_seconds_sum היסטוגרמה סטטוס, טריגר, מקור סכום זמני האחזור של שלבים שונים שקשורים לסנכרון ממקור האמת לאשכול
config_sync_pipeline_error_observed מד name, reconciler, component הסטטוס של משאבים מותאמים אישית של RootSync ו-RepoSync. הערך 1 מציין כשל
config_sync_ready_resource_count מד resourcegroup המספר הכולל של משאבים מוכנים ב-ResourceGroup
config_sync_reconcile_duration_seconds_bucket היסטוגרמה סטטוס התפלגות זמן האחזור של אירועי התאמה שטופלו על ידי מנהל ההתאמה (מחולק לקטגוריות לפי משך כל שיחה)
config_sync_reconcile_duration_seconds_count היסטוגרמה סטטוס התפלגות זמן האחזור של אירועי התאמה שטופלו על ידי מנהל ההתאמה (בלי להתייחס למשך)
config_sync_reconcile_duration_seconds_sum היסטוגרמה סטטוס סכום משכי הזמן של כל אירועי השהיה של התאמה שטופלו על ידי מנהל ההתאמה
config_sync_reconciler_errors מד component, errorclass מספר השגיאות שנתקלו בהן במהלך סינכרון המשאבים ממקור האמת לאשכול
config_sync_remediate_duration_seconds_bucket היסטוגרמה סטטוס התפלגות השהיות של אירועי סנכרון של כלי התיקון (מחולקת לקטגוריות לפי משך)
config_sync_remediate_duration_seconds_count היסטוגרמה סטטוס חלוקת זמן האחזור של אירועי סנכרון של כלי התיקון (ללא התייחסות למשך הזמן)
config_sync_remediate_duration_seconds_sum היסטוגרמה סטטוס סכום משכי הזמן של כל אירועי ההשהיה של תהליך התיקון
config_sync_resource_count מד resourcegroup מספר המשאבים שנמצאים במעקב על ידי ResourceGroup
config_sync_resource_conflicts_total הצעה נגדית להוריד לביצוע (Commit) מספר ההתנגשויות של משאבים שנובעות מחוסר התאמה בין המשאבים שבמטמון לבין משאבי האשכול. יכול להיות שהמדד לא יופיע אם לא היה ניגוד משאבים
config_sync_resource_fights_total הצעה נגדית מספר המשאבים שמסונכרנים בתדירות גבוהה מדי. יכול להיות שהמדד לא יופיע אם לא הייתה תחרות על משאבים
config_sync_resource_group_total מד מספר משאבי ResourceGroup CR
config_sync_resource_ns_count מד resourcegroup מספר מרחבי השמות שמשמשים משאבים ב-ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. היסטוגרמה stallreason התפלגות הזמן של תהליך ההתאמה של CR מסוג ResourceGroup (מחולק לדליים לפי משך)
config_sync_rg_reconcile_duration_seconds_count היסטוגרמה stallreason חלוקת הזמן של תהליך ההתאמה של ResourceGroup CR (ללא התחשבות במשך הזמן)
config_sync_rg_reconcile_duration_seconds_sum היסטוגרמה stallreason סכום כל הזמן של התאמת CR של ResourceGroup
config_sync_kustomize_build_latency_bucket היסטוגרמה התפלגות זמן האחזור של kustomize build זמן הביצוע (מחולק לקטגוריות לפי משך כל פעולה)
config_sync_kustomize_build_latency_count היסטוגרמה התפלגות השהייה של זמן הביצוע של kustomize build (ללא משך)
config_sync_kustomize_build_latency_sum היסטוגרמה סכום של כל זמן ההפעלה של kustomize build
config_sync_kustomize_ordered_top_tier_metrics מד top_tier_field שימוש במשאבים, ב-Generators, ב-SecretGenerator, ב-ConfigMapGenerator, ב-Transformers וב-Validators
config_sync_kustomize_builtin_transformers מד k8s_builtin_transformer שימוש בטרנספורמציות מובנות שקשורות למטא-נתונים של אובייקטים ב-Kubernetes
config_sync_kustomize_resource_count מד מספר המשאבים שמוצגים על ידי kustomize build
config_sync_kustomize_field_count מד field_name מספר הפעמים שנעשה שימוש בשדה מסוים בקובצי ההתאמה האישית
config_sync_kustomize_patch_count מד patch_field מספר הטלאים בשדות patches, patchesStrategicMerge ו-patchesJson6902
config_sync_kustomize_base_count מד base_source מספר בסיסים מרוחקים ומקומיים
kustomize_deprecating_field_count מד deprecating_field שימוש בשדות שעשויים לצאת משימוש
kustomize_simplification_adoption_count מד simplification_field שימוש בתמונות, בעותקים ובהחלפות של טרנספורמציות פשוטות
kustomize_helm_inflator_count מד helm_inflator השימוש ב-Helm ב-Kustomize, באמצעות השדות המובנים או הפונקציה המותאמת אישית

דוגמאות לתהליכי ניפוי באגים ב-Prometheus

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

הגדרות שאילתה לפי סטטוס

reconciler התהליך מספק מדדים ברמה גבוהה שנותנים תובנות שימושיות לגבי תצוגה כוללת של אופן הפעולה של סנכרון תצורות באשכול. תוכלו לראות אם אירעו שגיאות, ואפילו להגדיר התראות לגביהן.

config_sync_reconciler_errors

שאילתת מדדים לפי כלי ההתאמה

אם אתם משתמשים בממשקי ה-API של סנכרון תצורות RootSync ו-RepoSync, אתם יכולים לעקוב אחרי אובייקטים של RootSync ו-RepoSync. אובייקטים של RootSync ו-RepoSync מצוידים במדדים ברמה גבוהה, שנותנים תובנות שימושיות לגבי אופן הפעולה של סנכרון תצורות באשכול. כמעט כל המדדים מתויגים לפי שם הכלי לאימות נתונים, כך שאפשר לראות אם התרחשו שגיאות ולהגדיר התראות לגביהן ב-Prometheus.

כאן אפשר לראות את הרשימה המלאה של תוויות המדדים הזמינות לסינון.

ב-Prometheus, אפשר להשתמש במסננים הבאים עבור RootSyncs או RepoSyncs:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

שאילתות על פעולות ייבוא וסנכרון לפי סטטוס

ב-Prometheus, אפשר להשתמש בשאילתות הבאות:

# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}

# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}

אפשר גם לבדוק את המדדים של תהליכי המקור והסנכרון עצמם:

config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}

מעקב אחרי משאבים באמצעות Cloud de Confiance by S3NS שירות מנוהל ל-Prometheus

השירות המנוהל של Google Cloud ל-Prometheus הוא פתרון מנוהל מלא לריבוי עננים למדדים של Prometheus. Cloud de Confiance by S3NSהוא תומך בשני מצבים לאיסוף נתונים: איסוף מנוהל (המצב המומלץ) או איסוף נתונים בהטמעה עצמית. כדי להגדיר את סנכרון תצורות לניטור באמצעות השירות המנוהל של Google Cloud ל-Prometheus במצב איסוף מנוהל, פועלים לפי השלבים הבאים.

  1. מפעילים את Managed Prometheus באשכול לפי ההוראות שבמאמר הגדרת איסוף מנוהל.

  2. שומרים את קובץ המניפסט לדוגמה הבא בשם pod-monitoring-config-sync-monitoring.yaml. במניפסט הזה מוגדר משאב PodMonitoring לגירוד המדדים של סנכרון תצורות ביציאה 8675 של ה-Pod‏ otel-collector-* במרחב השמות config-management-monitoring. המשאב PodMonitoring משתמש בבורר תוויות של Kubernetes כדי למצוא את otel-collector-* ה-Pod.

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: config-sync-monitoring
      namespace: config-management-monitoring
    spec:
      selector:
        matchLabels:
          app: opentelemetry
          component: otel-collector
      endpoints:
      - port: 8675
        interval: 10s
    
  3. מחילים את המניפסט על האשכול:

    kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
    

  4. כדי לוודא שהנתונים שלכם ב-Prometheus מיוצאים, פועלים לפי ההוראות במאמר נתונים של שירות מנוהל ל-Prometheus ב-Cloud Monitoring כדי להשתמש בדף Metrics Explorer במסוף Cloud de Confiance .

המאמרים הבאים