אתם יכולים לספור את התהליכים שפועלים במכונות הווירטואליות (VM) שלכם שתואמים לקריטריונים ספציפיים, באמצעות מסנני תקינות התהליכים ב-Cloud Monitoring. אפשר להשתמש במסננים האלה במדיניות ההתראות ובתרשימים באמצעות Cloud Monitoring API או במצב סינון ישיר במסוף Google Cloud .
כדי לעקוב אחרי צריכת המשאבים, כמו ניצול המעבד (CPU) בתהליכים ספציפיים, קראו את המאמר מעקב אחרי תהליכים במכונות וירטואליות. התחביר של מסנני תקינות התהליכים זהה לזה של מסנני משאבים ומדדים רגילים. לכללי תחביר כלליים, ראו מסנני מעקב.
לפני שמתחילים
אם אתם לא מכירים את המושגים מדדים, סדרות זמנים ומשאבים במעקב, קראו את המאמר מדדים, סדרות זמנים ומשאבים.
תהליכים שנספרים
המעקב סופר תהליכים על ידי החלת ביטוי רגולרי על שורת הפקודה שהפעילה את התהליך. אם לתהליך אין שדה זמין של שורת פקודה, התהליך הזה לא נספר.
אחת הדרכים לקבוע אם אפשר לספור תהליך היא להציג את הפלט של הפקודה ps ב-Linux:
ps aux | grep nfs
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1598 0.0 0.0 0 0 ? S< Oct25 0:00 [nfsd4]
root 1639 0.0 0.0 0 0 ? S Oct25 2:33 [nfsd]
root 1640 0.0 0.0 0 0 ? S Oct25 2:36 [nfsd]
כשהערך בעמודה COMMAND מוקף בסוגריים מרובעים, למשל [nfsd], המידע של שורת הפקודה לתהליך לא זמין ולכן התהליך לא נספר.
מבנה המסנן Process-health
מסנן תקינות התהליך מזהה אילו תהליכים לספור, ומשאב אחד או יותר שהתהליכים שלו ייספרו. לדוגמה, קובץ ה-JSON הבא מתאר מדיניות התראה ששולחת התראה אם מספר התהליכים קטן מ-30 בכל מכונה וירטואלית של Compute Engine:
{
"displayName": "Count all processes",
"conditionThreshold": {
"aggregations": [],
"comparison": "COMPARISON_LT",
"duration": "0s",
"filter": "select_process_count(\"*\") resource.type=\"gce_instance\"",
"thresholdValue": 30,
"trigger": {
"count": 1
}
}
}
בדוגמה הזו, הערך של ההצהרה filter הוא מחרוזת עם שני סעיפים. הסעיף הראשון, select_process_count(\"*\"), מציין שכל התהליכים נספרים. הסעיף השני, resource.type=\"gce_instance\", מציין שצריך לעקוב אחרי מכונות וירטואליות של Compute Engine.
אם אתם משתמשים במסוף Google Cloud , השתמשו במצב סינון ישיר כדי להזין את הערך של מסנן Monitoring. עם זאת, חשוב להסיר את כל התווים המיוחדים שמגנים על מחרוזת משנה. לדוגמה, כדי לספור את כל התהליכים של מכונות וירטואליות ב-Compute Engine, מזינים את הפרטים הבאים:
select_process_count("*") resource.type="gce_instance"
במסמכים הבאים מוסבר איך לגשת למצב סינון ישיר כשמשתמשים ב-Metrics Explorer, או כשיוצרים מדיניות התראות או תרשימים בלוחות בקרה:
- התראות: מצב סינון ישיר
- תרשימים: מצב סינון ישיר
- Metrics Explorer: מצב סינון ישיר
מזהה משאבים
במסנן של תקינות התהליך צריך להגדיר את השדה resource.type כדי לציין את המכונות הווירטואליות שהתהליכים שלהן נספרים. הערך של המסנן הזה חייב להיות אחד מהבאים:
gce_instanceaws_ec2_instance
אם מציינים רק את השדה resource.type, נספרים התהליכים בכל המכונות הווירטואליות:
- כדי לבחור מכונה וירטואלית אחת, מוסיפים אובייקט מסנן
metric.labels.instance_name. - כדי לבחור קבוצה של מכונות וירטואליות, מוסיפים אובייקט מסנן
group.id.
למידע נוסף על השדה resource.type, קראו את המאמר מסנני מעקב.
מזהה התהליך
מסנן תקינות התהליך צריך להפעיל את הפונקציה select_process_count.
הארגומנטים של הפונקציה הזו מזהים את התהליכים שצריך לספור.
יש שלושה אובייקטים של מסננים שאפשר לציין בקריאה ל-select_process_count:
command_line(אוmetric.labels.command_line): המסנן הזה חל על שורת הפקודה שמשמשת להפעלת התהליך. שורות הפקודה נחתכות אחרי 1,024 תווים, כך שלא ניתן להתאים טקסט בשורת פקודה מעבר למגבלה הזו.
command(אוmetric.labels.command): המסנן הזה חל על שורת הפקודה שמשמשת להפעלת התהליך. הפקודות נחתכות אחרי 1,024 תווים, כך שאי אפשר להתאים טקסט בפקודה מעבר למגבלה הזו.user(אוmetric.labels.user): המסנן הזה חל על המשתמש שהתחיל את התהליך.
אפשר להשתמש בארגומנטים תלויי מיקום או בארגומנטים בעלי שם בקריאה ל-select_process_count. אם אתם משתמשים בארגומנטים עם שם, אתם צריכים לציין את אובייקט המסנן, הצהרת שוויון, = וערך. אם משתמשים בארגומנטים לפי מיקום, מציינים רק את הערך.
בדיקת מחרוזת תלוית אותיות רישיות קובעת אם תהליך תואם למסנן.
הערך של אובייקט מסנן יכול להיות כל אחד מהבאים:
- מחרוזת (התאמה מדויקת)
*(תו כללי לחיפוש)has_substring(string)starts_with(string)ends_with(string)monitoring.regex.full_match(string)
אם מציינים כמה מסננים, הכללים הבאים חלים:
- המסננים
command_lineו-commandמחוברים באמצעות האופרטור הלוגי OR. תהליך נספר כשהוא תואם לאחד מהמסננים. -
userמצורף אלcommand_line(command) באמצעות AND לוגי. תהליך נחשב להתאמה רק אם הוא תואם למסנןuserולמסנןcommand_line(command). - אם מחילים את כל המסננים, תהליך נספר כשהוא תואם למסנן
userוכשהוא תואם למסנןcommand_lineאוcommand.
ארגומנטים בעלי שם
כדי להשתמש בארגומנטים בעלי שם, מציינים את שם המסנן, הצהרת שוויון, =, ואז את ערך המסנן. אפשר לציין ארגומנטים בעלי שם בכל סדר.
לדוגמה, הפקודה הבאה תואמת לכל התהליכים שהתחילו על ידי root כששורת הפקודה כוללת את המחרוזת nginx:
select_process_count("command_line=has_substring(\"nginx\")","user=root")
בדוגמה הזו נעשה שימוש בהתאמה של ביטוי רגולרי בשורת הפקודה:
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
בדוגמה הזו נספרים כל התהליכים ששורת הפקודה שלהם היא /bin/bash:
select_process_count("command=/bin/bash")
בדוגמה הזו נספרים כל התהליכים שהתחילו על ידי המשתמש www, ששורת הפקודה שלו מתחילה ב-/bin/bash:
select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")
ארגומנטים תלויי מיקום
כדי להשתמש בארגומנטים לפי מיקום, צריך לספק רק את ערך המסנן. הכללים הבאים חלים על ארגומנטים תלויי מיקום:
- אם מספקים ארגומנט אחד, הוא מפורש כאובייקט מסנן של שורת הפקודה:
select_process_count("*")
select_process_count("/sbin/init")
select_process_count("starts_with(\"/bin/bash -c\")")
select_process_count("ends_with(\"--alsologtostderr\")")
select_process_count("monitoring.regex.full_match(\".*nginx.*\")")
- אם מספקים שני ארגומנטים, הארגומנט הראשון מפורש כמסנן של שורת הפקודה והשני כמסנן של המשתמש. תהליך נספר כשהוא תואם לשני אובייקטי הסינון:
select_process_count("/sbin/init", "root")