במאמר הזה מתוארות הסיבות הנפוצות לכיבוי ולהפעלה מחדש בלתי צפויים של מכונות Compute Engine, ומוסבר איך למנוע אותם.
כיבויים והפעלה מחדש של מופעים יכולים להיגרם על ידי אירועי מערכת או פעולות אדמיניסטרטיביות. כיבויים והפעלות מחדש של אירועי מערכת נוצרים על ידי מערכות Google או מערכת ההפעלה של המכונה. פעולות של השבתה והפעלה מחדש של פעילות אדמין נוצרות על ידי קריאה ל-API שנוצרת על ידי חשבון משתמש או חשבון שירות. כל הכיבויים וההפעלה מחדש מתועדים, חוץ מהפעלות מחדש שמתבצעות מתוך המופע.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים Google Cloud ולממשקי ה-API, לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
אבחון של כיבויים והפעלה מחדש של מכונות
כדי לאבחן את הסיבה לכיבוי או להפעלה מחדש ספונטניים של מופע, צריך לשאול שאילתות ביומני המופע. כדי לזהות במהירות את הסיבה להשבתות או להפעלות מחדש של מכונות וירטואליות בעתיד, כדאי ליצור לוח בקרה שמכיל את היומנים. אחרי שמריצים שאילתה ביומנים, בודקים את השדות method ו-principalEmail כדי לזהות את האירוע ואת המשתמש או השירות שהפעילו את הכיבוי או ההפעלה מחדש.
שאילתות ביומני ביקורת של Cloud
שולחים שאילתה ליומני הביקורת ב-Cloud כדי להציג רשימה של אירועי מערכת ופעילויות ניהוליות שאולי גרמו לכיבוי או להפעלה מחדש.
המסוף
נכנסים לדף Logs Explorer במסוף Google Cloud .
בשדה Query, מזינים את השאילתה הבאה:
resource.type="gce_instance" "VM_NAME" logName:("logs/cloudaudit.googleapis.com%2Fsystem_event" OR "logs/cloudaudit.googleapis.com%2Factivity")מחליפים את
VM_NAMEבשם של המכונה הווירטואלית שנכבתה או שהופעלה מחדש.אם האירוע שאתם מחפשים קרה לפני יותר משעה, תוכלו להגדיר טווח זמן מותאם אישית. לשם כך, לוחצים על סמל השעון ומזינים טווח מותאם אישית.

לוחצים על Run query. התוצאות מוצגות בקטע Query results.
לוחצים על החץ להרחבה לצד כל תוצאה כדי להציג מידע מפורט.
במאמר בדיקת יומני הביקורת של Cloud מוסבר בהרחבה על השדות
methodו-principalEmailשמשויכים לכיבויים ולהפעלות מחדש, ומה אפשר לעשות כדי למנוע אותם.
gcloud
כדי להציג את יומני הביקורת של Cloud, משתמשים בפקודה
gcloud logging read:gcloud logging read --freshness=TIME 'resource.type="gce_instance" "VM_NAME" logName:("logs/cloudaudit.googleapis.com%2Fsystem_event" OR "logs/cloudaudit.googleapis.com%2Factivity")'מחליפים את מה שכתוב בשדות הבאים:
-
TIME: משך הזמן שרוצים לשלוח לגביו שאילתה. לדוגמה,1hשולח שאילתות לרשומות ביומן בשעה האחרונה. מידע על פורמטים של תאריך ושעה זמין במאמר gcloud topic datetimes. -
VM_NAME: שם המכונה הווירטואלית שכובתה או הופעלה מחדש.
התוצאות מוצגות.
-
במאמר בדיקת יומני ביקורת של Cloud מוסבר על השדות
methodו-principalEmailשקשורים לכיבוי ולהפעלה מחדש, ועל הפעולות שאפשר לעשות כדי למנוע אותם.
בדיקת יומני ביקורת של Cloud
כדי להבין למה המכונה הווירטואלית נסגרה או הופעלה מחדש, בודקים את השדות method ו-principalEmail ביומני הביקורת של Cloud.
בודקים את השדות
methodשל יומני הביקורת של Cloud ומשווים אותם ל-methods שמפורטות בטבלה הבאה.Method סוג הכיבוי תיאור compute.instances.repair.recreateInstanceאירוע במערכת אם המכונה הווירטואלית שייכת לקבוצת מופעי מכונה מנוהלים (MIG), קבוצת מופעי מכונה מנוהלים יוצרת מחדש את המכונה הווירטואלית אם המצב של המכונה הווירטואלית משתנה מ-
RUNNINGוקבוצת מופעי מכונה מנוהלים לא יזמה את השינוי במצב.שינויים במצב של מופע שלא מתחילים על ידי ה-MIG כוללים:
- כשלים בחומרה.
- הפסקת פעולה של VM במודל Spot.
- אירועים של תחזוקת תשתית כשלא מוגדרת מיגרציה פעילה של המכונה הווירטואלית.
- מחיקת מופע MIG באמצעות אחת מהשיטות הבאות:
- ה-Method ב-API של
instances.delete - הפקודה
gcloud compute instances delete
- ה-Method ב-API של
compute.instances.hostErrorאירוע של המערכת שגיאה במארח (
compute.instances.hostError) מציינת שהייתה בעיה בחומרה או בתוכנה במכונה הפיזית או בתשתית של מרכז הנתונים שמארח את מופע המחשוב שלכם, שגרמה לקריסת המופע. שגיאה במארח שקשורה לכשל מוחלט בחומרה או לבעיות אחרות בחומרה עשויה למנוע מיגרציה פעילה של המופע. אם המכונה שלכם מוגדרת להפעלה מחדש אוטומטית, שזו הגדרת ברירת המחדל, Compute Engine מפעיל מחדש את המכונה, בדרך כלל תוך שלוש דקות מהרגע שבו זוהתה השגיאה. בהתאם לבעיה, ההפעלה מחדש עשויה להימשך עד 5.5 דקות.אחרי שמתרחשת שגיאת מארח במכונה של Compute Engine, או אחרי שאתם מדווחים על המארח שלה כפגום, המארח של המכונה דורש תחזוקת חירום לא מתוכננת. כברירת מחדל, כשמתוזמן סוג כזה של תחזוקה, Compute Engine מספק הודעה מראש כמה שעות לפני כן.
לפעמים, יכול להיות שמופע של מחשוב לא יגיב לפני שמוצגת שגיאת מארח. אפשר לקצר את משך הזמן ש-Compute Engine ממתין לפני הפעלה מחדש או סיום של המכונה על ידי הגדרת פסק הזמן להתאוששות משגיאה במארח. מידע נוסף זמין במאמר בנושא הגדרת המדיניות למופע קיים.
תקלות פיזיות בחומרה ובתוכנה יכולות לקרות מדי פעם, אבל הן נדירות. כדי להגן על האפליקציות והשירותים שלכם מפני אירועי מערכת שעלולים לשבש את הפעילות, מומלץ לעיין במקורות המידע הבאים:
Google מציעה גם שירותים מנוהלים כמו App Engine וסביבה גמישה ב-App Engine.
compute.instances.automaticRestartאירוע במערכת האירוע הזה מתרחש אחרי אירוע
hostErrorאו אירועterminateOnHostMaintenance, אם מדיניות התחזוקה של המארחautomaticRestartשל ה-VM מוגדרת ל-true. ביומנים, לפני הרשומה הזו מופיעה רשומה עםhostErrorאוterminateOnHostMaintenance.אם רוצים לשנות את מדיניות התחזוקה של המארח של מכונת ה-VM, אפשר לעיין במאמר אפשרויות עדכון של מופע.
compute.instances.guestTerminateאירוע במערכת מערכת ההפעלה של המכונה הווירטואלית התחילה את תהליך הכיבוי. compute.instances.terminateOnHostMaintenanceאירוע של המערכת אם הגדרתם את מדיניות התחזוקה של המארח
onHostMaintenanceשל ה-VM לערךTERMINATE, מערכת Compute Engine תפסיק את ה-VM כשיש אירוע תחזוקה שבו Google צריכה להעביר את ה-VM למארח אחר.אם רוצים לשנות את
onHostMaintenanceהמדיניות של מכונה וירטואלית, אפשר לעיין במאמר אפשרויות עדכון של מופע.compute.instances.preemptedאירוע במערכת Compute Engine הפסיק לפני הזמן (preempt) את ה-VM במודל Spot או את ה-VM הזמני מדור קודם:
- כש-Compute Engine מבצעת דחיקה של VM במודל Spot, היא מפסיקה או מוחקת את VM במודל Spot בהתאם ל פעולת הסיום שלה. למכונות וירטואליות מסוג Spot אין זמן ריצה מקסימלי.
- כש-Compute Engine מבצעת דחיקה של מכונה וירטואלית שניתנת לדחיקה, היא מפסיקה את המכונה אחרי זמן ריצה מקסימלי של 24 שעות. כדי להימנע מהמגבלות האלה, כדאי להשתמש במכונות וירטואליות מסוג Spot.
VM במודל Spot ו-VM זמני הם קיבולת עודפת של Compute Engine, ולכן יכול להיות ש-Compute Engine יפסיק את הפעולה שלהם בכל פעם שנדרשת קיבולת במקום אחר. כדי לצמצם את ההשפעות של הקדימות, מומלץ לפעול לפי השיטות המומלצות. לחלופין, אם אתם צריכים מכונות וירטואליות עם סביבות זמן ריצה בשליטת המשתמש, אתם יכולים ליצור מכונות וירטואליות רגילות במקום זאת.
compute.instances.stopפעילות של מנהל מערכת משתמש או חשבון שירות הפסיקו את המכונה הווירטואלית.
כדי לזהות את המשתמש או את חשבון השירות שהפסיקו את המכונה הווירטואלית, ממשיכים לשלב הבא. מידע על הפעלה מחדש של מכונה וירטואלית זמין במאמר הפעלה מחדש של מופע שהופסק.
compute.instances.deleteפעילות אדמין או אירוע מערכת משתמש או חשבון שירות מחקו את המכונה הווירטואלית, או שהמכונה הווירטואלית הוגדרה למחיקה אוטומטית.
ספציפית, יומן לשיטה
compute.instances.deleteעשוי להצביע על אחת מהבקשות הבאות ל-VM:- בקשות ממשתמש או מחשבון שירות למחיקה ישירה של המכונה הווירטואלית מסומנות רק באמצעות שיטת
compute.instances.deleteמהמשתמש או מחשבון השירות. בקשות למחיקה אוטומטית של ה-VM מצוינות באמצעות השיטה
compute.instances.deleteמ-system@google.com, אבל השיטה שמסבירה את הסיבה למחיקה האוטומטית עשויה להופיע או לא להופיע ביומני הביקורת של Cloud.לדוגמה, אם VM במודל Spot מוגדרת למחיקה אוטומטית במהלך הפסקה זמנית והיא נדחקת, תראו שיטה
compute.instances.deleteמ-system@google.com, אבל יכול להיות שתראו גם שיטהcompute.instances.preemptedאו לא.יכול להיות שב-Cloud Audit Logs יופיעו בקשות למכונה הווירטואלית שהתרחשו זמן קצר לפני או אחרי שיטה של
compute.instances.delete, ויכול להיות שלא.לדוגמה, אם מכונה וירטואלית מופסקת בגלל תחזוקת המארח זמן קצר לפני שהיא נמחקת, תראו שיטת
compute.instances.delete, אבל יכול להיות שתראו גם שיטתcompute.instances.terminateOnHostMaintenanceאו שלא תראו אותה.
כדי לזהות את המשתמש או את חשבון השירות שמחק את מכונת ה-VM, ממשיכים לשלב הבא. מידע על יצירת מכונה וירטואלית חדשה זמין במאמר יצירה והפעלה של מכונה וירטואלית.
compute.instances.insertפעילות של מנהל מערכת משתמש או חשבון שירות יצרו את המכונה הווירטואלית.
עוברים לשלב הבא כדי לזהות את המשתמש או את חשבון השירות שיצרו את המכונה הווירטואלית. מידע נוסף על יצירת מכונה וירטואלית חדשה זמין במאמר יצירה והפעלה של מכונה וירטואלית.
compute.instances.resetפעילות של מנהל מערכת משתמש או חשבון שירות מאפסים את המכונה הווירטואלית.
עוברים לשלב הבא כדי לזהות את המשתמש או את חשבון השירות שהפסיקו את המכונה הווירטואלית.
בודקים את השדות
principalEmailביומני הביקורת של Cloud כדי לזהות את המשתמש או השירות שהפעילו את הכיבוי או ההפעלה מחדש. בטבלה הבאה מפורטים שירותים מנוהלים נפוצים של Google שמתחילים כיבוי או הפעלה מחדש.אימייל תיאור system@google.comאירוע מערכת גרם לכיבוי או להפעלה מחדש. project-number@cloudservices.gserviceaccount.comנציג שירות יזם את הכיבוי.
כדי לדעת מאיזה פרויקט השירות התחיל את ההשבתה, בודקים את
project-numberשל סוכן השירות.כדי לברר איזה שירות של Google שלח את הבקשה, בודקים את השדה
protoPayload.requestMetadata.callerSuppliedUserAgent.אם משתמש הפעיל את הכיבוי או ההפעלה מחדש, כתובת האימייל שלו מופיעה בשדה
principalEmail. לדוגמה,cloudysanfrancisco@gmail.com.אדמינים יכולים למנוע ממשתמשים לשנות את המצב של מכונות וירטואליות בפרויקט על ידי שינוי ההרשאות של ניהול זהויות והרשאות גישה (IAM) בחשבונות משתמשים. מידע נוסף זמין במאמר הענקה, שינוי וביטול גישה למשאבים.
מעקב אחרי אירועים במחזור החיים של מכונת VM
אפשר לעקוב אחרי אירועים במחזור החיים של מכונות וירטואליות (כולל כיבויים, הפעלות מחדש ושגיאות במארח) באמצעות יצירת לוח בקרה של Cloud Monitoring.
במרכז הבקרה הזה אפשר לראות תצוגה חזותית של אירועים במערכת ופעילויות של אדמינים, שמפורטים בהמשך המסמך בקטע בדיקת יומני ביקורת.
איור 1. דוגמה ללוח בקרה שבו מוצגת הזמינות של מופע ואירועים במחזור החיים שלו, כמו מופע שהופסק.
יצירת מדד מבוסס-יומן
כדי לתעד אירועים במחזור החיים של מכונה וירטואלית, יוצרים מדד מבוסס-יומן שמוגדר על ידי המשתמש. המדד הזה מתבסס על יומני ביקורת כדי לספור את מספר הפעמים שאירוע במחזור חיים מסוים של מכונה וירטואלית התרחש.
כדי לקבל את ההרשאות שנדרשות ליצירת המדד, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד כתיבת יומנים (roles/logging.logWriter) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
כדי ליצור מדד מבוסס-יומן שמוגדר על ידי המשתמש:
במסוף Google Cloud , נכנסים לדף מדדים מבוססי-יומנים.
לוחצים על יצירת מדד.
בקטע סוג המדד, מבצעים את הפעולות הבאות:
- בוחרים באפשרות
Counter. - משאירים את ההגדרה הפצה כברירת מחדל, כלומר לא מסמנים אותה.
בקטע פרטים, מזינים את הפרטים הבאים:
- שם המדד מבוסס-היומן:
vm-lifecycle-events. כדי שלוח הבקרה יפעל כמו שצריך, צריך להשתמש בשם המדויק הזה. - תיאור: אופציונלי – מזינים תיאור למדד הזה.
- יחידות:
1
בקטע Filter selection (בחירת מסנן), מציינים את הפרטים הבאים:
- בתפריט Select project or log bucket בוחרים באפשרות: Project logs
- בקטע מסנן Build מזינים:
resource.type = "gce_instance" AND log_id("cloudaudit.googleapis.com/activity") OR log_id("cloudaudit.googleapis.com/system_event") operation.first="true"
בקטע תוויות, לוחצים על הוספת תווית.
מציינים את הפרטים הבאים:
- Label name:
method - סוג התווית:
STRING - שם השדה:
protoPayload.methodName - ביטוי רגולרי:
(recreateInstance|hostError|automaticRestart|guestTerminate|terminateOnHostMaintenance|preempted|insert|stop|delete|reset|start)
- Label name:
לוחצים על סיום
לוחצים על יצירת מדד.
שימוש במרכז הבקרה
לא מוצגים נתונים במרכז הבקרה עד שמתרחש אירוע מערכת או פעילות של אדמין במופע. כדי לבדוק שהלוח עובד, מבצעים פעילות של אדמין, כמו פעולת stop ופעולת start:
- מבצעים פעולת
stopו-startבכל מכונה קיימת, או יוצרים מכונה וירטואלית חדשה למטרות בדיקה.
כדי לקבל את ההרשאות שנדרשות לשימוש בלוח הבקרה, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM Monitoring Dashboard Viewer (roles/monitoring.dashboardViewer) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
פותחים את Dashboards במסוף Google Cloud .
בכרטיסייה רשימת מרכזי הבקרה, פותחים את מרכז הבקרה
GCE VM Lifecycle Events Monitoring.בוחרים את המכונה הווירטואלית מהתפריט הנפתח Name.
מצמצמים את סדרת הזמנים למסגרת זמן רלוונטית.
במאמר הוספת מסנן זמני מוסבר איך לסנן את לוח הבקרה בדרכים נוספות.
לוח הבקרה מכיל שני תרשימים שמציגים ציר זמן של אירועים במערכת ופעילויות של אדמינים שמתרחשות במופע:
בתרשים VM Lifecycle Timeline מוצגים הנתונים הבאים:
- מדד
compute.googleapis.com/instance/uptimeשמציין אם מכונת ה-VM פעלה בנקודת זמן מסוימת. הערך 1 מציין שהמכונה פעלה והערך 0 מציין שהיא לא פעלה. שימו לב שהמדד הזה משקף את הזמינות כתוצאה מפעילות משתמשים ומאירועים במערכת, והוא לא מצביע על הסכם רמת השירות (SLA) של Compute Engine. - המדד מבוסס-היומנים
vm-lifecycle-eventsלספירת מספר הפעולות במחזור החיים, כמוstopאוstart, שבוצעו במכונה בנקודת זמן נתונה
- מדד
בתרשים 'אירועים' מוצג אותו מדד מבוסס-יומן
vm-lifecycle-eventsאבל בתצוגה מוגדלת כדי שיהיה קל יותר לקרוא אותו. שימו לב: למרות שהצירים האופקיים מיושרים, הצבעים לא מסונכרנים בין שני התרשימים.
בדיקה של כיבוי המוני של מכונות וירטואליות בפרויקטים
יכול להיות ש-Compute Engine ישבית כמה מכונות וירטואליות שמחוברות לפרויקט מארח של VPC משותף, אם החיוב בפרויקט המארח של ה-VPC המשותף לא פעיל או מושבת.
כדי לבדוק אם המכונות הווירטואליות שלכם כובו על ידי בקשת כיבוי המוני, חפשו פעולות עצירה שהופעלו על ידי cloud-cluster-manager@prod.google.com.
הפעלת מופע מושפע מחזירה שגיאה שדומה לזו:
Starting instance(s) INSTANCE_NAME...failed.
ERROR: (gcloud.compute.instances.start) The default network interface [nic0] is frozen.
כדי לפתור את הבעיה:
מזהים את ה-VPC המשותף שבו משתמשים המכונות הווירטואליות, באמצעות הפקודה
gcloud compute instances describe:gcloud compute instances describe VM_NAME \ --format="flattened(networkInterfaces[].network)"
הפלט אמור להיראות כך:
networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
בודקים בפרויקט המארח של ה-VPC המשותף אם החיוב הושבת.
resource.type="project" protoPayload.request.@type="type.googleapis.com/google.internal.cloudbilling.billingaccount.v1.DisableResourceBillingRequest" protoPayload.response.resourceBillingInfo.billingAccountAssignmentType="DISABLED"אם רלוונטי, מפעילים את החיוב בפרויקט המארח.
כדי למנוע את הבעיה הזו, קראו את המאמר אבטחת הקישור בין פרויקט לחשבון שלו לחיוב.