בדף הזה מוסבר איך להשתמש במדדי רמת השירות (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