במדדים עם סוג הערך Distribution ב-Cloud Monitoring, מדידות בנפח גבוה מקובצות לטווחי ערכים שנקראים קטגוריות, במקום לתעד כל נקודה על הגרף בנפרד. ספירת קטגוריות של הקלטות כהיסטוגרמה מאפשרת לשירותים לסכם קבוצות גדולות של מדידות, כדי שתוכלו לנתח נתונים סטטיסטיים כמו ממוצעים ואחוזונים.
בתרשים מפת חום, אפשר להוסיף שכבת-על של האחוזונים ה-50, ה-95 וה-99 מסרגל הכלים של התרשים. כדי להציג מדד עם ערך התפלגות בתרשים קו, משתמשים במיישר שבוחר אחוזון כדי להמיר כל התפלגות לערך מספרי.
הדוגמאות במסמך הזה מראות איך מספר הקטגוריות, רוחב הקטגוריות, התפלגות המדידות וגודל המדגם קובעים את ערכי האחוזונים המשוערים בלי לאחסן מדידות נפרדות.
דוגמה עם נתונים סינתטיים
נניח שיש לנו מודל קטגוריות Exponential עם קנה מידה של 1, גורם גדילה של 2 ו-10 קטגוריות סופיות. ההיסטוגרמה הזו מכילה 12 קטגוריות: 10 קטגוריות סופיות, קטגוריה אחת שמציינת רק גבול עליון וקטגוריה אחת שמציינת רק גבול תחתון. בדוגמה הזו, הקטגוריה הסופית עם האינדקס n+1 רחבה פי שניים מהקטגוריה הסופית עם האינדקס n.
בדוגמאות הבאות אפשר לראות שרוחב הקטגוריה קובע את השגיאה המקסימלית בין האחוזון המחושב לבין המדידות. הם גם מראים שמספר הדגימות בהיסטוגרמה הוא חשוב. לדוגמה, אם מספר הדגימות קטן מ-20, האחוזונים ה-95 וה-99 תמיד נמצאים באותו קטגוריה.
מקרה 1: המספר הכולל של הדגימות הוא 1
כשיש מדידה אחת, שלושת ערכי האחוזונים שונים, אבל הם מציגים רק את האחוזונים ה-50, ה-95 וה-99 של אותו דלי. אי אפשר לקבוע את השגיאה בין האומדן לבין המדידות בפועל כי המדידה לא ידועה.
לדוגמה, נניח שההיסטוגרמה של המדידות היא כמו שמוצג בטבלה הבאה:
| מספר הקטגוריה | גבול תחתון | גבול עליון | ספירה | טווח אחוזים |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | |
| 1 | 1 | 2 | 0 | 0 |
| 2 | 2 | 4 | 0 | 0 |
| 3 | 4 | 8 | 0 | 0 |
| 4 | 8 | 16 | 0 | 0 |
| 5 | 16 | 32 | 0 | 0 |
| 6 | 32 | 64 | 0 | 0 |
| 7 | 64 | 128 | 0 | 0 |
| 8 | 128 | 256 | 1 | 0 - 100 |
| 9 | 256 | 512 | 0 | 0 |
| 10 | 512 | 1024 | 0 | 0 |
| 11 | 1024 | 0 | 0 |
כדי לחשב את האחוזון ה-50:
- משתמשים בספירות של הקטגוריות כדי לקבוע איזו קטגוריה מכילה את האחוזון ה-50. בדוגמה הזו, קטגוריה מספר 8 מכילה את האחוזון ה-50.
מחשבים את האומדן לפי הכלל הבא:
pth percentile = bucket_low + (bucket_up - bucket_low)*(p - p_low)/(p_up - p_low)בביטוי הקודם,
p_lowו-p_upהם הגבולות התחתון והעליון של טווח האחוזונים של הקטגוריה. באופן דומה,bucket_lowו-bucket_upהם הגבולות התחתון והעליון של הקטגוריה. הערכים שלp_lowו-p_upתלויים באופן שבו הספירות מפוזרות בין הקטגוריות השונות.
לדוגמה, האחוזון ה-50 מחושב כך:
50th percentile = 128 + (256-128)*(50-0)/(100-0)
= 128 + 128 * 50 / 100
= 128 + 64
= 192כדי לחשב את האחוזון ה-95, מחליפים את 50 ב-95 בביטוי הקודם. בדוגמה הזו, שבה יש בדיוק דגימה אחת, האחוזונים הם:
| מאון | מספר הקטגוריה | ערך |
|---|---|---|
| 50 | 8 | 192 |
| 95 | 8 | 249.6 |
| 99 | 8 | 254.7 |
אפשר להגביל את השגיאה בין האומדן לבין המדידות בפועל, אבל אי אפשר לקבוע אותה כי המדידה לא ידועה.
מקרה 2: המספר הכולל של הדגימות הוא 10
כשיש 10 דגימות, יכול להיות שהאחוזון ה-50 יהיה בקטגוריה שונה מהאחוזונים ה-95 וה-99. עם זאת, אין מספיק מדידות כדי שהאחוזונים ה-95 וה-99 יהיו בקטגוריות שונות.
לדוגמה, נניח שההיסטוגרמה של המדידות היא כמו שמוצג בטבלה הבאה:
| מספר הקטגוריה | גבול תחתון | גבול עליון | ספירה | טווח אחוזים |
|---|---|---|---|---|
| 0 | 1 | 4 | 0 - 40 | |
| 1 | 1 | 2 | 2 | 40 - 60 |
| 2 | 2 | 4 | 1 | 60 - 70 |
| 3 | 4 | 8 | 1 | 70 - 80 |
| 4 | 8 | 16 | 1 | 80 - 90 |
| 5 | 16 | 32 | 0 | 0 |
| 6 | 32 | 64 | 0 | 0 |
| 7 | 64 | 128 | 0 | 0 |
| 8 | 128 | 256 | 1 | 90 - 100 |
| 9 | 256 | 512 | 0 | 0 |
| 10 | 512 | 1024 | 0 | 0 |
| 11 | 1024 | 0 | 0 |
אתם יכולים להשתמש בתהליך שתואר קודם כדי לחשב את האחוזונים ה-50, ה-95 וה-99. לדוגמה, האחוזון ה-50, שנמצא בקטגוריה מספר 1, מחושב באופן הבא:
50th percentile = 1 + (2-1)*(50-40)/(60-40)
= 1 + (1 * 10 / 20)
= 1 + 0.5
= 1.5
באופן דומה, האחוזון ה-95 מחושב כך:
95th percentile = 128 + (256-128)*(95-90)/(100-90)
= 128 + 128 * 5 / 10
= 128 + 64
= 192
אפשר לחשב את האחוזונים באמצעות התהליך שמתואר למעלה. כל שורה בטבלה הבאה מפרטת אחוזון, את הקטגוריה המתאימה ואת הערך המחושב:
| מאון | מספר הקטגוריה | ערך | שגיאה מקסימלית |
|---|---|---|---|
| 50 | 1 | 1.5 | 0.5 |
| 95 | 8 | 192 | 74 |
| 99 | 8 | 243.2 | 115.2 |
בדוגמה הזו ובדוגמה הקודמת, האחוזון ה-95 נמצא בקטגוריה מספר 8, אבל חישוב האחוזון שונה. ההבדל נובע מהאופן שבו הדגימות מופצות. בדוגמה הראשונה, כל הדגימות נמצאות באותו קטגוריה, ואילו בדוגמה האחרונה, הדגימות נמצאות בקטגוריות שונות.
דוגמה עם נתונים אמיתיים
בקטע הזה מופיעה דוגמה שממחישה איך אפשר לקבוע את מודל הקטגוריות שמשמש מדד מסוים. בקטע הזה מוסבר גם איך אפשר להעריך את השגיאה הפוטנציאלית בערכי האחוזונים המחושבים.
זיהוי מודל הקטגוריות
כדי לקבוע את הקטגוריות שבהן נעשה שימוש במדד מסוים בפרק זמן ספציפי, צריך להפעיל את ה-method projects.timeSeries/list של Cloud Monitoring API.
לדוגמה, כדי לזהות את מודל הקטגוריות של מדד:
- נכנסים לדף האינטרנט של
projects.timeSeries/list. ב-APIs Explorer, מזינים את המסנן שמציין את המדד, שעת ההתחלה ושעת הסיום.
לדוגמה, כדי לקבל מידע על המדד שמאחסן את זמני האחזור של בקשות API, מזינים את הפרטים הבאים:
metric.type="serviceruntime.googleapis.com/api/request_latencies" resource.type="consumed_api"בדוגמה הזו, שדה הסינון מציין סוג מדד וסוג משאב. למידע נוסף על המסננים האלה, ראו מסנני מעקב.
לוחצים על Enter.
התגובה הבאה מה-API של list היא למדד עם ערך התפלגות שזמין בפרויקט אחד ב- Google Cloud :
{
"timeSeries": [
{
"metric": {...},
"resource": {...},
"metricKind": "DELTA",
"valueType": "DISTRIBUTION",
"points": [
{
"interval": {
"startTime": "2020-11-03T15:05:00Z",
"endTime": "2020-11-03T15:06:00Z"
},
"value": {
"distributionValue": {
"count": "3",
"mean": 25.889,
"bucketOptions": {
"exponentialBuckets": {
"numFiniteBuckets": 66,
"growthFactor": 1.4,
"scale": 1
}
},
"bucketCounts": [
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"3"
]
}
}
},
בתגובה מה-API, השדה value מתאר את הנתונים שמאוחסנים במערך points. בשדות count ו-mean מדווח שבפרק הזמן שצוין היו 3 מדידות והערך הממוצע שלהן היה 25.889. בשדה bucketOptions אפשר לראות שהמודל האקספוננציאלי מוגדר עם 66 קטגוריות, קנה מידה של 1 וגורם גדילה של 1.4.
כדי לחשב את הגבולות התחתונים והעליונים של הקטגוריה עם האינדקס n, משתמשים בכללים הבאים:
- הסף התחתון (1 ≤ n < N) = קנה מידה * (גורם צמיחה)(n-1)
- גבול עליון (0 ≤ n < N-1) = קנה מידה * (גורם צמיחה)n
בביטויים הקודמים, N הוא המספר הכולל של הקטגוריות.
הקטגוריות של המדד הזה, יחד עם נקודת האמצע של כל קטגוריה, מוצגות בטבלה הבאה:
| הקטגוריה ה-n | גבול תחתון | גבול עליון | נקודת אמצע |
|---|---|---|---|
| 0 | 1 | לא רלוונטי | |
| 1 | 1 | 1.40 | 1.20 |
| 2 | 1.40 | 1.96 | 1.68 |
| ... | |||
| 9 | 14.76 | 20.66 | 17.71 |
| 10 | 20.66 | 28.93 | 24.79 |
| 11 | 28.93 | 40.50 | 34.71 |
| ... |
אימות חישובי האחוזונים
עכשיו, כשהגדרת הקטגוריה ידועה, אפשר לחזות את ערכי האחוזונים ה-50, ה-95 וה-99 לכל קבוצת מדידות. לדוגמה, אם יש דגימה אחת והיא נמצאת בדלי מספר 10, הערך של האחוזון ה-50 הוא 24.79.
כדי לאחזר את ערכי האחוזון ה-50, ה-95 וה-99 של המדד, אפשר להשתמש ב-method projects.timeSeries/list של ה-API ולכלול תקופת התאמה ומתאם. בדוגמה הזו, נבחרו ההגדרות הבאות:
- קשתיות:
ALIGN_PERCENTILE_50,ALIGN_PERCENTILE_95אוALIGN_PERCENTILE_99 - Alignment period: 60 s
בבחירה של ALIGN_PERCENTILE_50, כל ערך בסדרת הזמן הוא האחוזון ה-50 של קטגוריה:
{
"timeSeries": [
{
"metric": {...},
"resource": {...},
"metricKind": "GAUGE",
"valueType": "DOUBLE",
"points": [
{
"interval": {
"startTime": "2020-11-03T15:06:36Z",
"endTime": "2020-11-03T15:06:36Z"
},
"value": {
"doubleValue": 24.793256140799986
}
},
{
"interval": {
"startTime": "2020-11-03T15:05:36Z",
"endTime": "2020-11-03T15:05:36Z"
},
"value": {
"doubleValue": 34.710558597119977
}
},
{
"interval": {
"startTime": "2020-11-03T15:04:36Z",
"endTime": "2020-11-03T15:04:36Z"
},
"value": {
"doubleValue": 24.793256140799986
}
}
]
},
בשתיים מהדגימות, האחוזון ה-50 נמצא בקטגוריה 10, ובדגימה השלישית הוא נמצא בקטגוריה 11.
בטבלה הבאה מוצגות התוצאות של הפעלת ה-method projects.timeSeries/list עם מיישרים שונים. השורה הראשונה מתאימה למקרה שבו לא צוין aligner. אם לא מציינים מיישר, מוחזרים ערכי הממוצע והמודל של הקטגוריה. בשלוש השורות הבאות מפורטים הנתונים שמוחזרים כשהמיישר מוגדר לערכים ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95 ו-ALIGN_PERCENTILE_99:
| נתון סטטיסטי | דגימה ב-15:06 | דגימה ב-15:05 | דוגמה ב-15:04 |
|---|---|---|---|
| ממוצע | 25.889 | 33.7435 | לא זמין |
| האחוזון ה-50 | 24.79 | 34.71 | 24.79 |
| האחוזון ה-95 | 28.51 | 39.91 | 28.51 |
| האחוזון ה-99 | 28.84 | 40.37 | 28.84 |
כפי שניתן לראות בשתי הדוגמאות עם הנתונים הסינתטיים, ערכי האחוזונים תלויים באופן שבו הדגימות מופצות. אם כל הדגימות נמצאות באותו קטגוריה, האחוזון ה-50 הוא נקודת האמצע של אותה קטגוריה. אבל כשהדגימות נמצאות בקטגוריות שונות, ההתפלגות הזו משפיעה על האומדנים.
כדי לקבוע אם האחוזון ה-50 הוא אומדן סביר של הממוצע, אתם יכולים להשוות בין ערך הממוצע לבין האחוזון ה-50. הערך הממוצע מוחזר עם פרטי הקטגוריה.
המאמרים הבאים
במאמר מידע על מדדים עם ערכי התפלגות מוסבר איך להציג באופן חזותי מדדים עם ערכי התפלגות.