במאמר הזה נסביר איך לפתור בעיות שקשורות למגבלות על פעולות בו-זמניות ב-Compute Engine שנגרמות בגלל שגיאות rateLimitExceeded.
כדי לזהות את הגורם לשגיאה rateLimitExceeded, אפשר לפעול לפי השלבים הבאים לפתרון בעיות:
-
במסוף Google Cloud , נכנסים לדף Logs Explorer:
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
כדי לסנן את יומני השגיאות שנוצרו על ידי Compute Engine API, מזינים את שאילתת הרישום הבאה בעורך השאילתות.
log_id("cloudaudit.googleapis.com/activity") protoPayload.serviceName="compute.googleapis.com" protoPayload.response.error.code=403 protoPayload.status.message="Rate Limit Exceeded"יומני השגיאות המסוננים אמורים להיראות כך:
"protoPayload":{ "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "message": "Rate Limit Exceeded" } "serviceName": "compute.googleapis.com", "methodName": "METHOD_NAME", ... ... "response": { "error": { "message": "Rate Limit Exceeded", "code": 403, "errors": [ { "message": "Rate Limit Exceeded", "reason": "rateLimitExceeded", "domain": "usageLimits" } ] }, "@type": "type.googleapis.com/error" }, "resourceLocation": { "currentLocations": [ "LOCATION" ] }, ... ...פרטי השגיאה מכילים את הערכים הבאים:
METHOD_NAME: השם של שיטת השירות או הפעולה. בקריאות ל-API, השם הזה צריך להיות שם ה-method של ה-API.
LOCATION: המיקום של המשאב. ההגדרה יכולה להיות אזורית, גלובלית או לפי אזור זמינות. לדוגמה, הערכיםcurrentLocations: "us-central1"(Regional) אוcurrentLocations: "us-central1-a"מציינים שהאזור הוא"us-central1"אוcurrentLocations: "global".
מזהים את הערך המשויך
methodNameמיומן השגיאות. השם הזה מייצג את ה-method של ה-API שחורגת מהגבלת הקצב, לדוגמה:v1.compute.instances.stop.מזהים את המיקום הרלוונטי ביומני הביקורת.
בודקים את
Concurrent operations per projectהמכסות והמגבלות.המסוף
נכנסים לדף Quotas במסוף Google Cloud .
בדף Quotas מפורטות המגבלות ומכסות השימוש בפרויקט שלכם. כברירת מחדל, הרשימה ממוינת לפי תדירות השימוש במכסות. המכסות שאתם הכי משתמשים בהן מוצגות קודם, כדי שתוכלו לראות מה המגבלות ולא לחרוג מהן.
כדי לסנן את הרשימה ולראות את השימוש ואת המגבלה של מכסה ספציפית, בוחרים באפשרות Quota או Metric בשדה Filter.
לדוגמה, אפשר לבחור את המכסה לפי השם
Concurrent global operations per project operation typeאו לבחור אתService: Compute Engine API,type: System Limitומילת מפתחconcurrentכדי לראות רשימה של כל מכסות הפעולות המקבילות. הסינון מספק רשימה של מכסות מקבילות. אפשר לחפש ברשימה הזו את המכסה שהושפעה. כדי לסנן את המכסה לפעולה ספציפית, מוסיפים Dimensions לשאילתת הסינון ובוחרים את operation_type (מוצג כ-methodName ביומני הביקורת).לדוגמה, בוחרים באפשרות
instances_stopכדי לראות את השימוש במכסה ואת המגבלה של הפעולהinstances.stop.כדי לסנן את המכסה לאזור ספציפי, מוסיפים Dimensions לשאילתת הסינון ובוחרים את region (מוצג כ-currentLocations ביומני הביקורת).
לדוגמה, בוחרים באפשרות
us-central1כדי לראות את השימוש במכסה ואת המגבלה של אזורus-central1.אפשר להשתמש במסננים region ו-operation_type יחד כדי לראות את השימוש במכסה ואת המגבלה של פעולה ספציפית באזור ספציפי.
gcloud
אפשר להשתמש ב-Google Cloud CLI כדי לראות את השימוש במכסות של פעולות מקבילות ואת המגבלות שלהן.
כדי לעשות את זה, צריך לוודא שהתקנתם את הרכיב פקודות אלפא. אם אתם משתמשים ב-Cloud Shell לאינטראקציה עם Google Cloud, כבר מותקן אצלכם Google Cloud CLI.
כדי לראות את מכסת הפעולות, משתמשים בפקודה הבאה:
gcloud alpha services quota list \ --service=compute.googleapis.com \ --consumer=projects/PROJECT_ID
מחליפים את
PROJECT_IDבמזהה הפרויקט שאת המכסה שלו רוצים לראות.המיכסות האלה מחולקות בדרך כלל לשתי קטגוריות:
- גלובלי או אזורי
- לכל פרויקט או לכל פרויקט לכל סוג פעולה
מידע נוסף זמין במאמר בנושא מכסות של קבוצות פעולות מקבילות.
בודקים את תרשים השימוש במכסת הנפח. אם השימוש קרוב למגבלת המכסה או חורג ממנה במהלך התקופה שבה נוצרו יומני השגיאות, המשמעות היא שחלה חריגה מהמכסה או ממגבלת המערכת.
כדי לראות תרשימים שמציגים את השימוש הנוכחי ואת השימוש בשיא, עוברים למכסה ולוחצים על Monitoring. יכול להיות שתצטרכו לגלול שמאלה עד סוף הטבלה.
הגרף של המעקב יאשר את הסיבה לשגיאת
rateLimitExceeded, עם המכסה או המגבלה הספציפיות. אם הערכים הנוכחיים גבוהים מערכי המגבלה, המשמעות היא שחלה חריגה ממגבלת המערכת. מכיוון שאי אפשר לשנות את מגבלות המערכת, אנחנו ממליצים לפעול לפי השיטות המומלצות הבאות כדי לצמצם את מספר הפעולות שמתבצעות בו-זמנית.הנה כמה מהשיטות המומלצות:
- המתנה לסיום הפעולות
- הסתמכות על קודי שגיאה, לא על הודעות שגיאה
צמצום הניסיונות החוזרים בצד הלקוח כדי לשמור על מגבלות הקצב של ה-API
אפשר להשתמש באחת מהשיטות הבאות כדי לצמצם את מספר הניסיונות החוזרים: