Ελεγχος του χώρου στον δίσκο για τα αρχεία καταγραφής

Στο σημερινό άρθρο θα δούμε πως κάνουμε διαχείριση του χώρου που χρησιμοποιούν τα αρχεία καταγραφής του systemd/journald στον δίσκο. Σε επαγγελματικά συστήματα υπάρχει η συνήθεια να υπάρχει μια χωριστή κατάτμηση ώστε τα αρχεία καταγραφής να μην δεσμεύσουν όλο τον δίσκο κάνοντας το σύστημα αχρησιμοποίητο. Αυτό δεν είναι πάντα απαραίτητο. Μπορείς πάντα να τα κρατάς υπό έλεγχο, αν ξέρεις πως. Πρώτα ένα κοινωνικό μήνυμα:

Αν τα αρχεία καταγραφής γίνουν πολύ μεγάλα, τότε συνήθως κάτι το προκαλεί. Κάτι δεν έχει ρυθμιστεί σωστά. Και δεν υπάρχει λύση άλλη από τον εντοπισμό και την διόρθωση του προβλήματος που το προκαλεί. Σε τακτές περιόδους δεν βλάπτει κανένα να τους ρίχνουμε ένα βλεφαρίδι.

Για τα αρχεία καταγραφής

Αν δεν το έχεις κάνει ήδη διάβασε το παρακάτω πρώτα

Ο υπολογιστής μας είναι μεγάλος ρουφιάνος. Ρουφιανεύει όχι μόνο εσένα, αλλά και τον εαυτό του. Σχεδόν κάθε τι που κάνει το καταγράφει. Αυτό είναι καλό για μας, γιατί αν πάει κάτι στραβά μπορούμε να κοιτάξουμε αυτές τις καταγραφές και να βρούμε τι συνέβη και τι πήγε στραβά.

Εξηγεί τι είναι τα αρχεία καταγραφής και πως μπορούμε να τα δούμε. Επίσης εξηγεί την υπηρεσία συστήματος logrotate για την διαχείριση τους. Μια χρήσιμη υπηρεσία που μπορεί να χρησιμοποιηθεί και για άλλα πράγματα αν την ξέρεις και ανάψει η λάμπα στο κεφάλι :bulb:.

Το άρθρο αυτό όμως δεν μπαίνει στο καινούργιο τρόπο με το journald. Οπότε δες και το συμπληρωματικό κείμενο (καθώς και αυτό)

Το παρόν κείμενο έρχεται να καλύψει το κενό που υπάρχει. Πως κάνω διαχείριση του χώρου με το journald.

Ανάλυση χρήσης του χώρου στον δίσκο και καθαρισμό

Ας δούμε πρώτα την χρήση του δίσκου που κάνουν. Στον υπολογιστή μου (με χρήση του dutree)

Εναλλακτικά θα μπορούσα να χρησιμοποιήσω το παρακάτω αλλά ήθελα να δούμε την συνολική εικόνα σε σχέση με το syslog για σύγκριση.


🦪~  journalctl --disk-usage
Archived and active journals take up 4.0G in the file system.

Χρησιμοποιεί 4.0G στον δίσκο. Σας μοιάζουν πολλά; Ας κρατήσουμε μόνο τις καταχωρήσεις της τελευταίας εβδομάδας :


🦪~  sudo journalctl --rotate
🦪~  sudo journalctl --vacuum-time=1week
🦪~  journalctl --disk-usage
Archived and active journals take up 1.1G in the file system.

Η πρώτη εντολή είναι περιττή, αλλά είναι μια καλή πρακτική. Δημιουργεί ένα καινούργιο αρχείο journal.

Πάλι είναι αρκετά. Ο λόγος; Είχα ένα μικρό “θεματάκι” με κάτι που είχα μετακινήσει και βαρέθηκα να φτιάξω. Σταυρώστε με. Αλλά ας το μειώσουμε τον χώρο λίγο ακόμα


🦪~  sudo journalctl --vacuum-size=500M
🦪~  journalctl --disk-usage
Archived and active journals take up 568.0M in the file system.
🦪~  journalctl --verify

Η τελευταία εντολή κάνει έναν έλεγχο ακεραιότητας. Μπορεί να δούμε κάτι σαν το παρακάτω

0000a0: Invalid tail seqnum                                                                    
File corruption detected at /var/log/journal/639ef6044f3bfdbe912e964d616c311a/user-1001@f3e70819c2064fcb8dcb37b2ceba550a-0000000000059c55-0005d0b321194898.journal:7ffa958 (of 134217728 bytes, 99%).
FAIL: /var/log/journal/639ef6044f3bfdbe912e964d616c311a/user-1001@f3e70819c2064fcb8dcb37b2ceba550a-0000000000059c55-0005d0b321194898.journal (Bad message)
7fffe40: Unused data (entry_offset==0)   

Κάτι πήγε στραβά μια εφαρμογή δεν έδωσε σωστά τα στοιχεία, οπότε το σύστημα περνάει αμέσως σε νέο αρχείο καταγραφής για να περιοριστεί η ζημιά. Αν δεν υπάρχουν πολλά τέτοια μπορεί να αγνοηθεί.

Έλεγχος του χώρου στον δίσκο

Αν τα 4GB σας μοιάζουν πολλά (ή λίγα) μπορούμε να ρυθμίσουμε το journald να χρησιμοποιεί ακριβώς τον χώρο που θέλουμε. Το σχετικό αρχείο είναι το /etc/systemd/journald.conf ή καλύτερα σε κάποιο drop-in αρχείο.

Εκεί βάζουμε

SystemMaxUse=2G

και το journald δεν θα χρησιμοποιήσει περισσότερα από 2G χώρο στον δίσκο. Και σε αντίθεση με το logrotate, που βασίζετε σε ένα cron job δεν θα ξεπεραστεί ποτέ αυτό το όριο αν μια υπηρεσία προκαλέσει υπερχείλιση. Δεν υπάρχει έτσι ποτέ ανάγκη χωριστής κατάτμησης.

Αν δεν θέλουμε να δεσμεύει καθόλου χώρο στον δίσκο, αλλά να τα στέλνει απευθείας κάπου αλλού (όπως το syslog), κάτι που δεν προτείνω, δίνουμε

Storage=volatile

Αν θέλουμε να στέλνει τις καταχωρήσεις σε κάποιο κεντρικό υπολογιστή (όπως πχ ένα ELK Stack) θα χρησιμοποιήσουμε το systemd-journal-upload.service από το πακέτο systemd-journal-remote. Αλλά αυτό θέλει το δικό του άρθρο.

Μετά από κάθε αλλαγή θα πρέπει να ενημερώσουμε ότι το αρχείο άλλαξε


🦪~  sudo systemctl restart systemd-journald

Μπορούμε να κάνουμε πολλές άλλες ρυθμίσεις, αλλά θέλει πολύ χώρο να τις αναλύσουμε όλες.Για περισσότερες πληροφορίες εδώ journald.conf(5).

Σύγκριση journald vs syslog

Το journald είναι ένα πολύ καλό σύστημα καταγραφής. Κάποιος μπορεί να αντιτάξει ότι είναι μονολιθικό και τα κάνει όλα: καταγραφή, περιστροφή, αποθήκευση, μεταφορά, αναζήτηση. Βρίσκω καλύτερο όμως να έχω ένα κεντρικό σημείο χρήσης και ρύθμισης των παραπάνω. Επιπλέον έχει structured logging και ένα πολύ καλό API, καθώς και ευκολία αναζήτησης για να εντοπίσεις και να αναλύσεις κάποιο πρόβλημα. Επίσης παρέχει πολύ καλύτερη προστασία αν κάποιος παραβιάσει το σύστημα, όπου το πρώτο που θα κάνει είναι να σβήσει τα ίχνη του από τα αρχεία καταγραφής. Και αν κάποιος δεν το θέλει εύκολα μεταφέρει τις καταγραφές στο παλιό καλό syslog.

Εσάς ποια είναι η γνώμη σας;

4 «Μου αρέσει»