כתיבת יומני משימות

במאמר הזה מוסבר איך לכתוב יומני משימות ואיך ליצור ולהריץ משימה באצווה שיש לה יומני משימות.

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

לפני שמתחילים

  1. אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
  2. כדי לקבל את ההרשאות שדרושות ליצירת משימה שכותבת יומנים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

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

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

יצירה והרצה של משימה עם יומני משימות

כדי ליצור ולהריץ משימה שרוצים שיהיו לה יומני משימות, פועלים לפי השלבים הבאים כשיוצרים את המשימה:

  1. הפעלת יומנים למשימה. כך אפשר ליצור יומנים שנכתבו עבור העבודה.
  2. לכל יומן משימות שרוצים שהעבודה תכלול, מוסיפים פקודה שכותבת יומן משימות לקובץ הפעלה. כשמריצים את העבודה, נוצר יומן משימות בכל פעם שמבצעים פקודה לכתיבת יומן משימות.

    במאמר הזה מוסבר איך כותבים יומני משימות.

כתיבת יומני משימות

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

כתיבת יומן לא מובנה על ידי הדפסת מחרוזת

יומנים לא מובנים מאפשרים לכם להגדיר הודעה, שהיא מחרוזת שמופיעה בשדה textPayload של היומן.

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

דוגמה ליומן לא מובנה

לדוגמה, נניח שאתם רוצים יומן משימות שמכיל את המחרוזת הבאה:

MESSAGE

הדפסה של מחרוזת הדוגמה הזו יוצרת יומן משימות שדומה לזה:

insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...

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

  • MESSAGE: ההודעה, שהיא מחרוזת שמסכמת את מטרת יומן המשימות. לדוגמה, The summary for a task log..
  • PROJECT_ID: מזהה הפרויקט שלכם.

אפשר להדפיס מחרוזת באמצעות מגוון שיטות, למשל על ידי הכללת הפקודה הבאה של echo בקובץ הפעלה:

echo MESSAGE

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

כתיבת יומן מובנה על ידי הדפסת אובייקט JSON

יומנים מובנים מאפשרים להגדיר את האפשרויות הבאות:

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

דוגמה ליומן מובנה

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

{
  "message": "MESSAGE"
  "severity": "SEVERITY"
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
}

הדפסה של אובייקט ה-JSON הזה יוצרת יומן משימות שדומה לזה:

insertId: ...
jsonPayload:
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
  message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...

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

  • MESSAGE: ההודעה, שהיא מחרוזת שמסכמת את מטרת יומן המשימות. לדוגמה, The summary for a task log..
  • SEVERITY: רמת החומרה של היומן, שאפשר להשתמש בה כמסנן כשמציגים יומנים של משימה. רמת החומרה צריכה להיות אחת מLogSeverity הערכים המנויים שמומרים למחרוזת שבה רק האות הראשונה היא אות גדולה. לדוגמה, עבור enum‏ ERROR, מציינים Error.
  • CUSTOM_FIELD_1 ו-CUSTOM_FIELD_2: השמות של השדות המותאמים אישית ביומן המשימות – לדוגמה, custom_field_1 ו-custom_field_2.
  • CUSTOM_VALUE_1 ו-CUSTOM_VALUE_2: הערכים של שדות בהתאמה אישית ביומן המשימות, שיכולים להיות מסוגים שונים של נתונים, ואולי צריך להוסיף להם מרכאות – לדוגמה, "the first custom field" ו-2.
  • PROJECT_ID: מזהה הפרויקט שלכם.

אפשר להדפיס את אובייקט ה-JSON הזה באמצעות מגוון שיטות. לדוגמה, בדוגמאות הבאות אפשר לראות כמה מהשיטות האפשריות להדפסת אובייקט ה-JSON לדוגמה:

  • מדפיסים מחרוזת מקבילה באמצעות הפקודה echo.
  • הדפסה של מילון מקביל באמצעות Python.

פקודת echo

כדי להדפיס את אובייקט ה-JSON לדוגמה באמצעות הפקודה echo ומחרוזת שוות ערך, כוללים את הפקודה הבאה בקובץ הפעלה:

echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'

לדוגמה, נניח שאתם יוצרים ומריצים ג'וב עם הקוד הבא שאפשר להריץ:

"script": {
  "text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}

יומן המשימות שיתקבל ייראה כך:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Python

כדי להדפיס את אובייקט ה-JSON לדוגמה באמצעות Python ומילון מקביל, צריך לכלול את הדוגמה הבאה בקוד שאפשר להריץ:

#!/usr/bin/env python3

import json

entry = dict(
    severity="SEVERITY",
    message="MESSAGE",
    CUSTOM_FIELD_1=CUSTOM_VALUE_1,
    CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))

לדוגמה, נניח שאתם יוצרים ומריצים ג'וב עם הקוד הבא שאפשר להריץ:

"script": {
  "text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}

יומן המשימות שמתקבל אמור להיראות כך:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

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