פתרון בעיות

במסמך הזה מתוארים תרחישים נפוצים לפתרון בעיות ב-Error Reporting.

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

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

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

  1. מוודאים ש-Error Reporting API מופעל.

    מפעילים את Error Reporting API.

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

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (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 יכול לנתח את הרשומות ביומן.

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

    • האפשרות 'עומסי עבודה מאובטחים' מושבתת. מידע נוסף זמין במאמר סקירה כללית על 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 כי ה-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 לא מתעד את דוח קריסות כשמשתמשים בפורמט לא נתמך.

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