שאילתות PromQL בשירות המנוהל של Google Cloud ל-Prometheus עוברות הערכה חלקית בעורף האחורי של Monarch, ויש כמה הבדלים ידועים בתוצאות השאילתות. במסמך הזה מתוארים ההבדלים.
בנוסף להבדלים שמפורטים במסמך הזה, שפת PromQL בשירות המנוהל ל-Prometheus זהה לשפת PromQL שזמינה ב-Prometheus בגרסה 2.44.יכול להיות שלא תהיה תמיכה בפונקציות PromQL שנוספו אחרי גרסה 2.44 של Prometheus.
תמיכה ב-UTF-8
PromQL for Cloud Monitoring תומך בשאילתות UTF-8.
אם שם המדד של Prometheus כולל רק תווים אלפאנומריים בתוספת התווים _ או :, ואם מפתחות התווית כוללים רק תווים אלפאנומריים בתוספת התו _, אפשר להריץ שאילתות באמצעות תחביר PromQL רגיל.
לדוגמה, שאילתה תקינה יכולה להיראות כך:
job:my_metric:sum{label_key="label_value"}.
עם זאת, אם שם המדד של Prometheus כולל תווים מיוחדים כלשהם מלבד התווים _ או :, או אם מפתחות התוויות כוללים תווים מיוחדים כלשהם מלבד התו _, צריך ליצור את השאילתה בהתאם למפרט UTF-8 עבור PromQL.
שמות של מדדים בקידוד UTF-8 צריכים להיות במירכאות ולהיות מוזזים לתוך הסוגריים המסולסלים. צריך להוסיף מרכאות גם לשמות של תוויות אם הם מכילים תווים שלא תואמים לגרסאות קודמות. הדוגמאות הבאות לשאילתות חוקיות הן שקולות:
{"my.domain.com/metric/name_bucket", "label.key"="label.value"}{__name__="my.domain.com/metric/name_bucket", "label.key"="label.value"}{"__name__"="my.domain.com/metric/name_bucket", "label.key"="label.value"}
התאמה לפי שמות של מדדים
יש תמיכה רק בהתאמה מדויקת של שמות המדדים. צריך לכלול התאמה מדויקת של שם המדד בשאילתה.
אנחנו ממליצים על הפתרונות הבאים לתרחישים נפוצים שבהם נעשה שימוש בהתאמה של ביטוי רגולרי בתווית __name__:
- בדרך כלל משתמשים באופרטור
=~בהגדרות של Prometheus adapter כדי להתאים לכמה שמות של מדדים. כדי לתקן את השימוש הזה, צריך להרחיב את ההגדרה כך שתשתמש במדיניות נפרדת לכל מדד, ולתת שם לכל מדד באופן מפורש. בנוסף, כך אפשר למנוע התאמה אוטומטית לעומס בטעות על סמך מדדים לא צפויים. - לרוב משתמשים בביטויים רגולריים כדי להציג בתרשים כמה מדדים לא ממדיים. לדוגמה, אם יש לכם מדד כמו
cpu_servicename_usage, תוכלו להשתמש בתו כללי כדי ליצור תרשים של כל השירותים שלכם יחד. שימוש במדדים לא ממדיים כמו אלה הוא שיטה פסולה ב-Cloud Monitoring, והוא מוביל לביצועים גרועים במיוחד של השאילתות. כדי לתקן את השימוש הזה, צריך להעביר את כל המאפיינים לתוויות של המדדים במקום להטמיע אותם בשם המדד. - לעתים קרובות משתמשים בשאילתות על כמה מדדים כדי לראות אילו מדדים זמינים לשאילתה. במקום זאת, מומלץ להשתמש בקריאה
/labels/__name__/valuesכדי לגלות מדדים. אפשר גם לגלות מדדים באמצעות ממשק המשתמש של Cloud Monitoring. - התאמה של כמה מדדים שימושית כדי לראות כמה דוגמאות נסרקו, נבלעו וחויבו על בסיס כל מדד. המידע הזה מוצג ב-Cloud Monitoring בדף Metrics Management. אפשר גם לגשת למידע הזה כנתוני מדדים באמצעות המדד Samples Ingested (דגימות שהועברו) או המדד Samples Written by Attribution ID (דגימות שנכתבו לפי מזהה שיוך).
לא פעיל
אין תמיכה בנתונים לא עדכניים בשרת העורפי של Monarch.
חישוב של irate
אם חלון מבט לאחור של הפונקציה irate קטן מגודל השלב, אנחנו מגדילים את החלון לגודל השלב.
השינוי הזה נדרש ב-Monarch כדי להבטיח שאף אחד מנתוני הקלט לא יתעלם לחלוטין בפלט. ההבדל הזה רלוונטי גם לחישובים של rate.
חישוב של rate ושל increase
אם חלון מבט לאחור של הפונקציה rate קטן מגודל השלב, אנחנו מגדילים את החלון לגודל השלב.
השינוי הזה נדרש ב-Monarch כדי לוודא שאף אחד מנתוני הקלט לא יתעלם לחלוטין בפלט. ההבדל הזה רלוונטי גם לחישובים של irate.
יש הבדלים בחישובים של אינטרפולציה ואקסטרפולציה. Monarch משתמש באלגוריתם אינטרפולציה שונה מזה של Prometheus, וההבדל הזה יכול להוביל לתוצאות שונות במקצת. לדוגמה, דגימות של מונה Monarch מאוחסנות עם טווח זמן ולא עם חותמת זמן יחידה כמו ב-Prometheus. לכן, דגימות של מונה ב-Monarch יכולות להיכלל בחישוב שיעור, גם אם חותמת הזמן של Prometheus לא תכלול אותן. התוצאה היא בדרך כלל שיעורים מדויקים יותר, במיוחד כשמבצעים שאילתה על ההתחלה או הסוף של סדרת הזמן הבסיסית.
חישוב של histogram_quantile
חישוב של histogram_quantile ב-PromQL בהיסטוגרמה ללא דגימות יפיק ערך NaN. החישוב של שפת השאילתות הפנימית לא מניב ערך, והנקודה בחותמת הזמן מושמטת במקום זאת.
ההבדלים בחישוב השערים יכולים להשפיע גם על הקלט של שאילתות histogram_quantile.
פונקציות ספציפיות לסוגים של מדדים עם סוגים שונים
למרות ש-Prometheus במעלה הזרם הוא בעל הקלדה חלשה, Monarch הוא בעל הקלדה חזקה. המשמעות היא שאי אפשר להפעיל פונקציות שספציפיות לסוג אחד על מדד מסוג אחר (לדוגמה, הפעלת rate() על מדד GAUGE או histogram_quantile() על מדד COUNTER או על מדד ללא סוג) ב-שירות מנוהל ל-Prometheus, למרות שהפונקציות האלה פועלות ב-Prometheus במעלה הזרם.