מסננים של תקינות התהליך

במדריך הזה מוסבר איך לספור את מספר התהליכים שפועלים במכונות הווירטואליות (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, או כשיוצרים מדיניות התראות או תרשימים בלוחות בקרה, אפשר למצוא במסמכים הבאים:

מזהה משאבים

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

  • gce_instance
  • aws_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")