מבוא למעקב ב-BigQuery

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

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

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

מדדים

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

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

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

להשתמש ב-Cloud Monitoring כדי להציג את מדדי BigQuery וליצור תרשימים והתראות. לכל מדד יש סוג משאב, bigquery_dataset, bigquery_project או global, וקבוצת תוויות. אפשר לקבץ או לסנן כל מדד באמצעות התוויות.

לדוגמה, כדי ליצור תרשים של מספר השאילתות האינטראקטיביות שמופעלות, משתמשים בהצהרת PromQL הבאה, שמסננת לפי priority ששווה ל-interactive:

{"bigquery.googleapis.com/query/count", monitored_resource="global", priority="interactive"}

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

avg_over_time({"bigquery.googleapis.com/job/num_in_flight",
  monitored_resource="bigquery_project",
  job_type="load"
}[10m])

מידע נוסף זמין במאמר בנושא יצירת תרשימים והתראות ל-BigQuery.

יומנים

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

יומן הוא אוסף של רשומות ביומן שאפשר רק להוסיף להן. לדוגמה, אפשר לכתוב רשומות יומן משלכם ביומן שנקרא projects/PROJECT_ID/logs/my-test-log. הרבה שירותים שלGoogle Cloud , כולל BigQuery, יוצרים סוג של יומן שנקרא יומן ביקורת. היומנים האלה מתעדים:

  • פעילות אדמיניסטרטיבית, כמו יצירה או שינוי של משאבים.
  • גישה לנתונים, כמו קריאת פרטים שהמשתמשים מספקים (UPD) ממקור נתונים.
  • אירועים במערכת שנוצרים על ידי מערכות Google, ולא על ידי פעולות של משתמשים.

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

פרטי האירוע שנרשם ביומן כלולים בשדה משנה שנקרא payload. ביומני ביקורת, שם שדה המטען הייעודי הוא protoPayload. הערך של השדה הזה הוא מבנה AuditLog, שמוצג על ידי הערך של השדה protoPayload.@type, שמוגדר כ-type.googleapis.com/google.cloud.audit.AuditLog.

לפעולות על מערכי נתונים, טבלאות ומשימות, BigQuery כותב יומני ביקורת בשני פורמטים שונים, אבל לשניהם יש את אותו סוג בסיס AuditLog.

בפורמט הישן:

  • השדה resource.type הוא bigquery_resource.
  • פרטים על הפעולה נכתבים בשדה protoPayload.serviceData. הערך של השדה הזה הוא מבנה AuditData.

בפורמט החדש יותר:

  • הערך בשדה resource.type הוא bigquery_project או bigquery_dataset. למשאב bigquery_project יש רשומות ביומן לגבי משימות, ולמשאב bigquery_dataset יש רשומות ביומן לגבי אחסון.
  • פרטים על הפעולה נכתבים בשדה protoPayload.metadata. הערך של השדה הזה הוא מבנה BigQueryAuditMetadata.

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

דוגמה מקוצרת לרשומה ביומן שבה מוצגת פעולה שנכשלה:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

בפעולות ב-BigQuery Reservations, ‏protoPayload הוא מבנה AuditLog, והשדות protoPayload.request ו-protoPayload.response מכילים מידע נוסף. הגדרות השדות מפורטות ב-BigQuery Reservation API. מידע נוסף זמין במאמר בנושא מעקב אחרי הזמנות של BigQuery.

תצוגות של BigQuery INFORMATION_SCHEMA

תצוגות INFORMATION_SCHEMA הן מקור נוסף לתובנות ב-BigQuery, שאפשר להשתמש בהן בשילוב עם מדדים ויומנים.

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

אתם יכולים להשתמש במידע הזה כדי לבצע ניתוח מפורט יותר של עומסי העבודה ב-BigQuery, ולענות על שאלות כמו:

  • מהו ממוצע השימוש במשבצות לכל השאילתות ב-7 הימים האחרונים בפרויקט נתון?
  • אילו משתמשים שלחו משימת טעינה של נתונים בכמות גדולה לפרויקט מסוים?
  • אילו שגיאות סטרימינג התרחשו ב-30 הדקות האחרונות, מקובצות לפי קוד שגיאה?

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

ב- GitHub אפשר למצוא שאילתות INFORMATION_SCHEMA לדוגמה שמציגות את השימוש במשבצות ובשמירת מקום בארגון, את ביצוע המשימות ואת שגיאות המשימות. לדוגמה, השאילתה הבאה מספקת רשימה של שאילתות שנמצאות בהמתנה או שמופעלות. השאילתות האלה מסודרות לפי משך הזמן שעבר מאז שהן נוצרו באזור us:

SELECT
    creation_time,
    project_id,
    user_email,
    job_id,
    job_type,
    priority,
    state,
    TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), start_time,second) as running_time_sec
 FROM
   `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
 WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    AND state != "DONE"
ORDER BY
    running_time_sec DESC

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

בנוסף לכתיבת שאילתות משלכם, אתם יכולים להשתמש בכלי המעקב של BigQuery במסוף Google Cloud :

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

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