כדי לאבחן שגיאות ב-API, לתקן דחיות של נתוני מדדים ולפתור בעיות של תוצאות חסרות של שאילתות כשמשתמשים ב-Monitoring API, אפשר להשתמש בטכניקות לפתרון בעיות ובפתרונות לשגיאות שמופיעים במדריך הזה.
Monitoring API הוא חלק מ-Cloud APIs. רשימה של קודי שגיאה משותפים והמלצות כלליות לטיפול בהם מופיעה במאמר טיפול בשגיאות.
שימוש ב-API Explorer לניפוי באגים
APIs Explorer הוא ווידג'ט שמוטמע בדפי העזר של שיטות API. הוא מאפשר להפעיל את השיטה על ידי מילוי שדות, בלי לכתוב קוד.
אם אתם נתקלים בבעיה עם קריאה לשיטה, השתמשו בווידג'ט APIs Explorer (נסה את ה-API הזה) בדף ההפניה של אותה שיטה כדי לאתר באגים. מידע נוסף זמין במאמר APIs Explorer.
שגיאות כלליות ב-API ובאימות
סעיף זה מפרט קודי שגיאה שניתן להחזיר על ידי מגוון שיטות של ממשק API לניטור.
401 UNAUTHENTICATED
קוד השגיאה 401 UNAUTHENTICATED מציין שפרטי הכניסה של OAuth2 או IAM חסרים, לא תקפים או שתוקפם פג.
שתי הודעות השגיאה הנפוצות עבור קוד שגיאה זה הן Request is missing required authentication credential ו-User is not authorized to access the project (or metric).
- סיבה: כותרת
Authorization: Bearer <token>חסרה, אסימון OAuth2 או OIDC שפג תוקפו, או פרטי כניסה לא חוקיים לחשבון שירות. - פתרון: רענון טוקנים לאימות באמצעות Application Default Credentials (ADC) או
gcloud auth print-access-token. כמו כן, צריך לוודא שמפתח חשבון השירות תקין.
403 PERMISSION_DENIED לגישה לפרויקט ולחיוב
קוד השגיאה 403 PERMISSION_DENIED מציין שאין לכם את ההרשאות הנדרשות לביצוע הפעולה המבוקשת.
יש כמה הודעות שגיאה שונות שיכולות להיות משויכות לקוד השגיאה הזה. שתי הודעות שגיאה נפוצות הן
Billing check failed for project [PROJECT_ID] ו-
Billing account disabled:
- הסיבה: החיוב ב-Cloud מושבת או מושעה בGoogle Cloud פרויקט. כדי להטמיע מדדים מותאמים אישית, צריך חשבון חיוב פעיל.
- פתרון: מקשרים חשבון לחיוב ב-Cloud פעיל לפרויקט במסוף Google Cloud .
אם קוד השגיאה הזה מופיע כשכותבים נתוני מדדים, כדאי לעיין גם במאמר 403 PERMISSION_DENIED כשכותבים נתוני מדדים.
404 NOT_FOUND
קוד השגיאה 404 NOT_FOUND מציין שמזהה פרויקט היעד לא קיים, או שהאזור או המיקום לא מזוהים.
בהמשך מפורטות הודעות שגיאה נפוצות שקשורות לקוד השגיאה הזה:
Project [PROJECT_ID] not found- הסיבה: הפרויקט שצוין ב-URI של הבקשה לא קיים או שהוא נמחק.
- פתרון: בודקים את האיות של מזהה הפרויקט ומוודאים שהפרויקט פעיל במסוף Google Cloud .
Unavailable region or locationאוUnrecognized region or location- הסיבה: התווית של המיקום או האזור של המשאב שבמעקב לא תקינה או לא מזוהה.
- פתרון: צריך להשתמש בשמות אזורים ואזורים תקפים Google Cloud , כמו
us-central1אוus-central1-a.
The requested URL was not found on this server- הסיבה: נתיב המשאב בכתובת ה-URL שגוי.
- פתרון: השווה את כתובת ה-URL לכתובת ה-URL של השיטה המוצגת בדף ההפניה של השיטה. יכול להיות שהשגיאה הזו מצביעה על שגיאת איות, למשל "project" במקום "projects", או על שגיאת רישיות, למשל "TimeSeries" במקום "timeSeries".
500 INTERNAL, 503 UNAVAILABLE, 504 DEADLINE_EXCEEDED
יש שתי הודעות שגיאה נפוצות לקודי השגיאה האלה:
Internal error encountered. Please retry after a few seconds ו-
The service is currently unavailable.
- הסיבה: שגיאות זמניות בתשתית העורפית, בעיות ברשת או איזון מחדש של מחיצת מסד נתונים פנימי.
- רזולוציה: הטמעת השהיה מעריכית מקוצרת לפני ניסיון חוזר (exponential backoff) עם ריצוד בניסיונות חוזרים, החל משנייה אחת ועד 32 שניות. הגדרת מועדים אחרונים ללקוח RPC ל-15 שניות או יותר. מידע נוסף מופיע במאמר ניסיון חוזר לתיקון שגיאות ב-API.
תוצאות חסרות
אם קריאה ל-API מחזירה את קוד הסטטוס 200 ותגובה ריקה, כדאי לבדוק את הדברים הבאים:
- יכול להיות שהמסנן לא התאים לשום דבר בשיחה. ההתאמה של המסנן היא תלוית אותיות רישיות (case-sensitive). כדי לפתור בעיות במסננים, מתחילים בציון רכיב מסנן אחד בלבד, כמו
metric.type, ומוודאים שמתקבלות תוצאות. הוסף את רכיבי המסנן האחרים אחד אחד כדי לבנות את הבקשה שלך.
- כשעובדים עם מדד בהתאמה אישית, צריך לוודא שהפרויקט שבו המדד מוגדר מצוין.
יכולות להיות כמה סיבות לכך שנקודות נתונים חסרות כשמשתמשים בשיטה timeSeries.list:
יכול להיות שהנתונים מיושנים. מידע נוסף זמין במאמר שמירת נתונים.
יכול להיות שהנתונים עדיין לא הועברו לניטור. מידע נוסף זמין במאמר זמן האחזור של נתוני המדדים.
המרווח לא תקין:
- מוודאים ששעת הסיום נכונה.
- מוודאים ששעת ההתחלה נכונה ושמוגדרת לפני שעת הסיום. אם שעת ההתחלה חסרה או לא תקינה, ה-API מגדיר את שעת ההתחלה כשעת הסיום. במקרה של מדדי
GAUGE, מרווח הזמן הזה תואם רק לנקודות שזמני ההתחלה והסיום שלהן הם בדיוק זמן הסיום של המרווח. לגבי המדדיםCUMULATIVEאוDELTA, שמודדים לאורך מרווחי זמן, לא נמצאו נקודות תואמות. מידע נוסף זמין במאמר בנושא מרווחי זמן.
שגיאות בשאילתות של נתוני מדדים
בקטע הזה מפורטות השגיאות שיכולות להתרחש כשקוראים נתוני מדדים באמצעות שיטה כמו timeSeries.list.
400 INVALID_ARGUMENT כששולחים שאילתה לגבי נתוני מדדים
קוד השגיאה 400 INVALID_ARGUMENT מציין שגיאת אימות כלשהי בצד הלקוח. הודעת השגיאה שמשויכת לקוד השגיאה מספקת מידע מפורט יותר וספציפי לשיטת ה-API.
לדוגמה, כשמבצעים שאילתה על נתוני מדדים, יכול להיות שיופיעו ההודעות הבאות:
Field filter had an invalid valueאוField filter had an invalid value of "[FILTER]": [EXPLANATION]- הסיבה: מציינת בעיה במסנן המעקב.
- פתרון: כדי לפתור את הבעיה, צריך לוודא שהאיות והפורמט של המסנן נכונים. מידע נוסף זמין במאמר בנושא מסנני מעקב.
Request was missing field interval.endTimeאוField interval.endTime had an invalid value- הסיבה: מציין שבבקשה חסרה שעת הסיום או שהערך לא תקין.
פתרון: אם אתם משתמשים ב-APIs Explorer, אל תשימו גרשיים סביב הערך של שדה הזמן. אלה הפורמטים התקינים:
2026-05-11T01:23:45Z 2026-05-11T01:23:45.678Z 2026-05-11T01:23:45.678+05:00 2026-05-11T01:23:45.678-04:30 ```
שגיאות בכתיבת נתוני מדדים
בקטע הזה מפורטות השגיאות שיכולות לקרות כשמשתמשים בשיטה timeSeries.create כדי לכתוב נתוני מדדים, כולל:
- סיכום של קודי שגיאה.
- רשימה של הודעות שגיאה שמשויכות לכל קוד שגיאה. הערכים האלה כוללים גם את הסיבה וגם מידע על הפתרון.
השגיאות הכלליות ב-API רלוונטיות גם לשיטה
create.
אם לא מפעילים יומני ביקורת לגבי גישה לנתונים ב-Monitoring, יכול להיות שיהיו כשלים בשיטה timeSeries.create שלא יתועדו. עם זאת, אפשר:
אפשר להשתמש בMetrics Explorer כדי לקבל מידע על שיעורי השגיאות. משתמשים בהגדרות הבאות:
- מדד:
monitoring.googleapis.com/api/request_count - מסנן:
method = "google.monitoring.v3.MetricService.CreateTimeSeries" - צבירה: קיבוץ לפי
response_code
- מדד:
אפשר להשתמש בLogs Explorer כדי לשלוח שאילתות ליומני הפעילות שלכם ב-Admin. המערכת יוצרת את היומנים האלה כשהיא מנסה ליצור באופן אוטומטי תיאור מדד, והפעולה הזו נכשלת. כדי לראות את הרשומות האלה ביומן, מריצים את השאילתה הבאה אחרי שמחליפים את PROJECT_ID במזהה הפרויקט Google Cloud :
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="monitoring.googleapis.com" protoPayload.methodName="google.monitoring.v3.MetricService.CreateMetricDescriptor" severity>=ERRORאפשר להשתמש ב-Logs Explorer כדי לשלוח שאילתות ליומנים בצד הלקוח.
אם מפעילים יומני ביקורת של גישה לנתונים ב-Cloud Monitoring, המערכת כותבת רשומה ביומן לכל גישה לנתונים. בפרט, רשומות היומן האלה כוללות פרטים על מספר הנקודות שלא נכתבו ועל הסיבה לכישלון:
הסבר על הפעלת יומני ביקורת של גישה לנתונים מופיע במאמר הגדרת יומני ביקורת של גישה לנתונים.
כדי לראות את הרשומות האלה ביומן, משתמשים ב-Logs Explorer ומריצים את השאילתה הבאה, אחרי שמחליפים את PROJECT_ID במזהה של פרויקטGoogle Cloud :
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.serviceName="monitoring.googleapis.com" protoPayload.methodName="google.monitoring.v3.MetricService.CreateTimeSeries" severity>=ERROR
סיכום של קודי השגיאה timeSeries.create
| קוד HTTP | קוד סטטוס gRPC | גורמים ראשוניים |
|---|---|---|
400 |
INVALID_ARGUMENT |
אימות המטען הייעודי (payload) נכשל – גודל אצווה, גודל תווית או מפתח, סדר חותמות הזמן, חוסר התאמה בין סכימה או סוג, מבנה היסטוגרמת ההתפלגות. |
400 |
FAILED_PRECONDITION |
חריגה מקצב הדגימה, סוג מדד לא נתמך או הגעה מאוחרת מחוץ לחלון השמירה. |
401 |
UNAUTHENTICATED |
פרטי כניסה חסרים, לא חוקיים או שתוקפם פג של OAuth2 או IAM. |
403 |
PERMISSION_DENIED |
חסר roles/monitoring.metricWriter
תפקיד IAM, החיוב ב-Cloud מושבת או שיש ניסיון לא מורשה לכתוב לדומיינים שמורים של מדדים במערכת. |
404 |
NOT_FOUND |
מזהה פרויקט היעד לא קיים, או שהאזור או המיקום לא מזוהים. |
429 |
RESOURCE_EXHAUSTED |
חרגתם ממגבלת עוצמה (cardinality) של סדרות זמנים פעילות במשאב במעקב, הגעתם למגבלות של תיאור מדד הפרויקט או חרגתם ממגבלות קצב בקשות ה-API. |
500 |
INTERNAL |
שגיאה בשירות הסכימה או באחסון הפנימי. |
503 |
UNAVAILABLE |
שירות קצה עורפי לא זמין באופן זמני. |
504 |
DEADLINE_EXCEEDED |
הבקשה הסתיימה לפני כתיבת נקודות הנתונים לצמתי האחסון. |
400 INVALID_ARGUMENT כשכותבים נתוני מדדים
400 INVALID_ARGUMENT מציין שגיאות באימות בצד הלקוח במבנה הבקשה, במטא-נתונים של המדד, בהגדרות של התוויות, בהתאמה של חותמות הזמן או בערכי הנקודות.
הפרות שקשורות למבנה הבקשה ולצירוף בקשות
הרשימות הבאות כוללות הודעות שגיאה שקשורות להפרות של מבנה ושל חלוקה לקבוצות:
Request was missing field timeSeries- הסיבה: המערך
time_seriesבבקשה היה ריק. - רזולוציה: צריך לכלול לפחות אובייקט
TimeSeriesאחד בכל בקשה.
- הסיבה: המערך
The maximum number of TimeSeries objects per Create request is 200- הסיבה: הבקשה מכילה יותר מ-200 אובייקטים
TimeSeries. - פתרון: כותבים באצווה עד 200 סדרות עיתיות לכל בקשה.
- הסיבה: הבקשה מכילה יותר מ-200 אובייקטים
Field points had an invalid value: Only one point can be written per TimeSeries per request- הגורם: אובייקט
TimeSeriesיחיד מכיל יותר מערך אחד בשדהpointsשלו. - פתרון: צריך לספק בדיוק
Pointאחד לכל אובייקטTimeSeriesבכל בקשה. כדי לכתוב כמה נקודות נתונים לאורך זמן לאותו מדד, צריך לשלוח אותן בבקשות נפרדות.
- הגורם: אובייקט
Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request- הסיבה: שני אובייקטים או יותר מסוג
TimeSeriesבאותה בקשה חולקים את אותם סוגי מדדים, תוויות מדדים ותוויות של משאבים במעקב. - פתרון: ביטול כפילויות בסדרות עיתיות באצוות בצד הלקוח, כך שכל סדרה עיתית ייחודית תופיע לכל היותר פעם אחת בכל בקשה.
- הסיבה: שני אובייקטים או יותר מסוג
user defined metrics are not supported on the metric domain "[DOMAIN]"- הסיבה: אין תמיכה במדדים שהוגדרו על ידי המשתמש בדומיין שצוין.
- פתרון: אין.
תוויות ומגבלות על שמות
בהמשך מפורטות הודעות שגיאה שקשורות לתוויות ולמגבלות על שמות:
Field metric.labels had an invalid value of "[KEY]": Label value exceeds the maximum string size of 1024 characters- הסיבה: ערך של מדד או של תווית משאב חורג מ-1,024 תווים.
- פתרון: צריך להגדיר את כלי האיסוף או את האפליקציה כך שיחתכו את ערכי התווית ל-1,024 תווים או פחות. מומלץ להימנע מאחסון טקסט בכמות גדולה בתוויות של מדדים, ולכתוב את הפרטים האלה ב-Cloud Logging במקום זאת.
Field metric.labels had an invalid value of "[KEY]": Label key contains invalid characters- הגורם: מפתח התווית מכיל תווים שלא תואמים לתבנית המותרת. המפתחות יכולים להכיל תווים אלפאנומריים וקווים תחתונים, צריכים להיות באורך של עד 100 תווים וחייבים להתחיל באות.
- פתרון: משנים את השם של מפתחות התוויות כך שיכללו רק תווים תקינים.
The metric type must be a URL-formatted string with a domain and non-empty path- הסיבה: התבנית
metric.typeלא תקינה או שחסרה בה קידומת דומיין. - רזולוציה: צריך להגדיר את סוגי המדדים המותאמים אישית בפורמט
custom.googleapis.com/<category>/<name>אוworkload.googleapis.com/<name>.
- הסיבה: התבנית
Field metric.labels had an invalid value: The metric [METRIC_NAME] has more than [LIMIT] labels- הסיבה: מספר התוויות בתיאור מדד מותאם אישית חורג מ-30, או חורג מ-200 במקרה של מדדי Prometheus.
- פתרון: צריך להסיר תוויות מיותרות כדי לא לחרוג ממגבלת התיאורים.
unrecognized metric label "[LABEL_KEY]"- הסיבה: תיאור המדד כבר קיים, אבל הבקשה מספקת מַפתח התווית שלא מוגדר בתיאור.
- פתרון: מוודאים שמפתחות התווית תואמים ל-
MetricDescriptorהקיים, או יוצרים מתאר מדד חדש אם צריך לשנות את הסכימה.
חוסר התאמה בין מזהה הפרויקט למזהה המשאב
הרשימה הבאה כוללת הודעות שגיאה שקשורות לחוסר התאמה בין מזהי פרויקטים ומזהי משאבים:
Field resource.labels.project_id had an invalid value of "[VAL]": if present, must be the project number or ID in the request name ([PROJECT])אוField resource.labels.project_id had an invalid value of "[VAL]": if present, must be the resource container ID in the request name [PROJECT]- הסיבה: התווית
project_idאוresource_containerשצוינה ב-resource.labelsלא תואמת למזהה הפרויקט או למספר הפרויקט בשם הבקשה. - פתרון: מגדירים את התווית
project_idשל המשאב כך שתתאים לפרויקט הבקשה, או משמיטים את התוויתproject_idמ-resource.labelsכדי שהיא תוגדר כברירת מחדל לפרויקט הבקשה.
- הסיבה: התווית
unrecognized resource type "[RESOURCE_TYPE]"אוmissing resource type- הסיבה: המדד
resource.typeלא מזוהה על ידי Cloud Monitoring, או שהוא מושמט כי הוא לא מדד מותאם אישית. - פתרון: צריך להשתמש בסוג משאב מפוקח תקין, כמו
gce_instance,k8s_container,generic_taskאוglobal.
- הסיבה: המדד
חותמות זמן ומרווחים
הרשימה הבאה כוללת הודעות שגיאה שקשורות לחותמות זמן ולמרווחי זמן:
Points must be written in order. One or more of the points specified had an older end time than the most recent point- הסיבה: הערך
end_timeשל נקודה על הגרף ישן יותר או שווה לחותמת הזמן של נקודה על הגרף האחרונה שנקלטה קודם לכן עבור סדרת הזמן הזו. - פתרון: צריך להזין את הנקודות בסדר כרונולוגי.
- הסיבה: הערך
Field points[0].interval.start_time had an invalid value of "[START]": The start time must be equal to the end time ([END]) for the gauge metric '[METRIC]'- הסיבה: נשלח
GAUGEמדד נקודות שבוstart_timeלא שווה ל-end_time. - רזולוציה: עבור מדדי
GAUGE, מגדירים אתstart_timeכ-end_timeאו משמיטים אתstart_time.
- הסיבה: נשלח
Field points[0].interval.start_time had an invalid value of "[START]": The start time must be before the end time ([END]) for the non-gauge metric '[METRIC]'- הסיבה: ערך של נקודת מדד
CUMULATIVEאוDELTAהואstart_timeגדול מהערךend_timeאו שווה לו. - פתרון: מוודאים שהערך של
start_timeקטן מהערך שלend_timeומייצג מרווח זמן שאינו אפס.
- הסיבה: ערך של נקודת מדד
Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than 5m into the future.- הסיבה: חותמת הזמן של הנקודה מקדימה ביותר מ-5 דקות את השעה הנוכחית בשרת.
- פתרון: מסנכרנים את שעון המערכת עם Google Public NTP (
time.google.com).
Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than approximately 24 hours in the past- הסיבה: חותמת הזמן של הנקודה ישנה יותר מאופק השמירה בזיכרון, שהוא 24 שעות.
- פתרון: כותבים נתונים בזמן אמת תוך 24 שעות מהיצירה.
סוגי ערכים והתפלגויות
הרשימה הבאה כוללת הודעות שגיאה שקשורות לסוגי ערכים ולהתפלגויות:
value type for metric must be [EXPECTED], but is [ACTUAL]אוmetric kind for metric must be [EXPECTED], but is [ACTUAL]- הסיבה: סוג הערך הנכנס –
INT64,DOUBLE,STRING,BOOL,DISTRIBUTION– או סוג המדד –GAUGE,DELTA,CUMULATIVE– מתנגש עםMetricDescriptorהקיים. - פתרון: מוודאים שסוגי הנתונים תואמים לתיאור הקיים. אחרי שיוצרים מדד, אי אפשר לשנות את סוג הערך או את סוג המדד.
- הסיבה: סוג הערך הנכנס –
Field points[0].value had an invalid value: The metric value exceeds the maximum string size of 1024 characters- הסיבה: מדד מסוג ערך
STRINGחורג מ-1,024 תווים. - פתרון: מקצרים את ערכי המדדים של מחרוזות ל-1,024 תווים או פחות, או שולחים את היומנים ל-Cloud Logging.
- הסיבה: מדד מסוג ערך
Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric- הסיבה: בנקודה
DISTRIBUTIONלא מצויןbucket_options. - רזולוציה: מגדירים
linear_buckets,exponential_bucketsאוexplicit_bucketsלמדדי התפלגות.
- הסיבה: בנקודה
Field points[0].value.distributionValue had an invalid value: Distribution value has |bucket_counts| fields that sum to X which does not equal the |count| field value of Y- הסיבה: סכום הערכים ב-
bucket_countsלא שווה לערך בשדהcount. - רזולוציה: מוודאים שסכום כל הספירות של הדליים שווה לגודל המדגם
count.
- הסיבה: סכום הערכים ב-
Field points[0].value had an invalid value: Distribution metric has too many buckets- הסיבה: מספר המשבצות בהיסטוגרמה גדול מ-200.
- רזולוציה: צריך לשנות את הפרמטרים של הדלי כדי שמספר הדליים הכולל יהיה 200 או פחות.
400 FAILED_PRECONDITION
בהמשך מפורטות הודעות שגיאה שקשורות לקוד השגיאה הזה:
One or more points were written more frequently than the maximum sampling period configured for the metric- הסיבה: נקודות עבור אותה סדרת זמן נשלחו מהר יותר מהקצב המקסימלי המותר של נקודה אחת כל 5 שניות.
- פתרון: צריך להגביל את קצב ההעברה של נתונים כך שההפרש בין נקודות עוקבות בסדרת זמן ספציפית יהיה לפחות 5 שניות.
ingestion of prometheus delta metrics is not supported in this API- הסיבה: הבקשה ניסתה לכתוב מדדים של Prometheus
DELTAדרךtimeSeries.create. - פתרון: משתמשים במדדים של Prometheus
GAUGEאוCUMULATIVE, או מבצעים הטמעה דרך נקודות הקצה של OTLP בשירות המנוהל של Google Cloud ל-Prometheus.
- הסיבה: הבקשה ניסתה לכתוב מדדים של Prometheus
One or more points arrived late outside of its aggregation window- הסיבה: הנקודות הגיעו אחרי חלון הצבירה של מדדים מצטברים של איסוף.
- פתרון: לרוקן מידע (Flush) ולשדר נקודות עם זמני אחזור קצרים יותר של מאגר הנתונים הזמני.
403 PERMISSION_DENIED כשכותבים נתוני מדדים
כשכותבים נתונים של מדדים, יכול להיות שתקבלו תשובה 403 PERMISSION_DENIED בגלל סיבות שקשורות לגישה לפרויקט ולחיוב, וגם בגלל הסיבות הבאות:
Permission monitoring.timeSeries.create denied on resource (or it may not exist)- הגורם: למשתמש שקורא ל-API חסרה ההרשאה
monitoring.timeSeries.createבפרויקט היעד. - פתרון: מקצים לחשבון השירות או לחשבון המשתמש את התפקיד
Monitoring Metric Writer(roles/monitoring.metricWriter).
- הגורם: למשתמש שקורא ל-API חסרה ההרשאה
Billing check failed for project [PROJECT_ID]אוBilling account disabled- הסיבה: החיוב ב-Cloud מושבת או מושעה בGoogle Cloud פרויקט. כדי להטמיע מדדים מותאמים אישית, צריך חשבון חיוב פעיל.
- פתרון: מקשרים חשבון לחיוב ב-Cloud פעיל לפרויקט במסוף Google Cloud .
User does not have permission to write to metric [METRIC]- הסיבה: המתקשר ניסה לכתוב מדדים מותאמים אישית ישירות לדומיינים שמורים במערכת, כמו
compute.googleapis.comאוstorage.googleapis.com. - פתרון: משתמשים בדומיינים של מדדים מותאמים אישית, כמו
custom.googleapis.com/אוworkload.googleapis.com/.
- הסיבה: המתקשר ניסה לכתוב מדדים מותאמים אישית ישירות לדומיינים שמורים במערכת, כמו
429 RESOURCE_EXHAUSTED
בהמשך מפורטות הודעות שגיאה שקשורות לקוד השגיאה הזה:
Monitored resource ([RESOURCE_ID]) has too many time series (custom metrics)- הסיבה: חריגה מהמגבלה על מספר סדרות הזמן הפעילות (עוצמה גבוהה). מספר סדרות הזמן הפעילות של משאב יחיד שנמצא במעקב חרג מהמגבלה של 200,000 סדרות פעילות בחלון של 24 שעות. למדדים של Prometheus, המגבלה היא מיליון סדרות פעילות. בדרך כלל זה קורה כשמזהים זמניים, כמו מזהי מאגר תגים, מזהי UUID של pods, מזהי בקשות, מזהי משתמשים או חותמות זמן, נכללים בתוויות של מדדים במשאבים שמשתנים במהירות.
- הפתרון:
- הסרת תוויות זמניות או תוויות עם קרדינליות גבוהה מהמדדים.
- אם אתם חייבים לעקוב אחרי מדדים של משימות חולפות ספציפיות, אתם יכולים להשתמש בסוג המשאב המפוקח
generic_taskבמקום בסוגים ספציפיים של משאבים כמוdataflow_job. ממפים את המזהה האפמרי לתוויתtask_idשל המשאבgeneric_task.
Your Metric Ingestion quota has been exhausted- הסיבה: הפרויקט חרג ממכסת קצב הגשת בקשות של ה-API.
- פתרון: אפשר לכתוב סדרות זמן בקבוצות של עד 200 סדרות לכל בקשה, או לבקש הגדלה של המכסה בדף Quotas במסוף Google Cloud .
Your Metric Descriptors quota has been exhausted- הסיבה: הגעתם למגבלה המקסימלית של 10,000 תיאורי מדדים מותאמים אישית לכל פרויקט. למדדי Prometheus, המגבלה היא 25,000 לכל פרויקט.
- פתרון: אפשר למחוק תיאורי מדדים שלא נמצאים בשימוש באמצעות
projects.metricDescriptors.deleteאו לצמצם את השימוש בשמות דינמיים של מדדים.
Rate of metric descriptor creation exceeded- הסיבה: הפרויקט ניסה ליצור מתארים חדשים של מדדים מהר יותר מ-6,000 לדקה לכל פרויקט.
- פתרון: מומלץ להימנע מיצירה דינמית של סוגי מדדים חדשים במהלך הטמעת הנתונים. כדאי ליצור מראש תיאורים איפה שאפשר.
ניסיון חוזר לתיקון שגיאות ב-API
שניים מקודי השגיאה של Cloud APIs מציינים נסיבות שבהן כדאי לנסות לשלוח את הבקשה מחדש:
-
503 UNAVAILABLE: ניסיונות חוזרים שימושיים כשהבעיה היא זמנית או קצרת טווח. -
429 RESOURCE_EXHAUSTED: ניסיונות חוזרים שימושיים, אחרי השהיה, למשימות רקע ארוכות טווח עם מכסת זמן, כמו n קריאות לכל t שניות. ניסיונות חוזרים לא מועילים אם הבעיה היא זמנית או חולפת, או אם חרגתם ממכסה שמבוססת על נפח. במקרים של תנאים חולפים, כדאי לשקול לאפשר את השגיאה. במקרה של בעיות שקשורות למכסות, כדאי לצמצם את השימוש במכסה או לבקש להגדיל אותה.
כשכותבים קוד שעשוי לנסות שוב לשלוח בקשות, קודם צריך לוודא שהבקשה בטוחה לניסיון חוזר.
האם אפשר לנסות לשלוח את הבקשה שוב?
אם הבקשה שלכם היא אידמפוטנטית, אפשר לנסות לשלוח אותה שוב. פעולה אידמפוטנטית היא פעולה שבה כל שינוי במצב לא תלוי במצב הנוכחי. לדוגמה:
- קריאה של x היא אידמפוטנטית, כלומר לא חל שינוי בערך.
- הגדרת x ל-10 היא אידמפוטנטית. יכול להיות שהיא תשנה את המצב, אם הערך לא 10 כבר, אבל לא משנה מה הערך הנוכחי. ולא משנה כמה פעמים מנסים להגדיר את הערך.
- הגדלה של x היא לא אידמפוטנטית. הערך החדש תלוי בערך הנוכחי.
ניסיון חוזר עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff)
כשמטמיעים קוד לניסיון חוזר של בקשות, לא כדאי לשלוח בקשות חדשות במהירות ללא הגבלה. אם המערכת עמוסה מדי, הגישה הזו תגרום לבעיה.
במקום זאת, צריך להשתמש בגישה של השהיה מעריכית קטועה לפני ניסיון חוזר. אם הבקשות נכשלות בגלל עומס זמני ולא בגלל חוסר זמינות אמיתי, הפתרון הוא להפחית את העומס. השהיה מעריכית קטועה לפני ניסיון חוזר (truncated exponential backoff) פועלת לפי הדפוס הכללי הבא:
קובעים כמה זמן אתם מוכנים לחכות בזמן ניסיון חוזר או כמה ניסיונות אתם מוכנים לעשות. אם חורגים מהמגבלה הזו, צריך להתייחס לשירות כאל שירות לא זמין ולטפל במצב הזה בצורה מתאימה באפליקציה. כך מתבצע קיטוע של הנסיגה – בשלב מסוים מפסיקים לנסות שוב.
לנסות לשלוח שוב את הבקשה עם הפסקות ארוכות יותר ויותר כדי להפחית את תדירות הניסיונות החוזרים. מנסים שוב עד שהבקשה מצליחה או עד שמגיעים למגבלה שהוגדרה.
בדרך כלל המרווח גדל לפי פונקציה כלשהי של חזקת מספר הניסיונות החוזרים, ולכן מדובר בהשהיה מעריכית לפני ניסיון חוזר (exponential backoff).
יש הרבה דרכים להטמיע השהיה מעריכית לפני ניסיון חוזר (exponential backoff). בדוגמה הבאה מוסיפים עיכוב הולך וגדל של נסיגה (backoff) לעיכוב מינימלי של 1,000 אלפיות השנייה. השהיית הגיבוי הראשונית היא 2ms, והיא גדלה ל-2retry_countms עם כל ניסיון.
בטבלה הבאה מוצגים מרווחי הזמן לניסיונות חוזרים באמצעות הערכים הראשוניים:
- העיכוב המינימלי = שנייה אחת = 1,000 אלפיות השנייה
- השהיה ראשונית = 2 אלפיות השנייה
| מספר הניסיונות החוזרים | השהיה נוספת (אלפיות השנייה) | ניסיון חוזר אחרי (אלפיות השנייה) |
|---|---|---|
| 0 | 20 = 1 | 1001 |
| 1 | 21 = 2 | 1002 |
| 2 | 22 = 4 | 1004 |
| 3 | 23 = 8 | 1008 |
| 4 | 24 = 16 | 1016 |
| ... | ... | ... |
| n | 2n | 1000 + 2n |
אפשר לקצר את מחזור הניסיונות החוזרים על ידי עצירה אחרי n ניסיונות או כשמשך הזמן שחלף חורג מערך סביר לאפליקציה שלכם.
מידע נוסף זמין במאמר Exponential backoff בוויקיפדיה.