במאמר הזה מוסבר איך נתוני מדדים שנשלחים לפרויקט Google Cloud שלכם באמצעות Telemetry (OTLP) API ממופים למבנים של Cloud Monitoring. ה-API הזה מטמיע את פרוטוקול OTLP של OpenTelemetry. אפשר לשלוח נתונים ל-API הזה כשמגדירים את האפליקציות באמצעות otlphttp exporter ו-OpenTelemetry Collector, או כשמשתמשים ב-OpenTelemetry SDKs.
OpenTelemetry הוא פרויקט בקוד פתוח שנתמך על ידי Google. יש מהנדסים שמועסקים על ידי Google כדי לוודא שיש תמיכה בהטמעה של נתוני הטלמטריה שלכם ובהצגתם. Google CloudGoogle Cloud
הוראות להגדרת OpenTelemetry לשליחת מדדי OTLP אל Cloud Monitoring מופיעות במאמר סקירה כללית על הטמעת מדדי OTLP.
מדדי OTLP ב-Cloud Monitoring
כשמדדים מוזנים ל-Cloud Monitoring באמצעות otlphttp exporter של OpenTelemetry Collector או נשלחים ישירות באמצעות OpenTelemetry SDK, המדדים בפורמט OTLP ממופים למבני מדדים של Cloud Monitoring.
בקטע הזה מתוארים הנושאים הבאים:
- המיפוי בין משאבי OTLP למשאבים במעקב ב-Cloud Monitoring.
- המיפוי בין מדדי OTLP למדדים של Cloud Monitoring.
מיפוי של משאבים במעקב
כל הנקודות של המדדים נכתבות כמו בשירות המנוהל של Google Cloud ל-Prometheus, באמצעות מיפוי Prometheus.
מיפוי Prometheus
כדי להשתמש במדדים של Prometheus, צריך להשתמש בסוג המשאב שבמעקב
prometheus_target.
התוויות הבאות בסוג המשאב prometheus_target משמשות ליצירת סכימה ולאחסון יעיל של נתונים ב-Monarch. ככל שתציינו ערכים מדויקים יותר למאפיינים האלה, כך תוכלו לבצע שאילתות בצורה טובה יותר ולשפר את יכולת ההתאמה שלכם.
מומלץ מאוד להגדיר ערכים ברורים ככל האפשר לתוויות האלה, למרות שהטמענו לוגיקה של חזרה למצב קודם לשימוש במקרים שבהם לא מוגדרים ערכים ברורים.
בטבלה הבאה מפורטים המקורות של ערכי התוויות, לפי סדר העדיפות:
תווית אחת (prometheus-target) |
הערך שבו נעשה שימוש (לפי סדר העדיפות) |
|---|---|
location (חובה) |
|
cluster |
|
namespace |
|
job |
|
instanceדחיית הנקודה אם היא ריקה |
|
מיפוי מדדים
המדדים מומרים לפורמט של סדרת הזמן של Prometheus. שמות המדדים לא יכולים לכלול דומיין או שהדומיין צריך להיותprometheus.googleapis.com.
אחרי ההמרה, שם המדד יכלול את הקידומת prometheus.googleapis.com ואת הסיומת הנוספת, בהתאם לסוג הנקודה של OTLP. למדד שמתקבל ב-Cloud Monitoring יש את המבנה הבא:
prometheus.googleapis.com/{metric_name}/{suffix}
בנוסף, לכל משאב ייחודי של OpenTelemetry, ההמרה מוסיפה מדד target_info שמכיל את כל מאפייני המשאב מלבד service.name, service.instance.id ו-service.namespace.
כל המדדים של OTLP INT64 מתורגמים לסוג הערך DOUBLE ב-Cloud Monitoring, גם אם האוסף מציין את סוג הערך כ-INT64.
השינוי הזה נעשה כי אחרי שמכניסים סדרת זמן ל-Monarch, אי אפשר לשנות את סוג הערך. התוצאה הנפוצה ביותר של תמיכה בערכים INT64 היא שמתקבלות התנגשויות שאפשר לפתור רק על ידי מחיקת מדד.
מיפוי מדדים של Prometheus
המיפוי של סוגי המדדים הוא כזה:
- OTLP Gauge ממופה ל-Cloud Monitoring gauge.
- המיפוי של OTLP Sum הוא כדלקמן:
- ל-Cloud Monitoring gauge
כש-
is_monotonicמוגדר ל-false. - ל-Cloud Monitoring cumulative
כש-
aggregation_temporalityמוגדר ל-AGGREGATION_TEMPORALITY_CUMULATIVE. - ל-Cloud Monitoring delta
כאשר
aggregation_temporalityמוגדר לערךAGGREGATION_TEMPORALITY_DELTA.
- ל-Cloud Monitoring gauge
כש-
- היסטוגרמה של OTLP ממופה להתפלגות ב-Cloud Monitoring עם סוג מדד של cumulative או delta, בהתאם לערך של
aggregation_temporality. - מדדי הסיכום של OTLP מורחבים לסדרות זמן נפרדות לכל רכיב:
count,sumוכלquantile.
בטבלה הבאה מפורט מיפוי המדדים:
| OTLP point kind | מעקב אחרי סוג המדד | מעקב אחרי סוג הערך | סיומת | הערות |
|---|---|---|---|---|
| GAUGE | GAUGE | DOUBLE | /gauge | |
| GAUGE (metric.metadata["prometheus.type"]="unknown") | GAUGE | DOUBLE | /unknown | המדדים מסוג Prometheus Unknowns מחולקים על ידי OpenTelemetry Collector למדד מסוג counter ולמדד מסוג gauge. |
| SUM (מונוטוני, מצטבר) | מצטבר | DOUBLE | /counter | |
| SUM (monotonic, CUMULATIVE, metric.metadata["prometheus.type"]="unknown") | מצטבר | DOUBLE | /unknown:counter | המדדים מסוג Prometheus Unknowns מחולקים על ידי OpenTelemetry Collector למדד מסוג counter ולמדד מסוג gauge. |
| SUM (monotonic, DELTA) | DELTA | DOUBLE | /delta | |
| SUM (non-monotonic, CUMULATIVE) | GAUGE | DOUBLE | /gauge | |
| היסטוגרמה (מצטברת) | מצטבר | DISTRIBUTION with explicit buckets | /histogram | |
| היסטוגרמה אקספוננציאלית (מצטברת) | מצטבר | הפצה עם קטגוריות מעריכיות | /histogram | |
| היסטוגרמה (דלתא) | DELTA | DISTRIBUTION with explicit buckets | /histogram:delta | |
| היסטוגרמה אקספוננציאלית (דלתא) | DELTA | הפצה עם קטגוריות מעריכיות | /histogram:delta | |
| SUMMARY (sum, count, quantile) |
CUMULATIVE CUMULATIVE GAUGE |
DOUBLE DOUBLE DOUBLE |
_sum/summary:counter _count/summary /summary |
נקודות הנתונים של הסיכום נכתבות כסדרות זמן מרובות, אחת לכל ספירה, סכום וקוונטיל מחושב. מדדי הכמותיים נוצרים גם הם עם התווית quantile. |
ההבדלים בין כלי הייצוא googlemanagedprometheus לבין Telemetry API
ה-Telemetry API (telemetry.googleapis.com) מטפל במדדים באופן שונה מgooglemanagedprometheus exporter:
ב-Telemetry API אפשר להשתמש בנקודה (
.) ובסלאש (/) בשמות של מדדים. הכליgooglemanagedprometheusexporter ממיר את כל המופעים של התווים האלה לתו קו תחתון (_). לדוגמה, מדד OTLP בשםprometheus.googleapis.com/foo.bar/gaugeמיוצא כלשונו על ידי כלי הייצוא של OTLP, אבל מיוצא בתורprometheus.googleapis.com/foo_bar/gaugeעל ידי כלי הייצואgooglemanagedprometheus.כשמבצעים הטמעה של המדדים, Cloud Monitoring יוצר מתארי מדדים על סמך השמות. ההבדל באופן הטיפול בנקודה (
.) ובקו נטוי (/) בנתיבי ההטמעה גורם לכך שמתארי המדדים שמתקבלים שונים בין מדדים שמוטמעים באמצעות כלי הייצואgooglemanagedprometheusלבין מדדים שמוטמעים באמצעות כלי הייצואotlphttp. אם משתמשים בשני נתיבי ההטמעה, מקבלים שני סטים של מדדים. כדי לקבל תוצאות מלאות כשמריצים שאילתה, צריך לאחד באופן ידני את התוצאות מהגרסאות של המדדים ב-Prometheus וב-OTLP.Telemetry API לא מוסיף יחידה לשם של מדד אם יש יחידה, ולא מוסיף את הסיומת
_totalלמונים. לכן, מדד שמיוצא כ-prometheus.googleapis.com/foo/counterכשמשתמשים ב-Telemetry API מיוצא כ-prometheus.googleapis.com/foo_seconds_total/counterעל ידיgooglemanagedprometheusexporter. ההבדל הזה רלוונטי גם לסיומות_totalו-_ratio.ממשק ה-API מסנתז את הערך
sum_of_squared_deviationעבור ערכי התפלגות שנגזרים מהיסטוגרמות אקספוננציאליות. הכלי לייצואgooglemanagedprometheusלא מגדיר את השדה הזה להיסטוגרמות אקספוננציאליות.ה-API ממיר את כל ערכי הנקודות של המספרים השלמים לערכים כפולים של מדדי Prometheus.
אם התוויות
scope_versionאוscope_nameריקות, ה-API לא מגדיר אותן.
איפה אפשר לראות את הנתונים שהועברו
אפשר לראות את נתוני המדדים שמועברים דרך Telemetry API בדף Metrics Explorer. מידע על צפייה בנתוני המדדים ויצירת תרשימים שלהם זמין במאמר יצירת תרשימים באמצעות Metrics Explorer.