Πώς να ρυθμίσετε και να διαχειριστείτε την περιστροφή αρχείων καταγραφής χρησιμοποιώντας το Logrotate στο Linux
Ένας από τους πιο ενδιαφέροντες (και ίσως ένας από τους πιο σημαντικούς επίσης) καταλόγους σε ένα σύστημα Linux είναι ο /var/log
. Σύμφωνα με το Πρότυπο Ιεραρχίας Συστήματος Αρχείων, η δραστηριότητα των περισσότερων υπηρεσιών που εκτελούνται στο σύστημα εγγράφονται σε ένα αρχείο μέσα σε αυτόν τον κατάλογο ή σε έναν από τους υποκαταλόγους του.
Τέτοια αρχεία είναι γνωστά ως αρχεία καταγραφής και αποτελούν το κλειδί για την εξέταση του τρόπου λειτουργίας του συστήματος (και της συμπεριφοράς του στο παρελθόν). Τα Αρχεία καταγραφής είναι επίσης η πρώτη πηγή πληροφοριών όπου οι διαχειριστές και οι μηχανικοί αναζητούν κατά την αντιμετώπιση προβλημάτων.
Αν δούμε τα περιεχόμενα του /var/log
σε CentOS/RHEL/Fedora και Debian/Ubuntu (για ποικιλία) θα δούμε τα ακόλουθα αρχεία καταγραφής και υποκαταλόγους.
Λάβετε υπόψη ότι το αποτέλεσμα μπορεί να είναι κάπως διαφορετικό στην περίπτωσή σας, ανάλογα με τις υπηρεσίες που εκτελούνται στα συστήματά σας και τον χρόνο λειτουργίας τους.
Σε RHEL/CentOS και Fedora
# ls /var/log
Στο Debian και στο Ubuntu
# ls /var/log
Και στις δύο περιπτώσεις, μπορούμε να παρατηρήσουμε ότι ορισμένα από τα ονόματα αρχείων καταγραφής τελειώνουν όπως αναμένεται σε \log, ενώ άλλα είτε μετονομάζονται χρησιμοποιώντας μια ημερομηνία (για παράδειγμα, maillog-20160822 σε CentOS) ή συμπιεσμένα (εξετάστε τα auth.log.2.gz και mysql.log.1.gz στο Debian<).
Αυτή δεν είναι μια προεπιλεγμένη συμπεριφορά που βασίζεται στην επιλεγμένη διανομή, αλλά μπορεί να αλλάξει κατά βούληση χρησιμοποιώντας οδηγίες στα αρχεία διαμόρφωσης, όπως θα δούμε σε αυτό το άρθρο.
Εάν τα αρχεία καταγραφής διατηρούνταν για πάντα, θα κατέληγαν τελικά να γεμίσουν το σύστημα αρχείων όπου βρίσκεται το /var/log. Για να το αποτρέψει αυτό, ο διαχειριστής του συστήματος μπορεί να χρησιμοποιήσει ένα ωραίο βοηθητικό πρόγραμμα που ονομάζεται logrotate για να καθαρίζει τα αρχεία καταγραφής σε περιοδική βάση.
Με λίγα λόγια, το logrotate θα μετονομάσει ή θα συμπιέσει το κύριο αρχείο καταγραφής όταν πληρούται μια συνθήκη (περισσότερα σε ένα λεπτό) έτσι ώστε το επόμενο συμβάν να καταγραφεί σε ένα κενό αρχείο.
Επιπλέον, θα αφαιρέσει \παλιά αρχεία καταγραφής και θα διατηρήσει τα πιο πρόσφατα. Φυσικά, μπορούμε να αποφασίσουμε τι σημαίνει \παλιό και πόσο συχνά Θέλουμε το logrotate να καθαρίσει τα κούτσουρα για εμάς.
Εγκατάσταση Logrotate σε Linux
Για να εγκαταστήσετε το logrotate, απλώς χρησιμοποιήστε τον διαχειριστή πακέτων:
---------- On Debian and Ubuntu ---------- # aptitude update && aptitude install logrotate ---------- On CentOS, RHEL and Fedora ---------- # yum update && yum install logrotate
Αξίζει και καλά να σημειωθεί ότι το αρχείο διαμόρφωσης (/etc/logrotate.conf
) μπορεί να υποδεικνύει ότι άλλες, πιο συγκεκριμένες ρυθμίσεις ενδέχεται να τοποθετηθούν σε μεμονωμένα αρχεία .conf
μέσα /etc/logrotate.d.
Αυτό θα ισχύει εάν και μόνο εάν η ακόλουθη γραμμή υπάρχει και δεν σχολιάζεται:
include /etc/logrotate.d
Θα παραμείνουμε σε αυτήν την προσέγγιση, καθώς θα μας βοηθήσει να κρατάμε τα πράγματα σε τάξη και θα χρησιμοποιήσουμε το πλαίσιο Debian για τα ακόλουθα παραδείγματα.
Διαμόρφωση Logrotate στο Linux
Όντας ένα πολύ ευέλικτο εργαλείο, το logrotate παρέχει πολλές οδηγίες που μας βοηθούν να διαμορφώσουμε πότε και πώς θα εναλλάσσονται τα αρχεία καταγραφής και τι θα συμβεί αμέσως μετά.
Ας εισαγάγουμε τα ακόλουθα περιεχόμενα στο /etc/logrotate.d/apache2.conf (σημειώστε ότι πιθανότατα θα πρέπει να δημιουργήσετε αυτό το αρχείο) και ας εξετάσουμε κάθε γραμμή για να υποδείξετε τον σκοπό της:
/var/log/apache2/* { weekly rotate 3 size 10M compress delaycompress }
Η πρώτη γραμμή υποδεικνύει ότι οι οδηγίες μέσα στο μπλοκ ισχύουν για όλα τα αρχεία καταγραφής στο /var/log/apache2:
- εβδομαδιαία σημαίνει ότι το εργαλείο θα επιχειρεί να εναλλάσσει τα αρχεία καταγραφής σε εβδομαδιαία βάση. Άλλες πιθανές τιμές είναι ημερήσιες και μηνιαίες. Το
- rotate 3 υποδηλώνει ότι πρέπει να διατηρηθούν μόνο 3 περιστρεφόμενα αρχεία καταγραφής. Έτσι, το παλαιότερο αρχείο θα αφαιρεθεί στην τέταρτη επόμενη εκτέλεση. Το
- size=10M ορίζει το ελάχιστο μέγεθος για να πραγματοποιηθεί η περιστροφή σε 10M. Με άλλα λόγια, κάθε αρχείο καταγραφής δεν θα περιστραφεί μέχρι να φτάσει τα 10 MB. Η
- συμπίεση και η καθυστέρηση συμπίεσης χρησιμοποιούνται για να πούμε ότι όλα τα περιστρεφόμενα αρχεία καταγραφής, με εξαίρεση το πιο πρόσφατο, πρέπει να συμπιεστούν.
Ας εκτελέσουμε μια ξηρή εκτέλεση για να δούμε τι θα έκανε το logrotate αν εκτελούνταν πραγματικά τώρα. Χρησιμοποιήστε την επιλογή -d
ακολουθούμενη από το αρχείο διαμόρφωσης (μπορείτε πραγματικά να εκτελέσετε το logrotate παραλείποντας αυτήν την επιλογή):
# logrotate -d /etc/logrotate.d/apache2.conf
Τα αποτελέσματα φαίνονται παρακάτω:
Αντί να συμπιέζουμε τα αρχεία καταγραφής, θα μπορούσαμε να τα μετονομάσουμε μετά την ημερομηνία κατά την περιστροφή τους. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε την οδηγία dateext
. Εάν η μορφή ημερομηνίας μας είναι διαφορετική από την προεπιλεγμένη εεεεεμμμμ, μπορούμε να την καθορίσουμε χρησιμοποιώντας τη μορφή ημερομηνίας.
Λάβετε υπόψη ότι μπορούμε ακόμη και να αποτρέψουμε την περιστροφή εάν το αρχείο καταγραφής είναι κενό με notifempty. Επιπλέον, ας πούμε στην logrotate να ταχυδρομήσει το περιστρεφόμενο αρχείο καταγραφής στον διαχειριστή του συστήματος (διακομιστής αλληλογραφίας που πρόκειται να ρυθμιστεί, ο οποίος δεν εμπίπτει στο πεδίο εφαρμογής αυτού του άρθρου).
Εάν θέλετε να λαμβάνετε μηνύματα ηλεκτρονικού ταχυδρομείου σχετικά με το logrotate, μπορείτε να ρυθμίσετε τον διακομιστή αλληλογραφίας Postfix όπως φαίνεται εδώ: Εγκαταστήστε τον διακομιστή αλληλογραφίας Postfix
Αυτή τη φορά θα χρησιμοποιήσουμε το /etc/logrotate.d/squid.conf για να περιστρέψουμε μόνο το /var/log/squid/access.log:
/var/log/squid/access.log { monthly create 0644 root root rotate 5 size=1M dateext dateformat -%d%m%Y notifempty mail }
Όπως μπορούμε να δούμε στην παρακάτω εικόνα, αυτό το αρχείο καταγραφής δεν χρειάστηκε να περιστραφεί. Ωστόσο, όταν πληρούται η συνθήκη μεγέθους (size=1M), το περιστρεφόμενο αρχείο καταγραφής θα μετονομαστεί σε access.log-25082020 (εάν το αρχείο καταγραφής εναλλάχθηκε τον Αύγουστο 25, 2020) και το κύριο αρχείο καταγραφής (access.log) θα δημιουργηθεί εκ νέου με δικαιώματα πρόσβασης που έχουν οριστεί σε 0644 και με rootισχυρός> ως ιδιοκτήτης και ιδιοκτήτης ομάδας.
Τέλος, όταν ο αριθμός των αρχείων καταγραφής φτάσει τελικά 6, το παλαιότερο αρχείο καταγραφής θα αποσταλεί στη διεύθυνση [email .
Τώρα ας υποθέσουμε ότι θέλετε να εκτελέσετε μια προσαρμοσμένη εντολή όταν πραγματοποιείται η περιστροφή. Για να το κάνετε αυτό, τοποθετήστε τη γραμμή με αυτήν την εντολή μεταξύ των οδηγιών μεταστροφικής και τελικής γραφής.
Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να στείλουμε ένα email στο root όταν κάποιο από τα αρχεία καταγραφής στο /var/log/myservice εναλλάσσεται. Ας προσθέσουμε τις γραμμές με κόκκινο χρώμα στο /etc/logrotate.d/squid.conf:
/var/log/myservice/* { monthly create 0644 root root rotate 5 size=1M postrotate echo "A rotation just took place." | mail root endscript }
Τελευταίο, αλλά εξίσου σημαντικό, είναι σημαντικό να σημειωθεί ότι οι επιλογές που υπάρχουν στο /etc/logrotate.d/*.conf
παρακάμπτουν εκείνες στο κύριο αρχείο διαμόρφωσης σε περίπτωση διενέξεων.
Logrotate και Cron
Από προεπιλογή, η εγκατάσταση του logrotate δημιουργεί ένα αρχείο crontab μέσα στο /etc/cron.daily με το όνομα logrotate. Όπως συμβαίνει με τα άλλα αρχεία crontab μέσα σε αυτόν τον κατάλογο, θα εκτελείται καθημερινά από τις 6:25 π.μ. εάν δεν είναι εγκατεστημένο το anacron.
Διαφορετικά, η εκτέλεση θα ξεκινήσει γύρω στις 7:35 π.μ.. Για επαλήθευση, παρακολουθήστε τη γραμμή που περιέχει cron.daily είτε στο /etc/crontab είτε στο /etc/anacrontab.
Περίληψη
Σε ένα σύστημα που δημιουργεί πολλά αρχεία καταγραφής, η διαχείριση τέτοιων αρχείων μπορεί να απλοποιηθεί σημαντικά χρησιμοποιώντας το logrotate. Όπως έχουμε εξηγήσει σε αυτό το άρθρο, θα περιστρέφεται αυτόματα, θα συμπιέζει, θα αφαιρεί και θα αποστέλλει αρχεία καταγραφής σε περιοδική βάση ή όταν το αρχείο φτάσει σε ένα δεδομένο μέγεθος.
Απλώς βεβαιωθείτε ότι έχει ρυθμιστεί να εκτελείται ως εργασία cron και το logrotate θα κάνει τα πράγματα πολύ πιο εύκολα για εσάς. Για περισσότερες λεπτομέρειες, ανατρέξτε στη σελίδα man.
Έχετε ερωτήσεις ή προτάσεις σχετικά με αυτό το άρθρο; Μη διστάσετε να μας ενημερώσετε χρησιμοποιώντας την παρακάτω φόρμα σχολίων.