דיווח על שגיאות

במדריך הזה נסביר איך לדווח על חריגים שלא נתפסו ולעקוב אחריהם במדריך תחילת העבודה עם Python באמצעות Google Cloud מסוף.

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

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

קביעת ההגדרות

בקטע הזה נעשה שימוש בקוד בספרייה 5-logging. עורכים את הקבצים ומריצים פקודות בספרייה הזו.

  1. פותחים את הקובץ config.py לעריכה ומחליפים את הערכים הבאים:
    • מגדירים את הערך של [PROJECT_ID] למזהה הפרויקט, שמופיע במסוף Google Cloud .
    • מגדירים את הערך של [DATA_BACKEND] לאותו ערך שבו השתמשתם במדריך בנושא שימוש בנתונים מובְנים.
    • אם אתם משתמשים ב-Cloud SQL או ב-MongoDB, צריך להגדיר את הערכים בקטע Cloud SQL או Mongo לאותם ערכים שבהם השתמשתם בשלב שימוש בנתונים מובנים.
    • מגדירים את הערך של [CLOUD_STORAGE_BUCKET] לשם הקטגוריה שלכם ב-Cloud Storage.
    • בקטע OAuth2 configuration, מגדירים את הערכים של [GOOGLE_OAUTH2_CLIENT_ID] ושל [GOOGLE_OAUTH2_CLIENT_SECRET] למזהה הלקוח ולסוד של האפליקציה שיצרתם קודם.

  2. שומרים את קובץ ה-config.py וסוגרים אותו.

אם אתם משתמשים ב-Cloud SQL:

  1. פותחים את הקובץ app.yaml לעריכה.
  2. מגדירים את הערך של cloudsql-instance לאותו ערך שמשמש ל-[CLOUDSQL_CONNECTION_NAME] בקובץ config.py. בפורמט project:region:cloudsql-instance. לבטל סימון כהערה של כל השורה.
  3. שומרים את קובץ ה-app.yaml וסוגרים אותו.

יחסי תלות בהתקנות

כדי ליצור סביבה וירטואלית ולהתקין תלויות, משתמשים בפקודות הבאות:

‫Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

הפעלת האפליקציה במחשב המקומי

  1. מפעילים שרת אינטרנט מקומי:

    python main.py
    
  2. בדפדפן, מזינים את הכתובת הבאה:

    http://localhost:8080
    

מקישים על Control+C כדי לצאת מה-worker ואז משרת האינטרנט המקומי.

פריסת האפליקציה בסביבה הגמישה של App Engine

  1. מפעילים את האפליקציה לדוגמה:

    gcloud app deploy
    
  2. בדפדפן, מזינים את כתובת ה-URL הבאה:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    מחליפים את מה שכתוב בשדות הבאים:

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

כדי למחוק גרסת אפליקציה:

  1. במסוף Google Cloud , נכנסים לדף Versions של App Engine.

    כניסה לדף Versions

  2. מסמנים את התיבה שלצד גרסת האפליקציה שלא מוגדרת כברירת מחדל ושרוצים למחוק.
  3. כדי למחוק את גרסת האפליקציה, לוחצים על Delete.

מידע נוסף על ניקוי משאבים שניתנים לחיוב זמין בקטע ניקוי בשלב האחרון של המדריך הזה.

סימולציה של שגיאה

כדי לראות את הדוחות על שגיאות בפעולה, אפשר להוסיף בכוונה שגיאה לקוד ואז לחפש את החריגה בדף הדוחות על שגיאות במסוף. Google Cloud

  1. ב-bookshelf/crud.py, מוסיפים פעולה שמגשת משתנה לא מוגדר ומפיקה ReferenceError בתצוגת האינדקס.

    @crud.route("/")
    def list():
       x[3]
  2. פורסים את האפליקציה.

    gcloud app deploy
  3. נכנסים לדף האינדקס.

    gcloud app browse

    אפשר לראות את ההודעה An internal error occurred.

  4. נכנסים לדף Error Reporting במסוף Google Cloud :

    עבור אל Error Reporting

    אפשר גם להשתמש בסרגל החיפוש כדי למצוא את הדף הזה.

    השגיאה תופיע ברשימה.

    הצגת השגיאות

  5. לוחצים על השגיאה כדי לראות מידע עליה, כמו מתי היא נצפתה לאחרונה, כמה פעמים היא התרחשה, היסטוגרמה של זמני ההתרחשות ופרטי דוח הקריסות.

הסבר על הקוד

כדי לדווח על חריגים שלא נתפסו, הקוד משתמש קודם ב-decorator של Flask‏ errorhandler, ואז מדווח על החריג ל-Error Reporting באמצעות ספריות הלקוח של Cloud ל-Python.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

הלקוח מוסיף באופן אוטומטי את פרטי המעקב אחר שגיאות ומשתמש בפונקציית עזר כדי לחלץ את פרטי הבקשה הרלוונטיים מבקשת Flask, וכך מאכלס את Error Reporting בדוחות קריסה רלוונטיים ובהקשרים של HTTP לכל חריגה שלא נתפסה InternalServerError HTTP 500 באפליקציה.

הסרת המשאבים

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

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.