במדריך הזה מוסבר איך לספור את מספר התהליכים שפועלים במכונות הווירטואליות (VM) ועומדים בתנאי הסינון שאתם מציינים. אתם יכולים ליצור מדיניות התראות ותרשימים שסופרים תהליכים באמצעות Cloud Monitoring API או באמצעות מסוף Google Cloud .
אם אתם רוצים לקבל מידע על תהליכים שפועלים, למשל לדעת את ניצול המעבד לתהליכים ספציפיים, כדאי לעיין במאמר בנושא מדדי תהליכים.
המבנה של מסנן המעקב כשמשתמשים בו כדי לספור תהליכים דומה למבנה שבו משתמשים כשמציינים משאבים או סוגי מדדים למעקב. מידע כללי זמין במאמר מסנני Monitoring.
לפני שמתחילים
אם אתם לא מכירים את המושגים מדדים, סדרות זמנים ומשאבים שבמעקב, כדאי לעיין במאמר מדדים, סדרות זמנים ומשאבים.
תהליכים שנספרים
המעקב סופר תהליכים על ידי החלת ביטוי רגולרי על שורת הפקודה שהפעילה את התהליך. אם לתהליך מסוים אין שדה של שורת פקודה, התהליך הזה לא נספר.
דרך אחת לבדוק אם אפשר לספור תהליך מסוים היא להציג את הפלט של הפקודה 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], פרטי שורת הפקודה של התהליך לא זמינים ולכן התהליך לא נספר.
מבנה המסנן של תקינות התהליך
מסנן של תקינות התהליך מזהה אילו תהליכים לספור ומשאב אחד או יותר שהתהליכים שלו ייספרו. לדוגמה, קובץ ה-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 , צריך להשתמש במצב סינון ישיר כדי להזין את הערך של מסנן המעקב. עם זאת, חשוב להסיר את כל התווים המיוחדים שמונעים את ההחלפה של מחרוזת משנה. לדוגמה, כדי לספור את כל התהליכים של מכונות וירטואליות ב-Compute Engine, מזינים את הפקודה הבאה:
select_process_count("*") resource.type="gce_instance"
מידע על גישה למצב סינון ישיר כשמשתמשים ב-Metrics Explorer, או כשיוצרים מדיניות התראות או תרשימים בלוחות בקרה, אפשר למצוא במסמכים הבאים:
- התראות: מצב סינון ישיר
- תרשימים: מצב סינון ישיר
- Metrics Explorer: מצב סינון ישיר
מזהה משאבים
במסנן של תקינות התהליך צריך להגדיר את השדה resource.type כדי לציין את המכונות הווירטואליות שהתהליכים שלהן נספרים. הערך של המסנן הזה צריך להיות אחד מהערכים הבאים:
gce_instanceaws_ec2_instance
אם מציינים רק את השדה resource.type, התהליכים בכל מכונות ה-VM נספרים:
- כדי לבחור מופע VM יחיד, מוסיפים אובייקט מסנן
metric.labels.instance_name. - כדי לבחור קבוצה של מכונות וירטואליות, מוסיפים
group.idאובייקט מסנן.
מידע נוסף על השדה resource.type זמין במאמר מסננים של Monitoring.
מזהה התהליך
מסנן של תקינות התהליך חייב לקרוא לפונקציה 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")