logrotate के साथ लॉग्स को 1 घंटे के अंतराल पर विभाजित करना और zstd के साथ संकुचित करना
सर्वर
Lastmod: 2023-11-30
Published: 2021-03-29

logrotate के साथ zstd से संकुचन करते हुए, 1 घंटे के अंतराल पर nginx के लॉग को विभाजित करने के लिए
एक नोट्स छोड़ा गया है।

सारांश

सीधे, /etc/logrotate.conf या /etc/logrotate.d/ में सेटिंग डालने से मूल रूप से
/etc/cron.daily/logrotate की दैनिक क्रॉन में निष्पादित किया जाएगा।

इस बार हम 1 घंटे के अंतराल पर लॉग रोटेट करना चाहते हैं, इसलिए logrotate की सेटिंग अलग से तैयार की है,
systemd के टाइमर फ़ीचर का उपयोग करके इसे निष्पादित किया गया।

zstd को सक्षम करना

# apt install zstd

logrotate

/etc/logrotate-nginx.conf बनाने का निर्णय लेते हैं।
इस बार zstd का उपयोग किया जा रहा है, लेकिन bzip2 आदि को एक जैसे सेट करके बदला जा सकता है।

# cat << _EOF_ > /etc/logrotate-nginx.conf
compresscmd /usr/bin/zstd # zstd का पथ निर्दिष्ट करें
compressoptions -12       # zstd को दिए जाने वाले विकल्प। व्यक्तिगत रूप से -12 अच्छा था
compressext .zst          # जोड़ी जाने वाली एक्सटेंशन

/var/log/nginx/*.log {
        missingok
        rotate 720 # 24 घंटे * 30 दिन 
        dateext
        dateformat -%Y%m%d%H
        compress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}
_EOF_

systemd

  • सेवा को परिभाषित करें
# cat << _EOF_ > /etc/systemd/system/logrotate-nginx.service
[Unit]
Description=logrotate-nginx
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/logrotate -f /etc/logrotate-nginx.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
_EOF_
  • टाइमर को परिभाषित करें
# cat << _EOF_ > /etc/systemd/system/logrotate-nginx.timer
[Unit]
Description=logrotate-nginx
[Timer]
OnCalendar=*:00:00
[Install]
WantedBy=timers.target
_EOF_
  • systemd की सेटिंग्स को पढ़ें
# systemctl daemon-reload
  • टाइमर को सक्षम करें
# systemctl enable logrotate-nginx.timer
  • टाइमर शुरू करें
# systemctl start logrotate-nginx.timer
  • टाइमर की स्थिति की जांच करें
# systemctl status logrotate-nginx.timer
● logrotate-nginx.timer - logrotate-nginx
     Loaded: loaded (/etc/systemd/system/logrotate-nginx.timer; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-03-29 20:00:00 JST; 5h 58min ago
    Trigger: n/a
   Triggers: ● logrotate-nginx.service

Mar 29 19:00:00 log systemd[1]: Started logrotate-nginx.

Active के तहत अगली बार निष्पादित होने वाला समय, लॉग में पहले किए गए निष्पादन के समय को देखा जा सकता है🎉

2023 नवंबर में अपडेट

यदि यह 1 घंटे के अंतराल पर है, तो यह अधिक चिंता का विषय नहीं है, लेकिन 1 मिनट के अंतराल पर लॉग विभाजित किया जाता है, तो टाइमर की सटीकता के कारण, थोड़ा अंतर हो सकता है, और अनुमानित समय के अलावा भी समय शामिल हो सकता है।

इसलिए, यदि आप इसे सटीक 0 सेकंड पर निष्पादित करना चाहते हैं, तो निम्नलिखित के रूप में सेट करना उचित है।

[Unit]
Description=logrotate-nginx
[Timer]
OnCalendar=*:*:00
AccuracySec=1s
[Install]
WantedBy=timers.target

AccuracySec को निर्दिष्ट करके, इसे 1 सेकंड के अंतराल पर निष्पादित किया जा सकता है।