VPN nəzarət jurnalını yazanı pozmadan rotasiya etmək
Əvvəlcə çıxış yerini seçin, sonra rotasiyanı yazıçının faylı açma üsuluna uyğunlaşdırın: qısamüddətli yoxlamalar üçün adı dəyişin, daemon üçün yenidən açın və ya copytruncate edin.
VPN sağlamlıq yoxlaması dəqiqədə bir sətir əlavə etməklə səssizcə ikinci bir vəzifə yaradır: həmin sətirlərin diskdən necə çıxacağına qərar vermək. Tuneli düzəltmək bu vəzifə üçün heç nə etmir və faylın adını dəyişmək hələ də köhnə deskriptoru saxlayan prosesi yönləndirmir. Əvvəlcə çıxış yeri sualına cavab verin, sonra rotasiyanı yazıçının onu açma üsuluna uyğunlaşdırın.
Rotasiya siyasətindən əvvəl çıxış yerini seçin
Çıxışını artıq jurnala göndərən systemd vahidi saxlanma müddətini bir yerdə saxlayır. journald SystemMaxUse və MaxRetentionSec kimi limitləri tətbiq edir, ona görə orada jurnal aparan nəzarətçi əlavə iş görülmədən bir həddi miras alır. Onun yanına ikinci, hədsiz fayl əlavə etmək heç bir fayda vermədən baxımı ikiqat artırır.
Ayrılmış fayl öz yerini başqa bir şey onu oxuyanda qazanır: parser, audit eksportu və ya sabit yol gözləyən səhifə. Bu qərar verildikdən sonra faylın sahibi, rejimi və rotasiya siyasəti birlikdə yazılmalıdır, çünki üçü yalnız bir dəst kimi düzgündür. Hər kəsin yarada bildiyi yol həm də hər kəsin əvəz edə bildiyi yoldur, ona görə qovluq icazələri də həmin qeydə aiddir. Hamısını yoxlamanın yanında yazın və növbəti düzəliş eyni faktlardan başlayar.
Bölməni yazıçıya uyğun yazın
Hər çağırışda yolu açan, bir sətir əlavə edən və çıxan yazıçıdan başlayın. Bu nümunə prosesin heç bir köməyi olmadan rotasiyadan sağ çıxır, çünki növbəti iş həmin yolda hazırda duran faylı açır. Aşağıdakı bölmə bir həftəlik versiya saxlayır və faylı yazıçının ehtiyac duyduğu sahib və rejimlə yenidən yaradır:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
logrotate təlimatı sayı saxlanılan fırlanmış versiyaların sayı kimi müəyyən edir, zəmanətli yeddi günlük tarixçə kimi yox, və daily açar sözü öz planlaşdırıcısı kimi çıxış etmək əvəzinə iş icra olunanda qiymətləndirilir. Əksər distributivlərdə systemd taymeri və ya cron qeydi artıq həmin çağırışa sahibdir, ona görə ikincisini əlavə etməzdən əvvəl hansının mövcud olduğunu yoxlayın. Sahibliyin uyğunluğu saxlanma sayından daha vacibdir. Yalnız root üçün olan rejimi xidmət hesabının yazdığı fayla köçürmək növbəti rotasiyada jurnalı dayandırır və nasazlıq saatlar sonra xəta kimi deyil, köhnəlmiş zaman damğası kimi görünür. Bölməni başqa yerdən köçürməzdən əvvəl yazıçının istifadəçisini təsdiqləyin.
Heç vaxt yenidən açmayan yazıçı fərqli düzəliş tələb edir
Açıq deskriptoru saxlayan uzunmüddətli proses adı dəyişdirilmiş inode-a yazmağa davam edir. Yer azad olunmur və görünən fayl böyüməyi dayandırır, bu da inode-u yoxlayana qədər pozulmuş rotasiya kimi görünür. Ya prosesə yenidən açmağı öyrədin, ya da rotasiyanı adı dəyişmək əvəzinə kopyalayıb kəsməyə məcbur edin.
Yenidən açma yolu proqram təminatı dəstəklədiyi yerdə daha təmizdir: sənədləşdirilmiş siqnalı göndərin və ya sənədləşdirilmiş əmri icra edin və proses yeni faylı özü açsın. Alternativ copytruncate-dır, o, məzmunu fırlanmış ada kopyalayır və sonra orijinalı yerində kəsir, beləliklə deskriptor etibarlı qalır, lakin kopyalama ilə kəsmə arasında düşən yazılar itir.
systemd tərəfindən başladılan vahidlər üçün StandardOutput-ı jurnala və ya fayla yönəldin və həyat dövrünü vahidə buraxın. tee -a vasitəsilə ölçü həddi olmadan əlavə edən shell dövrəsi kəsinti zamanı bölməni dolduran quruluşdur, çünki uğursuz yoxlama adətən sağlamdan qat-qat çox jurnal yazır.
Rotasiyanı taymeri gözləmədən sınaqdan keçirin
Sazlama rejimi nə olacağını bildirir və heç nəyə toxunmur, bu da onu düzəlişdən sonra təhlükəsiz ilk işə salma edir. Razı qaldıqdan sonra real rotasiyanı məcburi edin, sonra növbəti jurnal sətrinin adı dəyişdirilmiş fayla deyil, yeni fayla düşdüyünü təsdiqləyin:
logrotate -d /etc/logrotate.d/vpn-watchdog logrotate -f /etc/logrotate.d/vpn-watchdog ls -l /var/log/vpn-watchdog.log* tail -n 3 /var/log/vpn-watchdog.log df -h /var/log
Çıxışı bu ardıcıllıqla oxuyun. Sazlama keçidi faylı və niyyət etdiyi əməliyyatları adlandırmalıdır; məcburi keçid gözlədiyiniz fırlanmış adı yaratmalıdır; tail yazıçı yenidən işlədikdən sonra təzə qeyd göstərməlidir. Böyüyən df dəyəri kiçilən görünən faylla birlikdə yuxarıda təsvir edilən deskriptor problemini bildirir.
Versiyalar artıq mövcud olanda saxlanmanın necə davrandığını görmək üçün məcburi keçidi iki dəfə təkrarlayın. Ən köhnə faylın silinməsi gözlənilən nəticədir və silinmənin olmaması adətən sayın və ya fırlanmış addakı wildcard-ın logrotate-in yaratdığı ilə uyğun gəlmədiyini bildirir.
Geri qaytarma və yazılı qeyd saxlayın
Düzəlişdən əvvəl əvvəlki bölməni yadda saxlayın və hansı planlaşdırıcının onu işlətdiyini qeyd edin, çünki faylı bərpa edib taymeri bərpa etməyən geri qaytarma orijinal problemin yarısını təkrar istehsal edir. Bərpadan sonra bir dəfə əllə fırladın, sonra jurnal yolunun yazıçının hesabı ilə yazıla bildiyini təsdiqləyin. Xidmət systemd altında işləyirsə, çıxışının yönləndirilməsində hər hansı dəyişiklikdən sonra vahidi yenidən yükləyin, çünki işləyən proses köhnə hədəfə yazmağa davam edir. Vahidin təmiz qayıtdığına güvənmək əvəzinə növbəti bir neçə jurnal sətrini özünüz oxuyun.
Rejimi, sahibi, saxlanma sayını və gözlənilən disk büdcəsini yoxlamanın özünün yanında qeyd edin. Yoxlama sonradan birdəfəlik skriptdən daemon-a çevrildikdə rotasiya siyasəti də onunla dəyişməlidir və həmin qeyd növbəti adama hansı fərziyyənin pozulduğunu deyən şeydir.
Nəhayət, jurnal qərarını bərpa qərarından ayrı saxlayın. Uğursuz yoxlama əlaqənin öz bərpa siyasətinə uyğun olmalıdır, logrotate içində gizlənmiş qaydaya deyil və heç bir jurnal quruluşu işləyən tunelin yenidən başladılmasının səbəbi olmamalıdır.