במאמר הזה נסביר על דגימה, כלומר על האפשרות לשלוח נתונים של יחידה לוגית למעקב ל-Cloud Trace. כשנתונים של טווח זמן נשלחים אל Cloud Trace, הטווח הזה נדגם. כשנתונים של כל יחידה לוגית למעקב במעקב מתועדים, המעקב הושלם. עם זאת, לעיתים קרובות יש חוסרים ביחידות לוגיות למעקב של נתוני מעקב, כי כל רכיב עם אינסטרומנטציה במערכת מעקב מבוזרת מחליט באופן עצמאי אם לתעד את היחידה הלוגית למעקב שהוא מעבד.
למרות שכל רכיב מקבל החלטה משלו לגבי הדגימה של הטווח שהוא מעבד, ההחלטה הזו יכולה להיות מושפעת מהחלטת הדגימה של הרכיב ברמת ההורה. לדוגמה, נניח שלכל רכיב יש כלל שאומר: "אם טווח האב נדגם, צריך לדגום את הטווח הנוכחי; אחרת, צריך לדגום 50% מהטווחים". בתרחיש הזה, הדברים הבאים נכונים:
- הטווח הבסיסי קובע אם כל הטווחים במעקב נדגמים.
- כשמבצעים דגימה של ה-span הבסיסי, מתבצעת דגימה של כל ה-spans ב-trace. לכן, המעקב הושלם.
רכיבים יכולים להעביר את החלטת הדגימה שלהם לרכיב הצאצא באמצעות הקשר.
לדוגמה, בכותרת traceparent של World Wide Web Consortium (W3C), הדגל sampled שומר את החלטת הדגימה של הרכיב העליון.
אל תתבלבלו בין דגימה לבין העברת הקשר. דגימה מתייחסת לשאלה אם רכיב מסוים מתעד נתונים על יחידה לוגית למעקב. הפצת הקשר מתייחסת לשאלה אם מידע על הטווח, כמו מזהה הטווח, מועבר לרכיבי צאצא.
אסטרטגיות דגימה
ההחלטות לגבי הדגימה יכולות להתבסס על תחילת הנתונים או על סוף הנתונים. בדגימה מבוססת-כותרת, ההחלטה לגבי הדגימה מתקבלת כשהבקשה מתקבלת על ידי הרכיב שמבצע את העיבוד של הטווח. בדגימה מבוססת-זנב, ההחלטה לגבי הדגימה מתעכבת עד שכל העקבה זמינה.
יכול להיות שתיתקלו בביטוי '100% דגימה' במסמכים של מערכות מעקב מבוזר. הביטוי הזה יכול להתייחס למעקב או לרכיב. כשמחילים את המאפיין הזה על מעקב, המשמעות היא שכל הטווחים נדגמו, או באופן שווה ערך, שהמעקב הושלם. כשמחילים את ההגדרה על רכיב, המשמעות היא שהרכיב דוגם כל טווח שהוא מעבד.
דגימה לפי מיקום הראש
בדרך כלל, דוגמים שמבוססים על ראש מוגדרים לדגום תמיד טווחים או להשתמש באסטרטגיית דגימה הסתברותית:
בתצורות של דגימה תמיד, כל הרכיבים שהשירות משתרע עליהם ויכולים לכתוב נתוני מעקב, דוגמים את הטווחים שהם מעבדים. מומלץ שכל העקבות יהיו מלאים, ולכן יהיה לכם את המידע הדרוש לפתרון בעיות. הגדרה כזו עלולה לגרום לכם לחרוג ממכסות או מתקרות העלויות של נפח האחסון.
בדגימה הסתברותית, לא כל טווחי הזמן נדגמים. ההתנהגות בפועל של הגישה הזו תלויה בהטמעה של הרכיב. ביישומים מסוימים, לכל הטווחים יש הסתברות זהה להידגם. במקרים אחרים, ההחלטה לגבי הדגימה של ה-parent משפיעה על הדגימה של ה-span.
יכול להיות שהמעקב לא יכלול את כל הטווחים. יכול להיות שהסיבה לכך היא שימוש בדגימה הסתברותית, או שהסיבה היא מכסה, או רכיבים שמבצעים עיבוד של בקשה אבל לא דוגמים את יחידה לוגית למעקב.
דגימה מבוססת-זנב
Cloud Trace לא תומך בדגימה מבוססת-זנב. החלטות לגבי דגימה צריכות להתקבל ברכיבים ששולחים נתונים ל-Cloud Trace.
אם רוצים להשתמש בדגימה מבוססת-זנב, אפשר להשתמש בשרת ביניים שמקבל מידע על מעקב ומעביר את הנתונים ל-Cloud Trace אחרי קבלת החלטה לגבי דגימה. לדוגמה, אפשר להשתמש ב-OpenTelemetry Collector עם Tail Sampling Processor כדי לקבל החלטה לגבי דגימה באיחור.
אם אתם מתכננים להשתמש בדגימה של הזנב, כדאי לשקול את הנקודות הבאות:
- צריך לאחסן את כל הטווחים במעקב לפני שמחליטים על דגימה. לכן, יכול להיות שתצטרכו נפח אחסון זמני גדול או שתחויבו בעלויות נוספות.
- באופן כללי, כל הרכיבים שיכולים ליצור טווחים למעקב צריכים להיות מתואמים. בדרך כלל, מפתחים שמשתמשים ב-OpenTelemetry מעבירים את כל הטווחים לאותו אוסף של אותו מזהה מעקב.
דגימה ושירותים Google Cloud
כל Google Cloud שירות מקבל החלטות לגבי דגימה באופן עצמאי, ולא כל Google Cloud השירותים מבצעים דגימה. כלומר, יכול להיות ששירות מסוים אף פעם לא ישלח נתונים ל-Cloud Trace.
כשדגימה נתמכת על ידי שירות Google Cloud , בדרך כלל השירות הזה מטמיע את הפעולות הבאות:
- תדירות דגימה שמוגדרת כברירת מחדל.
- מנגנון לשימוש בהחלטת ההורה לגבי דגימה כרמז להחלטה אם לדגום את הטווח.
- תדירות הדגימה המקסימלית.
כדי לבקש ששירות מסוים יתמוך בדגימה, צריך להשתמש בIssue Tracker של Google. Google Cloud
המאמרים הבאים
במאמר דגימה מרחוק ב-Jaeger מוסבר איך לבחור אסטרטגיית דגימה לפי שם טווח.
מומלץ לעיין במסמכי המקור הפתוח הבאים כדי להחליט איזו גישה לדגימה היא המתאימה ביותר לאפליקציות שנמצאות בפיתוח ולאפליקציות שכבר הופעלו:
Google Cloud מסמכי השירות: