סיבוב הלוגים נשבר בדרך צפויה: שלושה רכיבים כל אחד חושב שהוא הבעלים של הקובץ, והתוצאה היא לוג מסובב שממשיך לגדול בעוד החדש נשאר ריק. הדמון מחזיק מתאר, logrotate משנה את שם הנתיב, ו-rsyslog כותב במקום אחר לגמרי. בחרו כותב אחד ומסובב אחד לפני שמוסיפים עוד כלל לערימה. רשימת הבדיקה שלהלן מתקדמת בסדר הזה, מפני שכל שלב מאוחר תלוי בו.

החליטו מי כותב את הקובץ

שני עיצובים תקפים. בראשון, תהליך ה-VPN כותב בעצמו קובץ דרך אפשרות ה-log או log-append שלו. בשני, הוא שולח רשומות לרושם המערכת, ו-rsyslog או journald מחליטים היכן הן נוחתות.

אלה חלופות, לא שכבות. מארח שמפעיל את שניהם מגיע לשני קבצים שאינם מתיישבים, והקובץ שאתם קוראים הוא לעתים קרובות המיושן. בחרו את המסלול בכוונה ואז הסירו את הכותב השני.

קראו את התצורה האפקטיבית של השירות לפני שמשנים משהו, כולל קובצי drop-in שעשויים לעקוף את קובץ היחידה. הוראה שקיימת בפרופיל שערכתם אינה הוכחה שהיא זו שהתהליך הרץ טען. השוו את היחידה לארגומנטים של התהליך, ואחר כך לקבצים שהוא באמת פתח.

תנו שם לדמון כדי שהמסנן יוכל להיות צר

במסלול ה-syslog, תנו לדמון זהות נפרדת וסננו לפיה. כלל שמתאים לשם התוכנית של מופע ה-VPN הזה משאיר את הרשומות שלו מחוץ לקובץ משותף שמדיניות השמירה שלו שייכת למשהו אחר.

כללים צרים גם הופכים את השאלה הבאה לבת-מענה: איזה שירות יצר את השורה הזו? מסנן שמתאים לכל מה שמכיל את המילה VPN יאסוף בשמחה את התעבורה של מנהרה שנייה ויטשטש את שתיהן. התאימו למזהה המדויק שהיחידה מעבירה לרושם.

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

סובבו בלי לאבד את המתאר

כשהדמון כותב את הקובץ, logrotate משנה את שם הנתיב אבל התהליך שומר על המתאר הפתוח שלו. רשומות חדשות ממשיכות אל הקובץ ששמו שונה עד שמשהו מאלץ את התהליך לפתוח מחדש את הנתיב המקורי; לכן סיבוב יכול להיראות כאילו הוא עובד בעוד הקובץ החדש נשאר ריק.

הפתרון הוא פעולת postrotate שמפעילה את התנהגות הטעינה מחדש או ההפעלה מחדש המתועדת של השירות. שליחת אות לרושם היא פעולה אחרת לגמרי ואינה עושה דבר לדמון שמחזיק קובץ משל עצמו.

כשפתיחה מחדש בלתי אפשרית, copytruncate היא הגיבוי: העתיקו את הקובץ ואז חתכו אותו במקום. הוא שומר על המתאר תקף במחיר אובדן כל מה שנכתב בין ההעתקה לחתיכה, כך שזה סחר חליפין ולא פתרון. תחת עומס הרווח הזה יכול לבלוע בדיוק את התקלה שאתם מנסים לתפוס.

בחרו אחת מהשתיים לכל קובץ ורשמו את הבחירה, כי ערבובן על אותו נתיב יוצר רווחים שקשה מאוד לייחס אותם אחר כך. קורא שמוצא את שני הדפוסים בתיקייה אחת אינו יכול לומר איזה מהם קובע.

קבעו שמירה לפי חלון האירוע

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

החזיקו את המדיניות במקום אחד. אם logrotate מסובב את הקובץ וגם rsyslog מסובב אותו, הסיבוב השני מנצח וסכימת השמות של הראשון שורדת כעומס מיותר. בחרו את הבעלים, השביתו את הסיבוב האחר, ורשמו את ההחלטה לצד המדיניות.

התיעוד של rsyslog מכסה את מודל הניתוב והפעולות שלו, בעוד התיעוד של שירות OpenVPN נשאר הסמכות לאפשרויות הרישום של הדמון עצמו. אף אחד מהם לא מחליט את מדיניות השמירה שלכם במקומכם.

בדקו סיבוב אחד ואירוע חדש אחד

כפו סיבוב בודד ואז צרו אירוע חדש, כגון אימות שנכשל. אשרו שהרשומה החדשה מופיעה בקובץ החדש ושהקובץ הישן הפסיק לגדול.

בדקו גם הרשאות בקובץ החדש, כי סיבוב שיוצר אותו מחדש עם בעלים אחר שובר את הכותב בכתיבה הבאה ומייצר רווח שנראה כמו קריסה. השוו בעלים והרשאות לחשבון השירות לפני שאתם הולכים. אחר כך אשרו שהארכיון הדחוס קריא, כי ארכיון שאיש אינו יכול לפתוח אינו שמירה. קריאה מהירה של הרשומה החדשה בקובץ הישן מוכיחה גם את הדחיסה וגם את ההרשאות.

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

מאמרים קשורים