פתרון בעיות

אפשר להשתמש בשלבים האלה לפתרון בעיות כדי לאבחן ולפתור בעיות ב-Error Reporting, אם אירועי שגיאה צפויים לא מופיעים במסוף או ב-API.

השגיאות נרשמות ב-Error Reporting בשתי דרכים: קריאות ישירות ל-Error Reporting API וניתוח אוטומטי של רשומות ביומן שנקלטות על ידי Cloud Logging. אפשר להשתמש בקטעים הבאים כדי לוודא שהפורמט של קריאות ה-API תקין, שמאגרי היומנים מנותבים למאגרי מידע נתמכים ושמטעני החריגים (exception payloads) תואמים למבני שפה נתמכים.

אירועי שגיאה שנשלחים אל Error Reporting API לא מוצגים

אתם שולחים אירועי שגיאה לפרויקט שלכם ב- Google Cloud באמצעות Error Reporting API. עם זאת, האירועים האלה לא מוצגים בדף Error Reporting.

כדי לפתור את הבעיה:

  1. צריך לוודא ש-Error Reporting API מופעל.

    מפעילים את Error Reporting API, אם הוא עדיין לא מופעל.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

  2. פותחים את Cloud Shell ומשתמשים ב-Google Cloud CLI כדי לוודא שאפשר לשלוח אירועי שגיאה לפרויקט:

    1. מריצים את הפקודה הבאה:

      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)"
      
    2. עוברים לדף Error Reporting ומוודאים שמוצגת בו שגיאה בשם TestError: msg.

      עבור אל Error Reporting

    3. עוברים לדף Logs Explorer ומחפשים את רשומות היומן שלכם עם הערך TestError. רשומת היומן נוצרת באופן אוטומטי.

      כניסה אל Logs Explorer

  3. מוודאים שהאפליקציה שולחת את אירוע השגיאה לנקודת הקצה 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 לא מוצגים אירועי שגיאה, למרות שרשומות ביומן מתעדות נתוני שגיאה.

כדי לפתור את הבעיה, צריך לבצע את הפעולות הבאות:

  1. מוודאים ש-Error Reporting יכול לנתח את רשומות היומן.

    השירות 'דיווח שגיאות' הוא שירות גלובלי שמבוסס על Cloud Logging, והוא יכול לנתח רשומות ביומן אם כל התנאים הבאים מתקיימים:

    • התכונה 'עומסי עבודה מאובטחים' מושבתת. מידע נוסף זמין במאמר סקירה כללית על Assured Workloads.
    • מפתחות הצפנה בניהול הלקוח (CMEK) מושבתים בכל מאגרי היומנים שבהם מאוחסן רשומה ביומן. Error Reporting לא יכול לאחסן רשומות ביומן בקטגוריות יומן שמופעל בהן 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 מנתב את רשומות היומן לקטגוריית יומן בפרויקט אחר.
  2. משתמשים ב-Google Cloud CLI כדי לוודא שאפשר לכתוב רשומות ביומן שיוצרות אירוע שגיאה.

    1. מריצים את הפקודה הבאה:

      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}}}'
      
    2. עוברים לדף Logs Explorer ומחפשים ברשומות ביומן את הערך Test Error.

      כניסה אל Logs Explorer

      רשומת היומן הזו נוצרת על ידי ה-CLI של gcloud. אם רשומת היומן לא מקושרת לקבוצת שגיאות, צריך לחכות בערך דקה ולרענן את הדף. אירועי שגיאה מזוהים אחרי שרשומה ביומן נבלעת.

    3. עוברים לדף דיווח על שגיאות ומוודאים שמוצגת בו שגיאה עם הכותרת Test Error.

      עבור אל Error Reporting

  3. עוברים לדף Logs Explorer ומוודאים שהאפליקציה כותבת רשומות ביומן בפורמט הצפוי.

    כניסה אל Logs Explorer

    מאתרים רשומה ביומן שמכילה נתוני חריגה שנשלחו מהאפליקציה שלכם ומוודאים שהפורמט שלה תקין. אם הפורמט לא נכון, צריך לעדכן את הבקשה.

רשומה ביומן מכילה דוח קריסות אבל לא נוצר אירוע שגיאה

מערכת יוצרת רשומה ביומן שהשדה message שלה מכיל דוח קריסות. עם זאת, בדף Error Reporting לא מופיע אירוע שגיאה תואם.

כדי לפתור את הבעיה, נסו את הפתרונות הבאים:

  • מוודאים שהשדה jsonPayload לא כולל את השדות stack_trace או exception. אם השדות האלה קיימים, המערכת לא מעריכה את השדה message.

  • מוודאים שהמבנה של דוח קריסות הוא באחד מהפורמטים הנתמכים של שפות תכנות. ‫Error Reporting לא מתעד את דוח קריסות כשמשתמשים בפורמט לא נתמך.

מידע נוסף מופיע במאמר בנושא עיצוב רשומה ביומן לדיווח על אירועי שגיאה.