בדף הזה מוסבר איך להשתמש במדדי Prometheus כדי ליצור מדדי זמינות וחביון של SLI ב-Cloud Monitoring, ואיך להשתמש במדדים האלה כדי ליצור SLO.
היסודות של Prometheus
Prometheus הוא פתרון מוביל בקוד פתוח למעקב אחרי מדדים והתראות.
Prometheus תומך בנתונים רב-ממדיים עם מזהים של זוגות מפתח/ערך למדדים, מספק את שפת השאילתות PromQL ותומך בשילובים רבים באמצעות exporters למוצרים אחרים.
כדי להתחיל להשתמש ב-Prometheus עם Monitoring, מומלץ להשתמש ב-Google Cloud Managed Service for Prometheus.
מדדים
Prometheus תומך בסוגי המדדים הבאים:
- מונה: ערך יחיד שאפשר רק להגדיל אותו באופן מונוטוני או לאפס אותו ל-0 בהפעלה מחדש.
- מד: ערך מספרי יחיד שאפשר להגדיר באופן שרירותי.
- היסטוגרמה: קבוצה של דליים שניתנים להגדרה לדגימת תצפיות ולרישום ערכים בטווחים. ההיסטוגרמה מספקת גם סכום של כל הערכים שנצפו.
- סיכום: כמו היסטוגרמה, אבל הוא גם מחשב אחוזונים שניתנים להגדרה על פני חלון זמן מתגלגל.
מידע נוסף זמין במאמר בנושא סוגי מדדים.
יצירת מדדים ל-SLI
אם האפליקציה שלכם פולטת מדדים של Prometheus, אתם יכולים להשתמש בהם בשביל SLI.
- כדי לראות את מדדי ה-SLI של הזמינות לפי בקשה ואת מספר השגיאות, אפשר להתחיל עם מדדי ה-counter של Prometheus.
- ל-SLI של זמן האחזור, אפשר להשתמש בהיסטוגרמה של Prometheus או במדדי סיכום.
כדי לאסוף מדדים של Prometheus באמצעות השירות המנוהל של Google Cloud ל-Prometheus, אפשר לעיין במסמכי התיעוד בנושא הגדרת איסוף מדדים מנוהל או בפריסה עצמית.
כשיוצרים SLO ב Google Cloud מסוף, סוגי ה-SLO שמוגדרים כברירת מחדל לזמינות ולזמן האחזור לא כוללים מדדים של Prometheus. כדי להשתמש במדד של Prometheus, יוצרים יעד SLO מותאם אישית ואז בוחרים מדד של Prometheus עבור ה-SLI.
מדדי Prometheus מתחילים ב-prometheus.googleapis.com/.
מדדים ל-GKE
איסוף מנוהל של מדדים על ידי השירות המנוהל של Google Cloud ל-Prometheus מופעל כברירת מחדל ב-GKE. אם אתם מפעילים את התוסף בסביבת GKE שבה איסוף מנוהל לא מופעל כברירת מחדל, אתם יכולים להפעיל איסוף מנוהל באופן ידני. כשאוסף מנוהל מופעל, הרכיבים בתוך האשכול פועלים אבל מדדים לא נוצרים עד שפורסים משאב PodMonitoring שסורק נקודת קצה תקפה של מדדים או עד שמפעילים אחד מחבילות המדדים המנוהלות.
חבילת מדדי מישור הבקרה כוללת מדדים שימושיים שמצביעים על תקינות המערכת. מפעילים את איסוף המדדים של מישור הבקרה כדי להשתמש במדדים האלה לזמינות, לחביון ול-SLI אחרים.
- אפשר להשתמש במדדים של שרת API כדי לעקוב אחרי העומס על שרת ה-API, אחרי החלק היחסי של בקשות שרת ה-API שמחזירות שגיאות ואחרי זמן האחזור של התגובה לבקשות שמתקבלות בשרת ה-API.
- אפשר להשתמש במדדים של מתזמן כדי להגיב באופן יזום לבעיות בתזמון כשאין מספיק משאבים ל-Pods בהמתנה.
מדדים של SLI לזמינות
כדי להגדיר SLI של זמינות מבוססת-בקשות ב-Cloud Monitoring API, משתמשים במבנה TimeSeriesRatio כדי להגדיר יחס בין בקשות 'טובות' או 'רעות' לבין סך הבקשות. היחס הזה משמש בשדה goodTotalRatio של מבנה RequestBasedSli.
האפליקציה צריכה לפלוט מדדי Prometheus שאפשר להשתמש בהם כדי ליצור את היחס הזה. האפליקציה צריכה להפיק לפחות שניים מהנתונים הבאים:
מדד שסופר את סך האירועים. אפשר להשתמש במדד הזה ביחס
totalServiceFilter.אפשר להשתמש במונה Prometheus שמוגדר להגדלה בכל אירוע.
מדד שסופר אירועים 'לא טובים'. אפשר להשתמש במדד הזה ביחס
badServiceFilter.אפשר להשתמש במונה של Prometheus שמוגדר להגדלה בכל פעם שמתרחשת שגיאה או אירוע 'לא תקין' אחר.
מדד שסופר אירועים 'טובים'. אפשר להשתמש במדד הזה ביחס
goodServiceFilter.אפשר להשתמש במונה Prometheus שמוסיף ערך לכל אירוע מוצלח או לכל אירוע אחר שמוגדר כ'טוב'.
מדדים של SLI לזמן אחזור
כדי לבטא SLI של זמן אחזור מבוסס-בקשה ב-Cloud Monitoring API, צריך ליצור מבנה DistributionCut. המבנה הזה משמש בשדה distributionCut של מבנה RequestBasedSli.
האפליקציה צריכה לפלוט מדד של Prometheus שאפשר להשתמש בו כדי ליצור את ערך החלוקה. לשם כך, אפשר להשתמש בהיסטוגרמה או בסיכום של Prometheus. כדי להבין איך להגדיר את הדליים בצורה מדויקת כדי למדוד אם התשובות שלכם עומדות ביעד ה-SLO, אפשר לעיין בסוגי המדדים במסמכי התיעוד של Prometheus.
דוגמה
בדוגמה הבאה של JSON נעשה שימוש במדד prometheus.googleapis.com/apiserver_request_duration_seconds של מישור הבקרה של GKE כדי ליצור יעד רמת שירות (SLO) של זמן אחזור לשירות. בהתאם להסכם רמת השירות, 98% מזמן האחזור של התגובות צריך להיות פחות מ-50 שניות בחודש קלנדרי.
{
"displayName": "98% Calendar month - Request Duration Under 50s",
"goal": 0.98,
"calendarPeriod": "MONTH",
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter": "metric.type=\"prometheus.googleapis.com/apiserver_request_duration_seconds/histogram\" resource.type=\"prometheus_target\"",
"range": {
"min": "-Infinity",
"max": 50
}
}
}
}
}
המאמרים הבאים
- יצירת יעד SLO
- מידע נוסף על השירות המנוהל של Google Cloud ל-Prometheus
- מידע נוסף על מדדים של מישור הבקרה