גישה לתוצאות של הרצת תהליך העבודה

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

המסוף

  1. נכנסים לדף Workflows במסוף Google Cloud .

    כניסה לדף Workflows

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

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

  4. בכרטיסייה סיכום, כל הרצה כוללת את הפרטים הבאים:

    • Execution ID: המזהה הייחודי של הרצת תהליך העבודה.
    • מצב הביצוע: מציין את מצב הסיום של תהליך העבודה, כולל השלב הנוכחי או הסופי בתהליך העבודה.
    • ההפעלה נוצרה: מתי ההפעלה התחילה.
    • תחילת הביצוע: מתי הביצוע התחיל לפעול ולבצע את השלבים.
    • סיום ההרצה: מתי ההרצה הסתיימה.
    • משך הביצוע: הזמן הכולל שחלף. יכול להיות שזו אינדיקציה לשגיאות ברשת או לבעיות בקישוריות.
    • שם תהליך העבודה: השם של תהליך העבודה.
    • גרסת תהליך העבודה: הגרסה הנוכחית בזמן ההרצה.
    • רמת יומן השיחות: הרמה של רישום השיחות ביומן שחלה במהלך ההפעלה. מידע נוסף זמין במאמר בנושא רישום שיחות ביומן.
    • קלט: הארגומנטים של זמן הריצה שמועברים לתהליך העבודה, אם יש כאלה.
    • פלט: הפלט של תהליך העבודה. אם ההרצה נכשלה, התג כולל את החריגה שהובילה לכשל בהרצה. במסמך הזה, ראו מפות של שגיאות הפעלה.
  5. כדי לראות את היסטוריית ההרצה של תהליך העבודה כרשימה של רשומות שלבים, לוחצים על הכרטיסייה Steps (שלבים). מידע נוסף זמין במאמר בנושא הצגת ההיסטוריה של שלבי ההרצה.

  6. כדי לראות את היומנים של הרצת תהליך עבודה, לוחצים על הכרטיסייה Logs (יומנים).

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

gcloud

  1. כדי לראות את הרשימה המלאה של ההרצות של זרימת עבודה, מזינים את הפקודה הבאה:

    gcloud workflows executions list WORKFLOW_NAME
    

    מחליפים את WORKFLOW_NAME בשם של זרימת העבודה. מעתיקים את מזהה ההרצה של ההרצה שרוצים.

  2. כדי להציג את יומני הביצוע של זרימת עבודה, מזינים את הפקודה הבאה:

    gcloud workflows executions describe \
        --workflow=WORKFLOW_NAME \
        EXECUTION_ID
    

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

    • WORKFLOW_NAME: השם של תהליך העבודה
    • EXECUTION_ID: המזהה הייחודי של ההפעלה

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

    argument: 'null'
    endTime: '2022-07-19T12:40:07.070039707Z'
    error:
     context: |-
        The argument of 'in' must be a dict or an array; got: null
        in step "checkSearchTermInInput", routine "main", line: 12
     payload: "{"message":"The argument of 'in' must be a dict or an array; got: null"
    ,"tags":["TypeError"]}" stackTrace: elements: - position: column: '26' length: '24' line: '12' routine: main step: checkSearchTermInInput name: projects/1051295516635/locations/us-central1/workflows/myFirstWorkflow/executions/17ffc89c-0a27-4d2f-8356-e681d949a3d3 startTime: '2022-07-19T12:40:07.024823663Z' state: FAILED status: currentSteps: - routine: main step: checkSearchTermInInput workflowRevisionId: 000001-ac2
    הפלט מכיל את המידע הבא:

    • argument: הארגומנטים של זמן הריצה שמועברים לתהליך העבודה, אם יש כאלה
    • endTime: מתי ההרצה הסתיימה
    • error: הודעת השגיאה שמוצגת כחלק מהחריגה שגרמה לביצוע להיכשל
    • name: השם המלא של ההרצה, כולל שם הפרויקט, המיקום של תהליך העבודה, השם של תהליך העבודה ומזהה ההרצה
    • startTime: מתי ההפעלה התחילה
    • state: מציין את מצב הסיום של תהליך העבודה
    • status: השלב הנוכחי או הסופי בתהליך העבודה של ההפעלה
    • workflowRevisionID: הגרסה הנוכחית בזמן ההרצה

מפות של שגיאות ביצוע

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

שגיאות שמוצגות במהלך הביצוע של תהליך העבודה מכילות תגים שעוזרים לכם לזהות את הגורם לשגיאה. לדוגמה, השגיאה שמוחזרת ממחבר יכולה לכלול שני מפתחות (tags ו-message) בדומה למה שמוצג כאן:

{'tags': ['SystemError'], 'message': 'an error has occurred'}

יכול להיות שיש יותר מתג אחד. כדי לחפש תג ספציפי, אפשר להשתמש בביטוי. לדוגמה:

${'SystemError' in e.tags}

נתוני שגיאות גישה שמוחזרים כמחרוזת

חלק מהמחברים ומממשקי ה-API של HTTP יבצעו סריאליזציה של שגיאות כמחרוזות לפני שיחזירו את השגיאות. אפשר להשתמש בפונקציות של ספרייה רגילה כדי לשחזר מטען ייעודי (payload) לשגיאה המקורית. לדוגמה, כדי להמיר מחרוזת שגיאה למפה, אפשר להשתמש בפונקציות json.decode ו-text.encode:

json.decode(text.encode(ERROR_FROM_API))

תגי שגיאה

בטבלה הבאה מוסבר מה המשמעות של תגי שגיאה שונים.

תג תיאור
AuthError השגיאה הזו מופיעה כשניסיון ליצור פרטי כניסה לבקשת HTTP נכשל.
ConnectionError השגיאה הזו מופיעה כשנוצר חיבור עם נקודת הקצה, אבל יש בעיה בחיבור במהלך העברת הנתונים. החיבור מסתיים לפני שמתקבלת תגובה מלאה, ויכול להיות שההודעה לא נמסרה לנקודת הקצה. יכול להיות שניסיונות חוזרים לא יהיו אידמפוטנטיים.
ConnectionFailedError השגיאה הזו מופיעה כשלא נוצר חיבור לנקודת קצה ל-API. לדוגמה, בגלל שם דומיין שגוי, בעיות בפענוח DNS או בעיות אחרות ברשת. ניסיונות חוזרים הם אידמפוטנטיים.
HttpError השגיאה הזו מופיעה כשבקשת HTTP נכשלת עם סטטוס שגיאת HTTP. כשחריגה כזו מתרחשת, התגובה היא מפה עם הרכיבים הבאים:
  • tags—list with HttpError string
  • message – הודעת שגיאה שקריאה לאנשים
  • code‫—קוד הסטטוס של תגובת HTTP
  • headers—כותרות תגובה
  • body – תוכן התגובה
IndexError השגיאה הזו מתרחשת כשמציינים מספר שלם מחוץ לטווח כמנוי של רצף.
KeyError השגיאה הזו מופיעה כשמפתח של מיפוי לא נמצא בקבוצת המפתחות הקיימים.
OperationError האירוע הזה מופעל כשפעולה ממושכת מסתיימת ללא הצלחה.
ParallelNestingError השגיאה הזו מופיעה כשחורגים מהעומק המקסימלי שאפשר לקנן בו שלבים מקבילים.
RecursionError השגיאה הזו מופיעה כשהמפענח מזהה חריגה מ <0x000A> העומק המקסימלי של סטאק ביצוע.
ResourceLimitError השגיאה הזו מופיעה כשמגיעים למגבלת משאבים מסוימת. כשמעלים את השגיאה הזו באופן פנימי, אי אפשר לזהות אותה והיא גורמת לכשל מיידי בהרצה.
ResponseTypeError מופעלת כשפעולה ממושכת מחזירה תגובה מהסוג הלא נכון.
SystemError השגיאה הזו מופיעה כשהמתרגם מוצא שגיאה פנימית.
TimeoutError מופעל כשפונקציית מערכת מגיעה לזמן קצוב לתפוגה ברמת המערכת.
TypeError השגיאה מופיעה כשמחילים פעולה או פונקציה על אובייקט מסוג לא תואם. הערך המשויך הוא מחרוזת שמספקת פרטים על חוסר ההתאמה בין הסוגים.
UnhandledBranchError השגיאה הזו מופיעה כשבסניף אחד או יותר או באיטרציה אחת או יותר מתרחשת שגיאת זמן ריצה שלא טופלה, עד מספר מקסימלי.
ValueError השגיאה הזו מופיעה כשפעולה או פונקציה מקבלות ארגומנט עם סוג נכון אבל ערך שגוי, והמצב לא מתואר על ידי חריגה מדויקת יותר, כמו IndexError.
ZeroDivisionError מופעל כשהארגומנט השני של פעולת חילוק או מודולו הוא אפס. הערך המשויך הוא מחרוזת שמציינת את סוג האופרנדים והפעולה.

אפשר גם להעלות שגיאות בהתאמה אישית באמצעות התחביר raise.

המאמרים הבאים