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

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

שלושה מספרים שמערבבים ביניהם

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

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

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

MeasurementQuestion it answers
Interface bytesHow much traffic crossed this layer
rchar and wcharHow much data the process moved through system calls
read_bytes and write_bytesHow much work reached the storage layer

מדוע מתאר קובץ אינו כתיבה לדיסק

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

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

cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0

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

מאיפה הבייטים באמת מגיעים

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

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

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

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

לקרוא כל מונה נכון

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

grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage

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

תכנון קיבולת עם המספר הנכון

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

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

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

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