Πώς να ρυθμίσετε και να διαχειριστείτε την περιστροφή αρχείων καταγραφής χρησιμοποιώντας το 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.

Έχετε ερωτήσεις ή προτάσεις σχετικά με αυτό το άρθρο; Μη διστάσετε να μας ενημερώσετε χρησιμοποιώντας την παρακάτω φόρμα σχολίων.


Ολα τα δικαιώματα διατηρούνται. © Linux-Console.net • 2019-2024