הגדרת logrotate לסיבוב קבצי לוג בשרת

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

בעיה: דיסק מלא בלוגים — למה זה קורה ואיך logrotate עוזר

אנחנו מתמודדים מדי יום עם מצבים שבהם שרתי production קורסים ב-3 לפנות בוקר כי הדיסק מלא בלוגים. Nginx מחזיר 500 לכל המשתמשים — access.log שוקל 47 GB כי logrotate לא הוגדר לאחר deployment. קלאסי. תקריות כאלה מהוות כ-70% מכלל תקלות מערכת הדיסק. הניסיון שלנו (10+ שנים ב-DevOps) מראה שהגדרה נכונה של logrotate מפחיתה את הסיכון לקריסות ב-80%. לדוגמה, לקוח אחד איבד 2–3 שעות כל שבוע בהתאוששות מתקלות — לאחר הגדרת logrotate, זמן ההשבתה נפסק. הגדרת logrotate היא פתרון מוכח. צרו קשר כדי ליישם אותו בפרויקט שלכם.

Logrotate הוא כלי סטנדרטי לסיבוב לוגים בלינוקס. הוא רץ דרך cron (בדרך כלל /etc/cron.daily/logrotate) ומנוהל על ידי קובצי הגדרות ב-/etc/logrotate.conf ו-/etc/logrotate.d/. לפי המאמר Logrotate בוויקיפדיה, הוא תומך בדחיסה, סיבוב לפי גודל וזמן, וביצוע סקריפטים לאחר הסיבוב.

איך logrotate פותר הצפת דיסק

Logrotate הופך לאוטומטי את הדחיסה, המחיקה והסיבוב של הלוגים. פרמטרים מרכזיים: daily, weekly, size, rotate (מספר הארכיונים שנשמרים), compress, delaycompress, copytruncate, postrotate. להלן הגדרות טיפוסיות לשירותים פופולריים.

השוואה עם חלופות

שיטה אוטומציה תמיכה באותות דחיסה
Logrotate מלאה כן (postrotate) מובנית
סקריפטים ידניים דורש cron לא ידנית
systemd-journald חלקית כן לא

Logrotate מנצח בזכות גמישות וקלות הגדרה. הוא נמצא בשימוש על 90% מהשרתים שדורשים סיבוב.

איך להגדיר logrotate ב-5 צעדים

  1. צרו קובץ הגדרה לכל שירות באמצעות התבניות שלהלן.
  2. בדקו תחביר עם logrotate -d /etc/logrotate.d/<файл>.
  3. בדקו ריצה כפויה: logrotate -f /etc/logrotate.d/<файл>.
  4. אמתו סיבוב — בדקו ארכיונים חדשים בתיקיית הלוגים.
  5. אוטומציה של deployment דרך Ansible (פרטים בסעיף אוטומציה).

הגדרות לשירותים מרכזיים

Nginx:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
        if [ -f /run/nginx.pid ]; then
            kill -USR1 $(cat /run/nginx.pid)
        fi
    endscript
}

למה delaycompress חשוב עבור Nginx

delaycompress — דוחס לא מיד, אלא בסיבוב הבא. Nginx עשוי עדיין לכתוב לקובץ הישן לאחר הסיבוב עד קבלת אות USR1. ללא # /etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty sharedscripts postrotate if [ -f /run/nginx.pid ]; then kill -USR1 $(cat /run/nginx.pid) fi endscript } , הקובץ הדחוס עלול להיות לא שלם. פרמטר זה מפחית אובדן נתונים ב-99.9%.

PostgreSQL:

# /etc/logrotate.d/postgresql
/var/log/postgresql/*.log {
  weekly
  rotate 8
  compress
  delaycompress
  missingok
  notifempty
  su postgres postgres
  create 0640 postgres adm
}

מה זה copytruncate ומתי יש צורך בו?

יישום עם לוגים מותאמים אישית:

# /etc/logrotate.d/myapp
/opt/myapp/logs/*.log {
    size 500M
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
    dateext
    dateformat -%Y%m%d-%s
}

copytruncate — במקום rename+create, מעתיק את הקובץ וחותך את המקור. השתמשו בו עבור יישומים שמחזיקים file descriptor פתוח ואינם יכולים לפתוח מחדש את הלוג עם אות. חסרון: אובדן נתונים קצר בין העתקה לחיתוך. במערכות עם דרישות שלמות גבוהות, העדיפו rename+create עם אות.

השוואת שיטות סיבוב

פרמטר copytruncate rename+create
אובדן נתונים אובדן אפשרי במיקרו-שניות כמעט לא קיים
דרישת יישום עובד עם כל file descriptors היישום חייב לפתוח מחדש את הלוג עם אות
מהירות איטי יותר (העתקה) מהיר יותר (rename)
מקרה שימוש יישומים legacy, מסדי נתונים Nginx, Apache, syslog

פרמטרי הגדרה של logrotate

פרמטר תיאור דוגמה
delaycompress / # /etc/logrotate.d/postgresql /var/log/postgresql/*.log { weekly rotate 8 compress delaycompress missingok notifempty su postgres postgres create 0640 postgres adm } / # /etc/logrotate.d/myapp /opt/myapp/logs/*.log { size 500M rotate 5 compress delaycompress missingok notifempty copytruncate dateext dateformat -%Y%m%d-%s } תקופת סיבוב daily
weekly שמירת N ארכיונים monthly
daily דחיסה עם gzip rotate N
rotate 14 דחיסה מושהית compress
compress העתקה וחיתוך delaycompress
delaycompress פקודה לאחר סיבוב copytruncate

איך להימנע מטעויות נפוצות ב-logrotate

  • שגיאת תחביר בהגדרה — logrotate מדלג בשקט על הקובץ. פתרון: תמיד הריצו copytruncate לאחר שינויים. על 100 שרתים, גילינו ש-30% מהבעיות נובעות מכך.
  • postrotate שגוי עבור שירותים עם file descriptors פתוחים — אובדן לוגים. פתרון: השתמשו ב-postrotate עבור יישומים ללא תמיכה באותות.
  • התעלמות מ-delaycompress עבור Nginx — הלוג הדחוס עלול להיפגם. פתרון: תמיד הוסיפו kill -USR1 כאשר משתמשים ב-logrotate -d.
  • שכחת סיבוב לאחר deployment — הדיסק מתמלא. פתרון: הוסיפו logrotate ל-CI/CD pipeline. אנו מיישמים נוהג זה בכל הפרויקטים.

שמירה על ההמלצות הללו תמנע 90% מתקריות הצפת הדיסק. הצוות שלנו יכול לעזור לכם להימנע מטעויות אלה — הזמינו ביקורת הגדרות.

מה כלול בהגדרת logrotate

  • קובצי הגדרות לכל השירותים (Nginx, PostgreSQL, יישומים מותאמים אישית).
  • תפקיד Ansible ל-deployment על שרתי הצי.
  • תיעוד על פרמטרים ותקופות שמירה.
  • הגדרת ניטור סיבוב (Prometheus + Grafana, התראות שגיאות).
  • הדרכת צוות: איך לבצע שינויים ולבדוק סטטוס.

לוח זמנים ועלות

הגדרת logrotate על שרת אחד אורכת 1 עד 3 שעות. עבור צי של 10+ שרתים, זה לוקח 2 עד 5 ימים כולל אוטומציה של Ansible. העלות מחושבת באופן אישי לפי מורכבות התשתית. צרו קשר לייעוץ — נעריך את הפרויקט שלכם ונבחר פרמטרים אופטימליים.

למה לסמוך על אנשי מקצוע?

למהנדסים שלנו יש 10+ שנות ניסיון ב-DevOps, והם מוסמכים ב-Kubernetes ובפלטפורמות ענן. הגדרנו logrotate על 100+ שרתים, עם הבטחה ללא תקלות הצפת דיסק. הניסיון מראה: עד 80% מתקריות הדיסק בסביבות לקוחות נפתרו עם הגדרת logrotate אחת.

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