במסמך הזה מתוארים תרחישים נפוצים לפתרון בעיות ב-Error Reporting.
אירועי שגיאה שנשלחים אל Error Reporting API לא מוצגים
אתם שולחים אירועי שגיאה ל Google Cloud פרויקט באמצעות Error Reporting API. עם זאת, האירועים האלה לא מוצגים בדף Error Reporting.
כדי לפתור את הבעיה:
מוודאים ש-Error Reporting API מופעל.
מפעילים את Error Reporting API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםפותחים את 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. רשומת היומן נוצרת באופן אוטומטי.
מוודאים שהאפליקציה שולחת את אירוע השגיאה לנקודת הקצה
report, ושהאפליקציה מעצבת את גוף הבקשה כאובייקטReportedErrorEvent. כדאי גם לוודא שנוצרים רשומות ביומן. כשמשתמשים ב-Error Reporting API, רשומות ביומן עם הודעות שגיאה בפורמט תקין נוצרות באופן אוטומטי ונכתבות ב-Cloud Logging. רשומות היומן האלה נכתבות ביומן ששם הקובץ שלו מעוצב באופן הבא:logNameprojects/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 יכול לנתח את רשומות היומן שמנותבות על ידי ה-sinks
_Default,_Requiredו-logs-from-samples, כי קטגוריית היומן מאוחסנת באותו פרויקט שמנתב את רשומות היומן. - Error Reporting לא יכול לנתח את רשומות היומן שמאוחסנות בקטגוריית היומן שנקראת
test-logsכי יעד הניקוז ב-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 לא מתעד את דוח קריסות כשמשתמשים בפורמט לא נתמך.
מידע נוסף מופיע במאמר בנושא עיצוב רשומה ביומן לדיווח על אירועי שגיאה.