אפשר להשתמש בשלבים האלה לפתרון בעיות כדי לאבחן ולפתור בעיות ב-Error Reporting, אם אירועי שגיאה צפויים לא מופיעים במסוף או ב-API.
הכלי Error Reporting מתעד שגיאות בשתי דרכים: קריאות ישירות ל-Error Reporting API וניתוח אוטומטי של רשומות ביומן שנקלטות על ידי Cloud Logging. הקטעים הבאים יעזרו לכם לוודא שהפורמט של קריאות ה-API תקין, שמאגרי היומנים מנותבים למאגרי מידע נתמכים ושמטעני החריגים תואמים למבני שפה נתמכים.
אירועי שגיאה שנשלחים אל Error Reporting API לא מוצגים
אתם שולחים אירועי שגיאה ל Google Cloud פרויקט באמצעות Error Reporting API. עם זאת, האירועים האלה לא מוצגים בדף Error Reporting.
כדי לפתור את הבעיה:
מוודאים ש-Error Reporting API מופעל.
מפעילים את Error Reporting API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםפותחים את Cloud Shell ומשתמשים ב-Google Cloud CLI כדי לוודא שאפשר לשלוח אירועי שגיאה לפרויקט:
מריצים את הפקודה הבאה:
gcloud beta error-reporting events report --service Manual --service-version test1 \ --message "java.lang.TestError: msg at com.example.TestClass.test(TestClass.java:51) at com.example.AnotherClass(AnotherClass.java:25)"עוברים לדף Error Reporting ומוודאים שמוצגת בו שגיאה עם הכותרת
TestError: msg.עוברים לדף Logs Explorer ומחפשים את רשומות היומן שלכם עם הערך
TestError. רשומת היומן נוצרת באופן אוטומטי.
מוודאים שהאפליקציה שולחת את אירוע השגיאה לנקודת הקצה (endpoint)
report, שהאפליקציה מעצבת את גוף הבקשה כאובייקטReportedErrorEvent, ושנוצרים רשומות ביומן. כשמשתמשים ב-Error Reporting API, רשומות ביומן עם הודעות שגיאה בפורמט תקין נוצרות באופן אוטומטי ונכתבות ב-Cloud Logging. רשומות היומן האלה נכתבות ביומן ששם הקובץlogNameשלו מעוצב באופן הבא:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
אירועי שגיאה מוצגים אבל Error Reporting API מושבת
השבתתם את Error Reporting API. עם זאת, בדף Error Reporting במסוף Google Cloud מוצגים אירועי שגיאה.
זה תקין. אירועי שגיאה נוצרים בתגובה לקריאות ל-Error Reporting API שבוצעו לנקודת הקצה report.
עם זאת, אירועי שגיאה נגזרים גם כש-Error Reporting יכול לנתח את נתוני היומן.
אירועי שגיאה לא נגזרים מנתוני יומן
אתם מצפים ש-Error Reporting יסרוק את נתוני היומן ויסיק אירועי שגיאה. עם זאת, בדף Error Reporting לא מוצגים אירועי שגיאה, למרות שרשומות היומן מתעדות נתוני שגיאה.
כדי לפתור את הבעיה, צריך לבצע את הפעולות הבאות:
מוודאים ש-Error Reporting יכול לנתח את רשומות היומן.
השירות Error Reporting הוא שירות גלובלי שמבוסס על Cloud Logging, והוא יכול לנתח רשומות ביומן אם כל התנאים הבאים מתקיימים:
- האפשרות Assured Workloads מושבתת. מידע נוסף זמין במאמר סקירה כללית על Assured Workloads.
- מפתחות הצפנה בניהול הלקוח (CMEK) מושבתים בכל מאגרי היומנים שבהם נשמרים רשומות היומן. אי אפשר לאחסן רשומות ביומן בדלי יומנים שמופעל בהם CMEK. במאמר אימות הפעלת המפתח מוסבר איך לקבוע את הגדרת ה-CMEK של קטגוריה ביומן.
- קטגוריה ביומן עומדת באחד מהתנאים הבאים:
- קטגוריית היומן מאוחסנת באותו פרויקט שבו נוצרו רשומות היומן.
- רשומות היומן מנותבות לפרויקט, ואז הפרויקט הזה מאחסן את רשומות היומן בקטגוריית יומנים שבבעלותו.
כדי לראות רשימה של יעדים שהגדרתם, מריצים את הפקודה הבאה:
gcloud logging sinks listהפקודה מחזירה פלט שדומה לזה:
NAME DESTINATION FILTER _Default logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency") _Required logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency") logs-from-samples logging.googleapis.com/projects/my-team-project/locations/global/buckets/sample-bucket (empty filter) regional_logs logging.googleapis.com/projects/my-team-project/locations/europe-west1/buckets/bucket_for_regional_logs (empty filter) test-logs logging.googleapis.com/projects/team-b-project/locations/global/buckets/test-bucket (empty filter)בדוגמה הזו, פרויקט המקור Google Cloud של הרשומות ביומן הוא
my-team-project. כתוצאה מכך:- הכלי Error Reporting יכול לנתח את רשומות היומן שמנותבות על ידי אובייקטים מסוג sink
_Default,_Requiredו-logs-from-samples, כי קטגוריית היומן מאוחסנת על ידי אותו פרויקט שמנתב את רשומות היומן. - Error Reporting לא יכול לנתח את רשומות היומן שמאוחסנות בקטגוריית היומן שנקראת
test-logsכי ה-sink ב-my-team-projectמנתב את רשומות היומן לקטגוריית יומן בפרויקט אחר.
משתמשים ב-Google Cloud CLI כדי לוודא שאפשר לכתוב רשומות ביומן שיוצרות אירוע שגיאה.
מריצים את הפקודה הבאה:
gcloud logging write --payload-type=json test-errors-log \ '{"serviceContext": {"service": "manual-testing"}, "message": "Test Error\n at /test.js:42:42", "context": {"httpRequest": {"url": "/test","method": "GET","responseStatusCode": 500}}}'עוברים לדף Logs Explorer ומחפשים את רשומות היומן שלכם עם הערך
Test Error.רשומת היומן הזו נוצרת על ידי ה-CLI של gcloud. אם רשומת היומן לא מקושרת לקבוצת שגיאות, צריך לחכות בערך דקה ולרענן את הדף. אירועי שגיאה מזוהים אחרי שרשומה ביומן נבלעת.
עוברים לדף דיווח על שגיאות ומוודאים שמוצגת בו שגיאה עם הכותרת
Test Error.
עוברים לדף Logs Explorer ומוודאים שהאפליקציה כותבת רשומות ביומן בפורמט הצפוי.
מאתרים רשומה ביומן שמכילה נתוני חריגה שנשלחו מהאפליקציה שלכם ומוודאים שהפורמט שלה תקין. אם הפורמט לא נכון, צריך לעדכן את הבקשה.
רשומה ביומן מכילה דוח קריסות אבל לא נוצר אירוע שגיאה
נוצרת רשומה ביומן שהשדה message שלה מכיל דוח קריסות.
עם זאת, בדף Error Reporting [דיווח על שגיאות] לא מופיע אירוע שגיאה תואם.
כדי לפתור את הבעיה, נסו את הפתרונות הבאים:
מוודאים שהשדה
jsonPayloadלא כולל את השדותstack_traceאוexception. אם השדות האלה קיימים, המערכת לא מעריכה את השדהmessage.מוודאים שהמבנה של דוח קריסות הוא באחד מהפורמטים הנתמכים של שפות תכנות. Error Reporting לא מתעד את דוח קריסות כשמשתמשים בפורמט לא נתמך.
מידע נוסף מופיע במאמר בנושא עיצוב רשומה ביומן לדיווח על אירועי שגיאה.