Log Rotation: necə işləyir, rotasiya strategiyaları və mobil layihələr üçün konfiqurasiya

Müəllif: IT Sectr Dərc olunub: 2026-05-28 Oxuma vaxtı: 8 dəq

Log Rotation — arxivləşdirmə, sıxlaşdırma və köhnə qeydlərin silinməsi hesabına diskin dolmasının qarşısını alan avtomatik log fayl idarəetmə mexanizmidir. Mobil tətbiqlərdə loglar istifadəçinin cihazında toplanır və rotasiya olmadan bir neçə həftəlik istifadədə qiqabaytlarla yaddaş tuta bilər. Redis Documentation məlumatına görə, log rotation-un düzgün konfiqurasiyası diskin dolması səbəbindən sistemin sıradan çıxma riskini nəzarətsiz log artımı ilə müqayisədə 99% azaldır. Əsas rotasiya strategiyaları: fayl ölçüsünə görə, zamana görə və fayl sayına görə — hər biri istifadə ssenarisindən asılı olaraq seçilir: logrotate Linux-da, CocoaLumberjack iOS-da və Timber Android-də hər üç yanaşmanı dəstəkləyir.

Əsas məqamlar

  • Log Rotation — müəyyən edilmiş həddə çatdıqda aktiv log faylının arxivləşdirmə və ya köhnə faylların silinməsi ilə avtomatik dəyişdirilməsi
  • Ölçüyə görə rotasiya — cari fayl limitə çatdıqda yeni fayl yaradılması (tipik olaraq 10–100 MB), köhnə fayl .gz formatında sıxılır
  • Zamana görə rotasiya — ölçüdən asılı olmayaraq hər N saatda və ya gündə bir dəfə faylın dəyişdirilməsi, gündəlik damplar üçün əlverişlidir
  • logrotate — sistem və tətbiq loglarının avtomatik rotasiyası üçün standart Linux yardımçı proqramı
  • Disk kvotası — cihazdakı bütün logların ümumi həcminin məhdudlaşdırılması, limit aşıldıqda ən köhnə fayllar silinir

Log Rotation nədir

Log Rotation — aktiv log faylının vaxtaşırı olaraq arxivləşdirmə, sıxlaşdırma və ya köhnənin silinməsi ilə yenisi ilə əvəz edilməsi prosesidir. Rotasiya olmadan bir log faylı disk bölməsini tam doldurana qədər sonsuz böyüyür, bu da tətbiqin sıradan çıxmasına və məlumat itkisinə səbəb olur.

Tipik ssenari: tətbiq logları app.log faylına yazır. app.log 100 MB-a çatdıqda, sistem onu app.log.1 olaraq adlandırır, app.log.1.gz-ə sıxır və yeni boş app.log yaradır. Növbəti dolmada app.log.1 app.log.2 olur, app.log.1.gz app.log.2.gz olur və köhnə app.log.2.gz silinir. Bu mexanizm keep count ilə rotasiya adlanır — arxiv nüsxələrinin sayı sabitdir.

Splunk məlumatına görə (2023), səhv rotasiya konfiqurasiyası tətbiq serverlərində diskin dolması ilə bağlı hadisələrin 40%-nin səbəbidir. Mobil cihazlar üçün rotasiya daha kritikdir, çünki istifadəçi logları əl ilə idarə edə bilməz və etməməlidir.

Log rotasiya strategiyaları

Log Rotation üç əsas strategiyanı dəstəkləyir, onlar birləşdirilə bilər. Strategiyanın seçimi tətbiq növündən asılıdır: server sistemləri daha çox zamana görə rotasiyadan, mobil tətbiqlər ölçüyə görə, quraşdırılmış sistemlər fayl sayına görə rotasiyadan istifadə edir.

StrategiyaTetikləyiciNə vaxt istifadə edilməli
Ölçüyə görəFayl N bayta çatdıProqnozlaşdırıla bilməyən log həcmi olan yüksək yüklü sistemlər
Zamana görəN saat/gün keçdiGündəlik damplar, uyğunluq tələbləri
Fayl sayına görəN fayl yaradıldıMəhdud disk sahəsi olan mobil cihazlar

Ölçüyə görə rotasiya — ən geniş yayılmış

Ölçüyə görə rotasiya heç bir log faylının müəyyən edilmiş limiti keçməməsinə zəmanət verir. Limit mövcud disk sahəsi və loglama tezliyi nəzərə alınmaqla seçilir. Server üçün tipik limit fayl başına 100–500 MB, mobil cihaz üçün 1–10 MB-dır. Tətbiq intensiv loglayırsa, limit azaldılmalıdır, əks halda rotasiya hər bir neçə dəqiqədən bir baş verəcək.

Zamana görə rotasiya — uyğunluq üçün

Zamana görə rotasiya log həcmindən asılı deyil — fayl cədvələ uyğun olaraq dəyişdirilir. Logların sabit sayda gün saxlanılmalı olduğu sistemlər üçün əlverişlidir: keep count = 30 ilə gündəlik rotasiya 30 gün saxlanılma deməkdir. Dezavantaj — intensiv yük altında bir fayl gündə qiqabayta qədər böyüyə bilər.

Linux-da logrotate: konfiqurasiya və nümunələr

logrotate — logların avtomatik rotasiyası üçün standart Linux yardımçı proqramı. Cron vasitəsilə işə salınır və /etc/logrotate.d/ qovluğundakı konfiqurasiya fayllarını emal edir. Hər bir xidmət (nginx, postgresql, tətbiq) log yolları, rotasiya strategiyası və rotasiyadan sonrakı əməliyyatları göstərən öz konfiqini yaradır.

cpp
# /etc/logrotate.d/myapp — tətbiq loglarının rotasiyası
/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 konfiq logları gündəlik rotasiya edir, 7 arxiv nüsxəsi saxlayır, köhnə faylları gzip ilə sıxır (sonuncu istisna olmaqla — delaycompress), log yoxdursa səhv vermir (missingok), boş faylları rotasiya etmir (notifempty) və faylı 0640 icazələri ilə yenidən yaradır. Rotasiyadan sonra postrotate skripti vasitəsilə tətbiq prosesinə HUP siqnalı göndərir.

logrotate parametrləri

size — ölçüyə çatdıqda rotasiya (size 100M). rotate — arxiv nüsxələrinin sayı (rotate 7). compress — gzip sıxlaşdırması. dateext — sıra nömrəsi əvəzinə fayl adına tarixin əlavə edilməsi. sharedscripts — postrotate-in hər fayl üçün ayrı yox, bütün fayllar üçün bir dəfə yerinə yetirilməsi. maxage — N gündən köhnə arxivlərin silinməsi.

Mobil tətbiqlərdə Log Rotation

Mobil cihazlarda Log Rotation kritikdir, çünki istifadəçi fayl sistemi idarə etmir və tətbiqin qiqabaytlarla log tutmasını gözləmir. iOS və Android daxili mexanizmlərə malikdir: iOS-da os_log sabit ölçülü tsiklik buferdən istifadə edir (üstünə yazmaqla rotasiya), Android Logcat nüvədə məhdud buferə malikdir.

iOS-da fərdi fayl logları üçün CocoaLumberjack DDFileLogger sinfi ilə istifadə olunur, ölçüyə və zamana görə rotasiyanı dəstəkləyir. Android-də — Logback və ya RollingFileAppender vasitəsilə öz tətbiqlər. Hər iki alət maksimum fayl ölçüsünü və arxiv sayını təyin etməyə imkan verir.

swift
// CocoaLumberjack — iOS-da fayl rotasiyası
import CocoaLumberjack

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

iOS: os_log rotasiya tələb etmir — mesajlar tsiklik buferdə üzərinə yazılır. Lakin tətbiq fərdi fayl logları yazırsa (məsələn, debug və ya serverə göndərmək üçün), rotasiya əl ilə konfiqurasiya edilməlidir. CocoaLumberjack iOS komandaları üçün standart seçimdir, avtomatik olaraq arxivləri .gz formatında sıxır və limit aşıldıqda köhnə faylları silir.

Rotasiya nə üçün Android-də vacibdir

Android tətbiqin öz qovluğuna log yazmasını məhdudlaşdırmır. Tərtibatçı debug-logları rotasiyasız fayla yazırsa, bir aylıq aktiv istifadədə 500 MB — 1 GB yer tuta bilər. İstifadəçi problemi sistem yer olmaması barədə xəbərdarlıq göstərdikdə aşkarlayacaq və tətbiqi siləcək. RollingFileAppender ilə Logback bu problemi həll edir: 3 arxivlə 5 MB limiti logların heç vaxt 20 MB-dan çox yer tutmamasına zəmanət verir.

iOS və Android-də rotasiyanın tətbiq nümunələri

Aşağıda hər iki platformada log rotasiyasının konfiqurasiya nümunələri verilmişdir. iOS-da CocoaLumberjack, Android-də isə XML konfiqurasiya ilə Logback istifadə olunur.

kotlin
// Android-də Logback — logback.xml-də rotasiya konfiqurasiyası
// Fayl ölçüsü 5MB, 3 arxiv nüsxəsi
@file:Suppress("unused")

// logback.xml-də:
// <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 təkcə ölçüyə görə rotasiyanı deyil, həm də logFileManager.maximumLogFiles vasitəsilə köhnə logların tarixə görə silinməsini dəstəkləyir. maximumLogFiles = 0 təyin etsəniz, məhdudiyyət götürülür — loglar sonsuz toplanacaq, bu production üçün təhlükəlidir.

swift
// Ümumi həcm yoxlanışı ilə fərdi rotasiya
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 {
            // Ən köhnə faylı silirik
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Rotasiya zamanı monitorinq və xəbərdarlıqlar

Log Rotation təkcə avtomatik arxivləşdirmə deyil, həm də sistem sağlamlığının göstəricisidir. Loglar çox tez-tez rotasiya olunursa (hər bir neçə dəqiqədən bir), bu həddindən artıq loglama və ya səhvlərin tsiklik loglanması (error log loop) siqnalıdır. Rotasiya tezliyinə xəbərdarlıqlar qurun: saatda 10-dan çox rotasiya — yoxlama üçün səbəb.

Monitorinq sistemləri (Prometheus, Grafana, Datadog) fayl sistemi eksportçuları vasitəsilə rotasiya metrikalarını izləyə bilər. Prometheus node_exporter fayl ölçüsü və dəyişdirilmə vaxtı metrikalarını təmin edir. Mobil cihazlarda rotasiya monitorinqi adətən SDK-ya daxildir: CocoaLumberjack DDLog vasitəsilə rotasiya hadisəsini qeyd edir, Logback isə appender vasitəsilə status göndərir.

Xəbərdarlıqlar: arxivlər gözləniləndən çoxdursa (rotate count limiti keçdi) və ya logların ümumi həcmi kvotanı keçibsə — sistem administratora bildiriş göndərməlidir. Serverlər üçün standart hədd bölmənin 80%-i, mobil cihazlar üçün — tətbiq başına 50 MB keçdikdə xəbərdarlıqdır.

Tez-tez verilən suallar

Rotasiya üçün log faylının optimal ölçüsü nədir?

Serverlər üçün — 100–500 MB, mobil tətbiqlər üçün — 1–10 MB. Çox kiçik limit (1 MB-dan az) tez-tez rotasiyaya və artıq giriş-çıxış əməliyyatlarına səbəb olur. Çox böyük limit (500 MB-dan çox) faylın açılma və axtarış vaxtını artırır.

Logların neçə arxiv nüsxəsini saxlamaq lazımdır?

Production üçün — minimum 7 gün (gündəlik rotasiya) və ya 3–5 arxiv (ölçüyə görə rotasiya). Uyğunluq tələbləri üçün — 30–90 gün, lakin bu halda eyni bölmədə rotasiya deyil, sıxlaşdırma və saxlama siyasəti ilə ayrıca anbardan istifadə edin.

logrotate mobil cihazlarda necə işləyir?

logrotate Linux yardımçı proqramıdır, iOS və Android-də mövcud deyil. Mobil cihazlarda rotasiya kitabxanalar tərəfindən həyata keçirilir: iOS üçün CocoaLumberjack və Android üçün Logback. Onlar root girişi tələb etmir və tətbiqin sandbox mühitində işləyir.

Loglar hər dəqiqə rotasiya olunarsa nə etməli?

Tsiklik loglamanın olub-olmadığını yoxlayın — səhvin işlənməsi özü yeni səhv yaradır. Mühafizə əlavə edin: bir tipin eyni mesajlarının sayğacı həddi ilə (dəqiqədə 100-dən çox olmamaq şərtilə) və hədd aşıldıqda vaxt blokadası.

Log arxivlərini sıxmaq mütləqdirmi?

Mütləq deyil, lakin tövsiyə olunur. gzip mətn loglarını məlumat itkisi olmadan 10–20 dəfə sıxır. Mobil cihazlarda sıxlaşdırma tutulan yeri 50 MB-dan 3–5 MB-a qədər azaldır. Yeganə çatışmazlıq — arxivi açmadan oxumaq mümkün deyil, lakin analiz üçün adətən yalnız cari fayl lazımdır.

Nəticə

  • Log Rotation — diskin dolmasının qarşısını almaq üçün limitə çatdıqda yeni fayllar yaradan və köhnələrini arxivləşdirən avtomatik log fayl idarəetməsi
  • Üç strategiya — fayl ölçüsünə görə (ən geniş yayılmış), zamana görə (damplar üçün) və fayl sayına görə (məhdud sahəsi olan mobil cihazlar üçün)
  • logrotate — çevik parametrlərlə server rotasiyası üçün standart Linux aləti: daily, size, compress, rotate, postrotate skriptləri
  • Mobil kitabxanalar — iOS-da CocoaLumberjack və Android-də Logback sıxlaşdırma və arxiv sayı məhdudiyyəti ilə ölçüyə görə rotasiyanı dəstəkləyir
  • Disk kvotası — bütün loglar üçün ümumi limit: mobil tətbiqlər üçün 20 MB və hədd aşıldıqda xəbərdarlıqla serverlər üçün bölmənin 80%-i
  • Monitorinq — çox tez-tez rotasiya (saatda 10 dəfədən çox) tsiklik səhv loglaması və ya həddindən artıq log həcmini göstərir
  • gzip sıxlaşdırması — arxiv həcmini 10–20 dəfə azaldır, bütün platformalar üçün tövsiyə olunur, delaycompress son arxivi sıxılmamış saxlayır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun