כאשר אנו מפתחים בסביבת Node.js, לא משנה אם זה API כלשהו או אפליקציית פרונט, עלינו להריץ את הקוד שלנו – כאן נכנס PM2 אשר מאפשר לנו לעשות זאת בסטייל 🕺🏼.
מה זה PM2
PM2 הוא מנהל תהליכים (Process Manager) ל-Node.js, הוא שמיש בעיקר על שרתים אשר אמורים להריץ את הקוד שלנו, אך הוא שמיש גם בסביבת פיתוח לוקלית.
שימוש בכלי זה מאפשר לנו לנהל ולדאוג לכך שהאפלקציה שלנו תהיה זמינה 24/7 ע״י ניטור התהליכים, אפשרות לאתחול של התהליך לאחר קריסה ועוד המון פיצ׳רים אשר גורמים לו להיות הכלי המוביל בתחומו.
כאמור לכלי זה יש מגוון רחב של פיצ׳רים, ביניהם:
- ניטור – מאפשר לנו במבט על לראות את כל התהליכים שרשמנו, מה המצב שלהם, צריכת משאבים, לוגים ועוד.
- ניהול לוגים – מאפשר לנו לצפות בלוגים של התהליכים השונים במספר פורמטים, מגבלות ואפשרויות.
- תמיכה ב-Cluster – ע״י שימוש במודול Cluster של Node.js ניתן להגדיר שהאפליקציה שלנו תעלה תהליכי בן בהתאם לעומס ולמשאבים הקיימים.
- תמיכה ב-Container-ים – לכלי זה תמיכה מובנת ב-Docker, מה שמאפשר לו לתמוך בקונטיינרים במידה והאפליקציה שלנו דורשת זאת.
- תמיכה ב-Sourcemaps – במידה והאפליקציה שלנו כוללת Sourcemaps, ניתן להגדיר הפעלת תמיכה בפיצ׳ר מה שיאפשר לנו לראות את עץ דיווח השגיאות בצורה טובה ומדוייקת יותר.
- ועוד…
התקנת PM2
PM2 הוא חבילה המבוססת על Node.js, כלומר ההתקנה שלו מתבצעת ע״י שימוש ב-NPM, שהוא מנהל החבילות של Node.js.
יש לוודא כי מותקן במחשב Node.js ו-NPM לפני שיהיה ניתן להתקין את PM2.
על מנת להתקין, כל שעלינו לעשות זה לפתוח את ה-Terminal שלנו ולהריץ את הפקודה הבאה:
npm install pm2 -g
לאחר ההתקנה על מנת לוודא שהכל הותקן כמו שצריך ניתן להקליד pm2 -v
ולאחר מכן ללחוץ על Enter ואז אנו אמורים לראות את גרסת הכלי.
ניהול תהליכים עם PM2
עבודה עם כלי זה מתחלקת למספר רבדים, מתהליך רישום וניהול תהליכים, ועד ניטור משאבים, מטריקות ואף צפייה בלוגים 🤓.
רישום תהליכים
בשלב הראשון עלינו לרשום את התהליכים שלנו, על מנת לעשות זאת עלינו לפתוח את הטרמינל, לנווט למקום בו נמצא הקוד שלנו ואז להקיץ את הפקודה הבאה:
pm2 start app.js
מידה ולאפליקציה שלנו יש פקודת התחלה שהיא קצת יותר מורכבת מהרצה של הקובץ, לרוב נגדיר אותה כ-NPM Script בקובץ package.json
של האפליקציה שלנו.
על מנת להגדיר ל-PM2 להריץ NPM Script עלינו להריץ את הפקודה במבנה הבאה:
pm2 start npm -- run "{SCRIPT_NAME}"
שימו לב כי יש להחליף את {SCRIPT_NAME}
בשם ה-NPM Script הרלוונטי.
הגדרת שם תהליך
במידה ויש לנו הרבה תהליכים או במידה ונרצה לתת לתהליך הספציפי שם, ניתן להוסיף את הדגל --name
pm2 start app.js --name "My Application"
לאחר רישום האפליקציה שלנו אנו נקבל חיווי דומה לתמונה:
הגדרת Watcher
בסביבת פרודקשן אמיתיות, יהיו תהליכי CI\CD אשר יפרסו שינויים בקוד בזמן אמת, במקום שנצטרך להגדיר לאחר פריסה לעשות טעינה מחדש לתהליכים כדי שהם יטענו את הקוד החדש, ניתן להגדיר את הדגל --watch
אשר יעשה זאת עבורנו.
npm start app.js --watch
הגדרת קובץ לוגים
בברירת המחדל הלוגים יושבים בנתיב .pm2/logs
תחת תיקיית הבית של המשתמש. לפעמים נרצה להגדיר נתיב ייחודי לקובץ הלוגים של התהליך שלנו, נוכל לעשות זאת ע״י שימוש בדגל --log
באופן הבא:
pm2 start app.js --log /var/log/my-app.log
הוספת חתימת זמן ללוגים
לדעת מתי שגיאה או פעולה מסויימת בוצעה היא פרמטר חשוב, במיוחד כאשר נרצה לחקור אירוע עבר, על מנת להגדיר ל-PM2 להוסיף חתימת זמן ללוגים, נוסיף את הדגל --time
באופן הבא:
pm2 start app.js --time
צפייה ברשימת תהליכים
כאשר נרצה לצפות ברשימת התהליכים המוגדרים, נוכל להשתמש בפקודה ls
או list
.
pm2 list
בתגובה לפקודה זו נראה טבלה עם התהליכים הרשומים ומידע נוסף אודותם.
ניהול תהליכים
מלבד רישום תהליכים, נוכל גם לנהל תהליכים ע״י שימוש במספר פעולות כגון טעינה מחדש, מחיקה ועצירה.
טעינה מחדש של תהליך
מידי פעם נרצה לטעון את התהליך מחדש, בין אם בגלל קוד חודש או בגלל תהליך תקוע, על מנת לעשות זאת נוכל להשתמש בפקודת reload
או restart
.
pm2 reload {PROCESS_ID_OR_NAME}
ניתן להשתמש במזהה התהליך (id
) או בשם התהליך (name
), אותם ניתן להשיג ע״י שימוש בפקודת list
.
פקודות Restart ו-Reload זהות, אך ההבדל הוא ש-Reload מאפשר לאתחל את התהליך עם זמן השבתה השואף ל-0.
שימו לב שניתן לאתחל את כל התהליך ע״י העברת המילה all בתור מזהה התהליך או שם התהליך.
עצירת תהליך
על מנת לעצור תהליך נוכל להשתמש בפקודה stop
ולאחר מכן את מזהה התהליך, שם התהליך או את המילה all
על מנת לעצור את כלל התהליכים.
pm2 stop {PROCESS_ID_OR_NAME}
מחיקת תהליך
כאשר נרצה למחוק תהליך לגבי נוכל לעשות זאת ע״י שימוש בפרוקה delete
ולאחר מכן את מזהה התהליך, שם התהליך או את המילה all
על מנת למחוק את כלל התהליכים.
pm2 delete {PROCESS_ID_OR_NAME}
צפייה בדשבורד ניטור
אחד הדברים שאני הכי אוהב בכלי הזה הוא הדשבורד אשר מאפשר לנו לראות במבט על את כל התהליכים שרשמנו, את הססטוס שלהם ואף את הלוגים בלייב.
על מנת לראות את הדשבורד עלינו להריץ את הפקודה הבאה:
pm2 monit
בתגובה אנו נראה מסך הדומה למסך הבא:
החסרון היחיד של שימוש בפקודת monit
הוא שאנחנו יכולים לראות את זה רק במכונה עליהם רצים התהליכים. אך אל חשש יש פתרון 💪🏽, ניתן בקלות לחבר את המכונות שלנו ל-Keymetrics מה שיאפשר לנו לאסוף את הנתונים של כלל השרתים שיש לנו לראות אותם בממש וובי בכל רגע.
צפייה בלוגים
כאשר נרצה לצפות בלוגים של תהליך אחד או יותר, נוכל להשתמש בפקודת logs
יחד עם מספר אופציות וכמובן את מזהה התהליך או את שם התהליך.
pm2 logs {PROCESS_ID_OR_NAME}
לפקודת logs
ישנן מספר דגלים אשר מאפשרים לנו לקסטם את תצוגת הלוגים:
- פורמט JSON – על מנת להציג את הלוגים בפורמט JSON נוכל להעביר את הדגל
--json
. - תצוגת שגיאות – במידה ונרצה לראות רק לוגים של שגיאות נוכל להעביר את הדגל
--err
. - הגבלת שורות – כאשר נרצה להציג כמות מסויימת של שורות לוגים נוכל להעביר את הדגל
--lines
ולאחר מכן את מספר השורות שנרצה. - הבלטה של ערך – במידה ונרצה להבליט ערך מסויים בלוגים, לדוגמא מחרוזת מסויימת או מספר נוכל להשתמש בדגל
--highlight
ולאחר מכן את הערך אותו נרצה לדגיש.
לרשימת הדגלים המלאה ודוגמאות אני ממליץ לעבור לדוקומנטציה הרישמית.
סיכום
PM2 הוא אחד הכלים שאני ממליץ אם אתם עובדים עם Node.js או אפילו אם אתם עובדים עם Vue.js או ריאקט ודומיהם.