Log Rotation: qanday ishlaydi, rotatsiya strategiyalari va mobil loyihalar uchun sozlash

Muallif: IT Sectr Nashr etilgan: 2026-05-28 O'qish vaqti: 8 daq

Log Rotation — bu arxivlash, siqish va eski yozuvlarni o'chirish hisobiga diskning to'lib ketishining oldini oluvchi log fayllarini avtomatik boshqarish mexanizmidir. Mobil ilovalarda loglar foydalanuvchi qurilmasida to'planadi va rotatsiyasiz bir necha hafta foydalanishda gigabaytlab xotirani egallashi mumkin. Redis Documentation ma'lumotlariga ko'ra, log rotation-ni to'g'ri sozlash disk to'lishi sababli tizim ishdan chiqish xavfini nazoratsiz log o'sishi bilan solishtirganda 99% ga kamaytiradi. Asosiy rotatsiya strategiyalari: fayl hajmiga ko'ra, vaqtga ko'ra va fayllar soniga ko'ra — har biri foydalanish stsenariysiga qarab tanlanadi: logrotate Linux-da, CocoaLumberjack iOS-da va Timber Android-da uchala yondashuvni qo'llab-quvvatlaydi.

Asosiy fikrlar

  • Log Rotation — belgilangan chegaraga erishilganda faol log faylining arxivlash yoki eski fayllarni o'chirish bilan avtomatik almashtirilishi
  • Hajm bo'yicha rotatsiya — joriy fayl limitga yetganda yangi fayl yaratish (odatda 10–100 MB), eski fayl .gz ga siqiladi
  • Vaqt bo'yicha rotatsiya — hajmdan qat'iy nazar har N soatda yoki kuniga bir marta faylni almashtirish, kunlik damplar uchun qulay
  • logrotate — tizim va dastur loglarini avtomatik rotatsiya qilish uchun standart Linux yordamchi dasturi
  • Disk kvotasi — qurilmadagi barcha loglarning umumiy hajmini cheklash, limit oshib ketganda eng eski fayllar o'chiriladi

Log Rotation nima

Log Rotation — bu faol log faylining vaqti-vaqti bilan arxivlash, siqish yoki eskisini o'chirish orqali yangisiga almashtirilishi jarayonidir. Rotatsiyasiz bitta log fayli disk bo'limini to'liq to'ldirguncha cheksiz o'sadi, bu dasturning ishdan chiqishiga va ma'lumotlar yo'qolishiga olib keladi.

Oddiy stsenariy: dastur loglarni app.log fayliga yozadi. app.log 100 MB ga yetganda, tizim uni app.log.1 deb nomlaydi, app.log.1.gz ga siqadi va yangi bo'sh app.log yaratadi. Keyingi to'lishda app.log.1 app.log.2 ga aylanadi, app.log.1.gz app.log.2.gz ga aylanadi va eski app.log.2.gz o'chiriladi. Bu mexanizm keep count bilan rotatsiya deb ataladi — arxiv nusxalari soni barqaror.

Splunk ma'lumotlariga ko'ra (2023), noto'g'ri rotatsiya sozlamasi dastur serverlarida disk to'lishi bilan bog'liq hodisalarning 40% sababidir. Mobil qurilmalar uchun rotatsiya yanada muhim, chunki foydalanuvchi loglarni qo'lda boshqara olmaydi va boshqarmasligi kerak.

Log rotatsiya strategiyalari

Log Rotation uchta asosiy strategiyani qo'llab-quvvatlaydi, ular birlashtirilishi mumkin. Strategiya tanlovi dastur turiga bog'liq: server tizimlari ko'pincha vaqt bo'yicha rotatsiyadan, mobil ilovalar — hajm bo'yicha, o'rnatilgan tizimlar — fayllar soni bo'yicha foydalanadi.

StrategiyaTriggerQachon foydalaniladi
Hajm bo'yichaFayl N baytga yetdiBashorat qilib bo'lmaydigan log hajmi bo'lgan yuqori yuklamali tizimlar
Vaqt bo'yichaN soat/kun o'tdiKunlik damplar, muvofiqlik talablari
Fayllar soni bo'yichaN fayl yaratildiCheklangan disk maydoniga ega mobil qurilmalar

Hajm bo'yicha rotatsiya — eng keng tarqalgan

Hajm bo'yicha rotatsiya hech qanday log faylining belgilangan limitdan oshmasligini kafolatlaydi. Limit mavjud disk maydoni va loglash chastotasiga qarab tanlanadi. Server uchun odatiy limit har bir fayl uchun 100–500 MB, mobil qurilma uchun 1–10 MB. Dastur intensiv loglasa, limitni kamaytirish kerak, aks holda rotatsiya har bir necha daqiqada sodir bo'ladi.

Vaqt bo'yicha rotatsiya — muvofiqlik uchun

Vaqt bo'yicha rotatsiya log hajmiga bog'liq emas — fayl qat'iy jadval bo'yicha almashtiriladi. Loglar belgilangan kunlar davomida saqlanishi kerak bo'lgan tizimlar uchun qulay: keep count = 30 bilan kunlik rotatsiya 30 kun saqlashni anglatadi. Kamchiligi — intensiv yuk ostida bitta fayl kuniga gigabaytgacha o'sishi mumkin.

Linux-da logrotate: sozlash va misollar

logrotate — loglarni avtomatik rotatsiya qilish uchun standart Linux yordamchi dasturi. U cron orqali ishga tushiriladi va /etc/logrotate.d/ papkasidagi konfiguratsiya fayllarini qayta ishlaydi. Har bir xizmat (nginx, postgresql, dastur) log yo'llari, rotatsiya strategiyasi va rotatsiyadan keyingi harakatlarni ko'rsatgan holda o'z konfigini yaratadi.

cpp
# /etc/logrotate.d/myapp — dastur loglarining rotatsiyasi
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        kill -HUP $(cat /var/run/myapp.pid)
    endscript
}

Bu konfig loglarni kunlik rotatsiya qiladi, 7 arxiv nusxasini saqlaydi, eski fayllarni gzip bilan siqadi (oxirgisidan tashqari — delaycompress), log bo'lmasa xato bermaydi (missingok), bo'sh fayllarni rotatsiya qilmaydi (notifempty) va faylni 0640 ruxsatlari bilan qayta yaratadi. Rotatsiyadan so'ng postrotate skripti orqali dastur jarayoniga HUP signali yuboradi.

logrotate parametrlari

size — hajmga yetganda rotatsiya (size 100M). rotate — arxiv nusxalari soni (rotate 7). compress — gzip siqish. dateext — tartib raqami o'rniga fayl nomiga sana qo'shish. sharedscripts — postrotate-ni har bir fayl uchun alohida emas, balki barcha fayllar uchun bir marta bajarish. maxage — N kundan eski arxivlarni o'chirish.

Mobil ilovalarda Log Rotation

Mobil qurilmalarda Log Rotation muhim, chunki foydalanuvchi fayl tizimini boshqarmaydi va dastur gigabaytlab log egallashini kutmaydi. iOS va Android ichki mexanizmlarga ega: iOS-da os_log doimiy o'lchamdagi halqali buferdan foydalanadi (qayta yozish orqali rotatsiya), Android Logcat yadroda cheklangan buferga ega.

iOS-da maxsus fayl loglari uchun CocoaLumberjack DDFileLogger sinfi bilan ishlatiladi, u hajm va vaqt bo'yicha rotatsiyani qo'llab-quvvatlaydi. Android-da — Logback yoki RollingFileAppender orqali o'z implementatsiyalar. Ikkala vosita maksimal fayl hajmi va arxivlar sonini belgilashga imkon beradi.

swift
// CocoaLumberjack — iOS-da fayl rotatsiyasi
import CocoaLumberjack

let fileLogger = DDFileLogger()
fileLogger.maximumFileSize = 1024 * 1024 // 1 MB
fileLogger.logFileManager.maximumNumberOfLogFiles = 5
DDLog.add(fileLogger)

iOS: os_log rotatsiyani talab qilmaydi — xabarlar halqali buferda qayta yoziladi. Lekin dastur maxsus fayl loglarini yozsa (masalan, disk raskadrovka yoki serverga yuborish uchun), rotatsiyani qo'lda sozlash kerak. CocoaLumberjack iOS jamoalari uchun standart tanlovdir, u avtomatik ravishda arxivlarni .gz ga siqadi va limit oshib ketganda eski fayllarni o'chiradi.

Nima uchun rotatsiya Android-da muhim

Android dasturni o'z papkasiga log yozishda cheklamaydi. Dasturchi debug-log-larni rotatsiyasiz faylga yozsa, bir oylik faol foydalanishda ular 500 MB — 1 GB egallashi mumkin. Foydalanuvchi muammoni tizim joy yetmasligi haqida ogohlantirish ko'rsatganda aniqlaydi va dasturni o'chiradi. RollingFileAppender bilan Logback bu muammoni hal qiladi: 3 arxiv bilan 5 MB limiti loglarning hech qachon 20 MB dan ortiq joy egallamasligini kafolatlaydi.

iOS va Android-da rotatsiyani amalga oshirish misollari

Quyida ikkala platformada log rotatsiyasini sozlash misollari keltirilgan. iOS-da CocoaLumberjack, Android-da XML konfiguratsiya bilan Logback ishlatiladi.

kotlin
// Android-da Logback — logback.xml da rotatsiya konfiguratsiyasi
// Fayl hajmi 5MB, 3 arxiv nusxasi
@file:Suppress("unused")

// Logback.xml da:
// <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
//   <file>${DATA_DIR}/logs/app.log</file>
//   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
//     <fileNamePattern>app.%i.log.gz</fileNamePattern>
//     <minIndex>1</minIndex>
//     <maxIndex>3</maxIndex>
//   </rollingPolicy>
//   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
//     <maxFileSize>5MB</maxFileSize>
//   </triggeringPolicy>
// </appender>

CocoaLumberjack iOS-da nafaqat hajm bo'yicha rotatsiyani, balki logFileManager.maximumLogFiles orqali eski loglarni sana bo'yicha o'chirishni ham qo'llab-quvvatlaydi. maximumLogFiles = 0 qilib sozlasangiz, cheklov olib tashlanadi — loglar cheksiz to'planadi, bu production uchun xavfli.

swift
// Umumiy hajmni tekshirish bilan maxsus rotatsiya
class SizeAwareLogger {
    let maxTotalSize: Int64 = 20 * 1024 * 1024

    func enforceQuota(at logDirectory: URL) {
        let files = (try? FileManager.default
            .contentsOfDirectory(
                at: logDirectory,
                includingPropertiesForKeys: [.fileSize]
            )) ?? []
        let total = files.reduce(0) {
            $0 + (try? $1.resourceValues(forKeys: [.fileSize])
                .fileSize).map(Int64.init) ?? 0
        }
        if total > maxTotalSize {
            // Eng eski faylni o'chirmoqdamiz
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Rotatsiya vaqtida monitoring va ogohlantirishlar

Log Rotation nafaqat avtomatik arxivlash, balki tizim sog'lig'ining ko'rsatkichidir. Agar loglar juda tez-tez rotatsiya qilinsa (har bir necha daqiqada), bu haddan tashqari loglash yoki xatolarning tsiklik loglanishi (error log loop) signalidir. Rotatsiya chastotasiga ogohlantirishlar o'rnating: soatiga 10 dan ortiq rotatsiya — tekshirish uchun sabab.

Monitoring tizimlari (Prometheus, Grafana, Datadog) fayl tizimi eksportchilari orqali rotatsiya metrikalarini kuzatishi mumkin. Prometheus node_exporter fayl hajmi va ularning o'zgartirilgan vaqti metrikalarini taqdim etadi. Mobil qurilmalarda rotatsiya monitoringi odatda SDK-ga o'rnatilgan: CocoaLumberjack DDLog orqali rotatsiya hodisasini qayd etadi, Logback esa appender orqali status yuboradi.

Ogohlantirishlar: agar arxivlar kutilganidan ko'p bo'lsa (rotate count limitdan oshdi) yoki loglarning umumiy hajmi kvotadan oshib ketgan bo'lsa — tizim administratorga xabar berishi kerak. Serverlar uchun standart chegara bo'limning 80%, mobil qurilmalar uchun — dastur uchun 50 MB dan oshganda ogohlantirish.

Tez-tez beriladigan savollar

Rotatsiya uchun log faylining optimal hajmi qanday?

Serverlar uchun — 100–500 MB, mobil ilovalar uchun — 1–10 MB. Juda kichik limit (1 MB dan kam) tez-tez rotatsiyaga va ortiqcha kiritish-chiqarish operatsiyalariga sabab bo'ladi. Juda katta limit (500 MB dan ortiq) faylni ochish va qidirish vaqtini oshiradi.

Loglarning nechta arxiv nusxasini saqlash kerak?

Production uchun — minimal 7 kun (kunlik rotatsiya) yoki 3–5 arxiv (hajm bo'yicha rotatsiya). Muvofiqlik talablari uchun — 30–90 kun, lekin bu holda bir xil bo'limda rotatsiya emas, balki siqish va saqlash siyosati bilan alohida ombordan foydalaning.

logrotate mobil qurilmalarda qanday ishlaydi?

logrotate Linux yordamchi dasturi bo'lib, iOS va Android-da mavjud emas. Mobil qurilmalarda rotatsiya kutubxonalar tomonidan amalga oshiriladi: iOS uchun CocoaLumberjack va Android uchun Logback. Ular root kirishni talab qilmaydi va dasturning sandbox muhitida ishlaydi.

Loglar har daqiqada rotatsiya qilinsa nima qilish kerak?

Tsiklik loglash mavjudligini tekshiring — xatoni qayta ishlashning o'zi yangi xato yaratadi. Himoya qo'shing: bir turdagi takroriy loglash hisoblagichi chegara bilan (daqiqada 100 dan ortiq bir xil xabar bo'lmasligi kerak) va chegaradan oshganda vaqt blokirovkasi.

Log arxivlarini siqish majburiymi?

Majburiy emas, lekin tavsiya etiladi. gzip matn loglarini ma'lumot yo'qotmasdan 10–20 marta siqadi. Mobil qurilmalarda siqish egallangan joyni 50 MB dan 3–5 MB gacha kamaytiradi. Yagona kamchilik — arxivni ochmasdan o'qib bo'lmaydi, lekin tahlil uchun odatda faqat joriy fayl kerak bo'ladi.

Xulosa

  • Log Rotation — disk to'lib ketishining oldini olish uchun limitga yetganda yangi fayllar yaratadigan va eskilarini arxivlaydigan avtomatik log fayl boshqaruvi
  • Uch strategiya — fayl hajmiga ko'ra (eng keng tarqalgan), vaqtga ko'ra (damplar uchun) va fayllar soniga ko'ra (cheklangan maydonga ega mobil qurilmalar uchun)
  • logrotate — moslashuvchan parametrlar bilan server rotatsiyasi uchun standart Linux vositasi: daily, size, compress, rotate, postrotate skriptlari
  • Mobil kutubxonalar — iOS-da CocoaLumberjack va Android-da Logback siqish va arxivlar sonini cheklash bilan hajm bo'yicha rotatsiyani qo'llab-quvvatlaydi
  • Disk kvotasi — barcha loglar uchun umumiy limit: mobil ilovalar uchun 20 MB va chegaradan oshganda ogohlantirish bilan serverlar uchun bo'limning 80%
  • Monitoring — juda tez-tez rotatsiya (soatiga 10 martadan ortiq) tsiklik xato loglashi yoki haddan tashqari log hajmini ko'rsatadi
  • gzip siqish — arxiv hajmini 10–20 marta kamaytiradi, barcha platformalar uchun tavsiya etiladi, delaycompress oxirgi arxivni tez o'qish uchun siqilmagan holda qoldiradi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing