במאמר הזה מוסבר איך לכתוב יומני משימות ואיך ליצור ולהריץ משימה באצווה שיש לה יומני משימות.
כשיומן מופעל עבור משימה, נוצרים יומני משימות מההודעות שרכיבי ההפעלה של המשימה מדפיסים במהלך זמן הריצה. אם תגדירו את הקבצים הניתנים להרצה כך שיכתבו יומני משימות, תוכלו להציג מידע מותאם אישית ב-Cloud Logging, וכך יהיה לכם קל יותר לנתח את העבודות ולפתור בעיות. מידע נוסף על יומנים זמין במאמר ניתוח של משימה באמצעות יומנים.
לפני שמתחילים
- אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
-
כדי לקבל את ההרשאות שדרושות ליצירת משימה שכותבת יומנים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
כדי ליצור משרה:
- הכלי לעריכת משימות באצווה (
roles/batch.jobsEditor) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות של הג'וב, שמוגדר כברירת מחדל כחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine
- הכלי לעריכת משימות באצווה (
-
כדי לצפות ביומנים: מציג היומנים (
roles/logging.viewer) בפרויקט
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
-
כדי ליצור משרה:
יצירה והרצה של משימה עם יומני משימות
כדי ליצור ולהריץ משימה שרוצים שיהיו לה יומני משימות, פועלים לפי השלבים הבאים כשיוצרים את המשימה:
- הפעלת יומנים למשימה. כך אפשר ליצור יומנים שנכתבו עבור העבודה.
לכל יומן משימות שרוצים שהעבודה תכלול, מוסיפים פקודה שכותבת יומן משימות לקובץ הפעלה. כשמריצים את העבודה, נוצר יומן משימות בכל פעם שמבצעים פקודה לכתיבת יומן משימות.
במאמר הזה מוסבר איך כותבים יומני משימות.
כתיבת יומני משימות
יומן משימות נכתב לכל תוכן שניתן להפעלה של משימה מדפיס לזרם הפלט הרגיל (stdout) או לזרם השגיאה הרגיל (stderr) במהלך זמן הריצה. לדוגמה, אפשר לכתוב יומני משימות באמצעות הפקודה echo.
המבנה של יומן המשימות שנוצר משתנה בהתאם לפורמט של התוכן המודפס. ספציפית, אפשר לכתוב כל יומן משימות באמצעות אחת מהאפשרויות הבאות:
כתיבת יומן רישום לא מובנה על ידי הדפסת מחרוזת. יומנים לא מובנים הם פשוטים ומאפשרים להגדיר רק את השדה
textPayloadשל היומן.כתיבת יומן מובנה באמצעות הדפסת JSON. יומנים מובנים צריכים להיות בפורמט JSON, שמאפשר להגדיר כמה שדות, כולל כמה שדות יומן רגילים, שדות בהתאמה אישית ואירועי סטטוס בהתאמה אישית.
לדוגמה, אפשר להשתמש ביומני משימות מובנים כדי להגדיר את רמת החומרה של היומן, ואז להשתמש בה כפילטר כשמציגים יומנים של עבודה.
כתיבת יומן לא מובנה על ידי הדפסת מחרוזת
יומנים לא מובנים מאפשרים לכם להגדיר הודעה, שהיא מחרוזת שמופיעה בשדה 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
יומנים מובנים מאפשרים להגדיר את האפשרויות הבאות:
- שדות רגילים שנתמכים על ידי סוכן Cloud Logging
- שדות מותאמים אישית
- אירועים של סטטוס בהתאמה אישית
כדי לכתוב יומן מובנה, מדפיסים אובייקט 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הערכים המנויים שמומרים למחרוזת שבה רק האות הראשונה היא אות גדולה. לדוגמה, עבור enumERROR, מציינים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 הזה באמצעות מגוון שיטות. לדוגמה, בדוגמאות הבאות אפשר לראות כמה מהשיטות האפשריות להדפסת אובייקט ה-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: ...
המאמרים הבאים
- מידע נוסף על עיצוב יומנים זמין במאמר בנושא רישום מובנה ביומן במסמכי התיעוד של Cloud Logging.
- איך כותבים יומני משימות מובנים שכוללים אירועי סטטוס בהתאמה אישית
- איך צופים ביומני המשימות של עבודה
- מידע נוסף על אפשרויות ליצירת משרות