שימוש במדדי רמת שירות (SLI) של סנכרון תצורות

בדף הזה מוסבר איך להשתמש במדדי רמת השירות (SLI) של סנכרון תצורות.

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

‫סנכרון תצורות Pods עם מספר שגוי של קונטיינרים

אם מספר המאגרים של Config Sync Pod נמוך מהצפוי, יכול להיות ש-Config Sync לא פועל. אתם יכולים להגדיר התראה כדי לזהות את הבעיה הזו ולבדוק את ה-Pod של סנכרון תצורות כדי להבין למה חסרים קונטיינרים מסוימים. כשמגדירים את ההתראות, מומלץ להגדיר את מרווח הזמן ל-5 דקות לפחות כדי להימנע מהתראות מיותרות. לדוגמה, במהלך שדרוג, יכול להיות שמספר הקונטיינרים של Pod יירד מתחת ליעד.

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

דוגמאות לכללי התראות ב-Prometheus

בסעיף הזה יש דוגמאות להודעות שמתקבלות כשקיימים פודים עם מספר לא נכון של קונטיינרים.

  • כדי לקבל התראה כשמספר הקונטיינרים של Pod של מאחד שורש נמוך מהמספר הצפוי, יוצרים את כלל ההתראה הבא:

    alert: RootReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"root-reconciler-.*"}) < 4
    # Setting the for field to 5m to avoid unnecessary alerts.
    for: 5m
    
  • כדי לקבל התראה כשמספר הקונטיינרים של Pod של namespace reconciler נמוך מהמספר הצפוי, יוצרים את כלל ההתראה הבא:

    alert: NamespaceReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"ns-reconciler-.*"}) < 4
    for: 5m
    
  • כדי לקבל התראה כשמספר הקונטיינרים של Pod של reconciler-manager נמוך מהמספר הצפוי, צריך ליצור את כלל ההתראה הבא:

    alert: ReconcilerManagerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"reconciler-manager-.*"}) < 2
    for: 5m
    

מיכלים של סנכרון תצורות לא תקינים

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

דוגמה לכלל התראה ב-Prometheus

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

alert: TooManyContainerRestarts
expr: kubernetes_io:container_restart_count{namespace_name=~"config-management-system|config-management-monitoring|resource-group-system"} > 3

שגיאות חוזרות ב-סנכרון תצורות

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

דוגמה לכלל התראה ב-Prometheus

כדי לקבל התראה כשמתרחשות שגיאות מתמשכות במשך שעתיים ב-reconciler של שורש או של מרחב שמות, צריך ליצור את כלל ההתראה הבא:

alert: PersistentConfigSyncErrors
expr: sum by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace, errorclass) (config_sync_reconciler_errors) > 0
for: 2h

בדוגמה הזו:

  • התווית configsync_sync_kind יכולה לקבל את הערכים הבאים: RootSync או RepoSync.
  • התווית configsync_sync_name מציינת את השם של אובייקט RootSync או RepoSync.
  • התווית configsync_sync_namespace מציינת את מרחב השמות של אובייקט RootSync או RepoSync.
  • התווית errorclass יכולה לקבל שלושה ערכים: 1xxx,‏ 2xxx ו-9xxx. כל תווית מתאימה לסוג שגיאה אחר:

    • שגיאות 1xxx: שגיאות בהגדרות שאפשר לתקן
    • 2xxx שגיאות: שגיאות בצד השרת שאולי לא תוכלו לתקן
    • שגיאות 9xxx: שגיאות פנימיות שאי אפשר לתקן

‫סנכרון תצורות נתקע בשלב הסנכרון

ניסיון סנכרון ב'סנכרון תצורות' אינו ניתן להפרעה. אם ההגדרות במקור גדולות או מורכבות מדי (לדוגמה, אם המקור מכיל מספר גדול של משאבי Config Connector), יכול להיות שיעבור יותר משעה עד שהסנכרון של ההגדרות האלה עם האשכול יסתיים. עם זאת, אם עברו שעתיים מאז הסנכרון האחרון שהושלם בהצלחה, יכול להיות שמשהו לא בסדר.

כדי לבדוק אם ניסיון הסנכרון הנוכחי עדיין מתבצע, בודקים את הסטטוס של RootSync או RepoSync. אם ניסיון הסנכרון הנוכחי עדיין מתבצע, אפשר לפצל את מקור האמת כדי שכל מקור אמת יוכל להסתנכרן מהר יותר, או להגדיל את סף ההתראה משעתיים למשך זמן ארוך יותר. אם אין ניסיון סנכרון תצורות פעיל, כנראה שיש בעיה ב-Config Sync reconciler, כי הוא אמור לנסות שוב ושוב עד שהוא מצליח לסנכרן את ההגדרות מהמקור לאשכול. במקרה כזה, צריך להעביר את הבעיה לGoogle Cloud תמיכה.

דוגמה לכלל התראה ב-Prometheus

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

  alert: OldLastSyncTimestamp
  # The status label indicates whether the last sync succeeded or not.
  # Possible values: success, error.
  expr: time() - topk by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace) (1, config_sync_last_sync_timestamp{status="success"}) > 7200

ירידות בביצועים של סנכרון תצורות

יכול להיות שיהיו ירידות בביצועים של סנכרון תצורות אחרי שדרוג. יכולות להיות רגרסיות בביצועים בדרכים הבאות:

  • עלייה בתקורה של זמן ההתאמה של אובייקט RootSync או RepoSync
  • עלייה בתקורה של הזמן שנדרש לתיאום של אובייקט ResourceGroup
  • עלייה בתקורה של הזמן שנדרש לסנכרון הגדרות ממקור לאשכול

הזמן שנדרש לתיאום של אובייקט RootSync או RepoSync

הפריסה reconciler-manager מבצעת התאמה בין אובייקטים של RootSync ו-RepoSync. אפשר להשתמש באחוזון ה-90 של תקורה הזמן של תהליך ההתאמה של אובייקט RootSync או RepoSync כדי לזהות רגרסיות בביצועים.

דוגמאות לכללי התראות ב-Prometheus

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

בדוגמאות הבאות נשלחת התראה אם האחוזון ה-90 של זמן התקורה של התאמת אובייקט RootSync או RepoSync במהלך 5 השעות האחרונות הוא מעל 0.1 שניות למשך 10 דקות. אפשר ליצור כללי התראה למעקב אחרי כל האשכולות או אחרי אשכול אחד.

  • כדי לעקוב אחרי כל האשכולות, יוצרים את הכלל הבא:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • כדי לעקוב אחרי אשכול יחיד, יוצרים את הכלל הבא:

    alert: HighLatencyReconcileRootSyncAndRepoSyncClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    

תקורה של זמן שנדרש לתיאום אובייקט ResourceGroup

הפריסה ב-resource-group-controller-manager מבצעת התאמה של אובייקטים מסוג ResourceGroup. אפשר להשתמש באחוזון ה-90 של תקורה הזמן של תיאום ResourceGroup כדי לזהות רגרסיות בביצועים.

דוגמאות לכללי התראות ב-Prometheus

הקטע הזה כולל כללי התראה של Prometheus שמודיעים לכם מתי יש רגרסיות בביצועים של הפריסה resource-group-controller-manager.

בדוגמאות הבאות נשלחת התראה אם האחוזון ה-90 של זמן התקורה של התאמת אובייקט ResourceGroup במהלך 5 השעות האחרונות הוא מעל 5 שניות למשך 10 דקות. אפשר ליצור כללי התראה למעקב אחרי כל האשכולות או אחרי אשכול אחד.

  • כדי לעקוב אחרי כל האשכולות, יוצרים את הכלל הבא:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • כדי לעקוב אחרי אשכול יחיד, יוצרים את הכלל הבא:

    alert: HighLatencyReconcileResourceGroupClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    

הזמן שנדרש לסנכרון הגדרות ממקור לאשכול

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

דוגמאות לכללי התראות ב-Prometheus

הקטע הזה כולל כללי התראה של Prometheus שמודיעים לכם כשפריסת ה-Deployment של ה-reconciler של השורש או של מרחב השמות כוללת רגרסיות בביצועים.

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

  • כדי לעקוב אחרי כל האשכולות, יוצרים את הכלל הבא:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • כדי לעקוב אחרי אשכול יחיד, יוצרים את הכלל הבא:

    alert: HighApplyDurationRootSyncRepoSyncLevel
    expr: histogram_quantile(0.9, sum by (cluster, configsync_sync_kind,configsync_sync_name, configsync_sync_namespace, le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m