Η καταγραφή συστήματος και διεργασιών είναι δύο μόνο από τα πιο καθοριστικά πλεονεκτήματα του systemd. Όταν τα αρχεία καταγραφής είναι διάσπαρτα σε όλο το σύστημα, εκτείνονται σε πολλαπλές εφαρμογές και τυγχάνουν διαχείρισης από διαφορετικές διεργασίες και δαίμονες, μπορεί να είναι δύσκολο να ερμηνευθούν. Το systemd παρέχει μια κεντρικοποιημένη λύση για τη διαχείριση όλων των αρχείων καταγραφής του πυρήνα και των διεργασιών του χώρου χρηστών σε ένα μέσο συλλογής γνωστό ως journal. Μπορείτε να μάθετε περισσότερα για το systemd στο σεμινάριό μας σχετικά με τον τρόπο διαχείρισης των υπηρεσιών και μονάδων systemd με το systemctl. Όλα τα μηνύματα που παράγονται από υπηρεσίες, initrd, πυρήνες κ.λπ. σε ένα journal τυγχάνουν διαχείρισης από τον δαίμονα journal. Ο σκοπός αυτού του οδηγού είναι να δείξει πώς να αποκτήσετε πρόσβαση και να χειριστείτε τα δεδομένα του journal χρησιμοποιώντας το journalctl.
Βασική Αρχή
Ανεξάρτητα από το πού μπορεί να προέρχεται ένα μήνυμα, ένας από τους πρωταρχικούς στόχους του systemd είναι να επιτρέπει την κεντρικοποιημένη διαχείρισή τους. Καθώς πολλές από τις διαδικασίες εκκίνησης και μεγάλο μέρος της διαχείρισης υπηρεσιών αναλαμβάνονται από τη διεργασία systemd, ο τρόπος με τον οποίο συλλέγονται και προσπελαύνονται τα αρχεία καταγραφής θα πρέπει να είναι τυποποιημένος. Συλλέγοντας δεδομένα από οποιεσδήποτε διαθέσιμες πηγές σε ένα ενιαίο εργαλείο που περιλαμβάνει τα πάντα, το journald τα αποθηκεύει σε δυαδική μορφή. Αυτό επιτρέπει στα δεδομένα να είναι άμεσα διαθέσιμα για δυναμικό και απλό χειρισμό.
Αυτή η προσέγγιση έχει αρκετά βασικά πλεονεκτήματα. Έχοντας ένα κεντρικό σημείο για τη συλλογή όλων των δεδομένων, οι διαχειριστές μπορούν να φιλτράρουν και να εμφανίζουν μόνο τα δεδομένα που χρειάζονται. Για παράδειγμα, μπορεί κανείς να δει δεδομένα εκκίνησης από τρεις εκκινήσεις συστήματος πριν. Θα μπορούσε επίσης να σημαίνει τη διαδοχική καταγραφή καταχωρίσεων από σχετικές υπηρεσίες και τον αποτελεσματικότερο εντοπισμό ενός προβλήματος επικοινωνίας μεταξύ τους.
Χάρη στη δυαδική αποθήκευση, τα δεδομένα μπορούν να εμφανιστούν σε ποικιλία μορφών εξόδου ανάλογα με τις ανάγκες του χρήστη τη δεδομένη στιγμή. Για παράδειγμα, ένα καθημερινό αρχείο καταγραφής μπορεί να προβληθεί σε μια τυπική μορφή syslog. Αλλά αν χρειάζεται να αποτυπώσετε την τάση των διακοπών υπηρεσιών με τη μορφή γραφήματος, η καταχώριση μπορεί να εξαχθεί ως JSON αντικείμενο, καθιστώντας το συμβατό με μια υπηρεσία δημιουργίας γραφημάτων. Όταν χρειάζεται να αλλάξετε μορφή ανάλογα με τις απαιτήσεις της περίστασης, δεν απαιτείται μετατροπή, καθώς τα δεδομένα είναι δυαδικά και δεν εγγράφονται στον δίσκο σε απλό κείμενο.
Ανάλογα με τις ανάγκες σας, μπορείτε να εφαρμόσετε το systemd journal με ένα υπάρχον syslog ή μπορεί να αντικαταστήσει τη λειτουργικότητά του. Το systemd μπορεί ακόμη και να συμπληρώσει τους υπάρχοντες μηχανισμούς καταγραφής. Για παράδειγμα, πολλαπλές υπηρεσίες σε ένα μόνο σύστημα μπορούν να έχουν τα συγκεντρωμένα δεδομένα τους συνυφασμένα σε ένα μόνο σύστημα με το systemd journal.
Ρύθμιση της ώρας συστήματος
Το systemd, από προεπιλογή, θα εμφανίζει τα αποτελέσματα σε τοπική ώρα, ένα πλεονέκτημα της δυαδικής καταγραφής journal στον τρόπο προβολής των εγγραφών καταγραφής. Εναλλακτικά, μπορούν να προβληθούν σε UTC. Επομένως, είναι σημαντικό να βεβαιωθείτε ότι η ζώνη ώρας έχει ρυθμιστεί σωστά πριν ξεκινήσετε με την καταγραφή journal. Για να γίνει αυτό, το systemd είναι εξοπλισμένο με ένα εργαλείο που ονομάζεται timedatectl. Ξεκινάμε βλέποντας ποιες ζώνες ώρας είναι διαθέσιμες προς χρήση, εμφανίζοντας μια λίστα με τις επιλογές list-timezones:
|
1 |
timedatectl list-timezones |
Αφού βρείτε τη ζώνη ώρας που αντιστοιχεί στην τοποθεσία του διακομιστή σας, η ζώνη ώρας μπορεί να οριστεί χρησιμοποιώντας την επιλογή set-timezone:
|
1 |
sudo timedatectl set-timezone zone |
Για να δοκιμάσετε και να επαληθεύσετε ότι η ζώνη ώρας εμφανίζεται πλέον σωστά, μπορείτε να χρησιμοποιήσετε την εντολή timedatectl είτε μόνη της είτε προσθέτοντας το «status:»

Η πρώτη γραμμή απεικονίζει την τοπική ώρα. Αυτή η γραμμή θα πρέπει να περιέχει τη σωστή ώρα για την τοπική σας περιοχή.
Γενική προβολή αρχείων καταγραφής
Η εντολή journalctl θα σας επιτρέψει να δείτε τα αρχεία καταγραφής που έχει συλλέξει ο δαίμονας journald. Όταν χρησιμοποιείτε το journalctl, κάθε καταχώριση journal από το σύστημα θα εμφανίζεται στη σελίδα της οθόνης, με τις παλαιότερες καταχωρίσεις να παρατίθενται προς τα πάνω. Ωστόσο, η πλήρης λίστα δεδομένων θα έχει μήκος δεκάδων χιλιάδων γραμμών.
|
1 |
journalctl |

Όσοι έχουν χρησιμοποιήσει την τυπική καταγραφή syslog θα βρουν τη μορφή οικεία, αλλά είναι σημαντικό να έχετε κατά νου ότι αυτή η συλλογή δεδομένων περιλαμβάνει στοιχεία από πολλές πηγές, σε αντίθεση με τη μέθοδο syslog. Τα αρχεία καταγραφής θα περιλαμβάνουν την πρώιμη διαδικασία εκκίνησης, το initrd και τον πυρήνα, καθώς και τα τυπικά σφάλματα των εφαρμογών.
Τώρα που έχει ρυθμιστεί η τοπική ώρα, όλες οι καταχωρίσεις θα ξεκινούν με χρονικές σημάνσεις σε τοπική ώρα, και αυτό είναι διαθέσιμο για κάθε αρχείο καταγραφής που είναι αποθηκευμένο αυτήν τη στιγμή στο σύστημα, με όλη τη λογική να εμφανίζεται χρησιμοποιώντας αυτές τις νέες πληροφορίες. Ωστόσο, δεν περιορίζεστε στην τοπική ώρα. Χρησιμοποιώντας τη σημαία –utc, μπορείτε να εμφανίσετε τις χρονικές σημάνσεις και σε UTC επίσης:
|
1 |
journalctl --utc |
Φιλτράρισμα του Journal ανά Ώρα
Το να έχετε τόσα πολλά δεδομένα διαθέσιμα είναι φανταστικό, αλλά το να τα ψάχνετε και να είστε σε θέση να τα αφομοιώσετε, για να μην αναφέρουμε την πνευματική τους επεξεργασία, μπορεί να είναι μια αποθαρρυντική εργασία. Έχοντας αυτό κατά νου, φτάνουμε στο πιο σημαντικό μέρος της λειτουργίας journalctl: το φιλτράρισμα.
Εμφάνιση αρχείων καταγραφής από την τρέχουσα εκκίνηση
Αν αναζητάτε τα δεδομένα στο journal από την τελευταία επανεκκίνηση, θα μπορούσατε να χρησιμοποιήσετε τη λειτουργία journalctl με τη σημαία -b. Αυτό θα εμφανίσει όλες τις σχετικές πληροφορίες καταγραφής από την πιο πρόσφατη επανεκκίνηση του συστήματός σας. Αυτή η εντολή θα σας επιτρέψει να βρείτε και να διαχειριστείτε τις πληροφορίες που είναι πιο σχετικές με το τρέχον περιβάλλον εργασίας:
|
1 |
journalctl -b |
Αν ο αναγνώστης επιλέξει να μην αξιολογήσει κάθε μεμονωμένη καταχώριση, το journactl θα εμφανίσει περισσότερες από μία ημέρες εκκινήσεων που θα παρουσιάζονται στο journalctl με βολικά διαχωριστικά «Reboot». Αυτό βοηθά στον λογικό διαχωρισμό των πληροφοριών από διαφορετικές περιόδους λειτουργίας εκκίνησης για έλεγχο:
|
1 2 3 |
. . . -- Reboot -- . . . |
Πληροφορίες παλαιότερων εκκινήσεων
Αν και η εμφάνιση των πληροφοριών της τρέχουσας εκκίνησης τείνει να είναι η πιο χρήσιμη, υπάρχουν περιπτώσεις όπου οι πληροφορίες παλαιότερων εκκινήσεων θα φανούν χρήσιμες. Το Journal αποθηκεύει πληροφορίες για πολλαπλές προηγούμενες εκκινήσεις, επομένως το journalctl μπορεί εύκολα να εμφανίσει τις πληροφορίες για οποιαδήποτε χρονική περίοδο.
Ορισμένες διανομές απενεργοποιούν την αποθήκευση πληροφοριών προηγούμενων εκκινήσεων, ενώ άλλες την έχουν ενεργοποιημένη από προεπιλογή. Η ενεργοποίηση των μόνιμων πληροφοριών εκκίνησης μπορεί να επιτευχθεί δημιουργώντας έναν κατάλογο για την αποθήκευση του journal, πληκτρολογώντας τα εξής:
|
1 |
sudo mkdir -p /var/log/journal |
Εναλλακτικά, μπορείτε να επεξεργαστείτε το αρχείο ρυθμίσεων του journal με τον ακόλουθο τρόπο:
|
1 |
sudo nano /etc/systemd/journald.conf |
Η ρύθμιση της επιλογής Storage= σε “persistent” στην ενότητα [Journal] θα ενεργοποιήσει τη μόνιμη καταγραφή:

Μόλις ενεργοποιηθεί αυτό, το journalctl καθιστά διαθέσιμες ορισμένες εντολές που σας βοηθούν να ορίσετε αυτές τις εκκινήσεις ως μονάδες διαχωρισμού. Για να δείτε τις εκκινήσεις που έχουν καταγραφεί στο journald, μπορείτε να χρησιμοποιήσετε την επιλογή –list-boots μέσω του journalctl:
|
1 |
journalctl --list-boots |
![]()
Όπως φαίνεται, κάθε εκκίνηση θα παρατίθεται στη δική της γραμμή, με την πρώτη στήλη να αντικατοπτρίζει τις προηγούμενες εκκινήσεις με σειρά από την παλαιότερη προς την πιο πρόσφατη. Εάν απαιτείται μια πιο απόλυτη αναφορά, η δεύτερη στήλη περιέχει το αναγνωριστικό εκκίνησης. Μετά από αυτό, αναφέρονται δύο προδιαγραφές ώρας. Οι πληροφορίες είτε από την πρώτη είτε από τη δεύτερη στήλη μπορούν να χρησιμοποιηθούν για την εμφάνιση των πληροφοριών του journal από τη συγκεκριμένη εκκίνηση. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη σημαία -b με τον σχετικό δείκτη εκκίνησης -1 για να δείτε πληροφορίες για την προτελευταία επανεκκίνηση:
|
1 |
journalctl -b -1 |
Παρομοίως, το boot id από τη δεύτερη στήλη μπορεί επίσης να χρησιμοποιηθεί με αυτόν τον τρόπο:
|
1 |
journalctl -b 54342de612174d269b66f1d5eb098abb |
Χρονικά Παράθυρα
Η προβολή των εκκινήσεων (boots) ανά αναγνωριστικό (id) είναι μια επιλογή, αλλά συχνά είναι πιο χρήσιμο να μπορείτε να αναφέρεστε σε προηγούμενες εκκινήσεις βάσει ενός χρονικού παραθύρου στο παρελθόν που μπορεί να μην ευθυγραμμίζεται απαραίτητα με συγκεκριμένες εκκινήσεις. Για παράδειγμα, αυτό είναι σημαντικό σε μια κατάσταση όπου εργάζεστε με διακομιστές που λειτουργούν για μεγάλο χρονικό διάστημα και δεν επανεκκινούνται συχνά. Το φιλτράρισμα των χρονικών ορίων μπορεί να γίνει με αυθαίρετα χρονικά όρια. Αυτό θα εμφανίσει μόνο πληροφορίες σχετικά με τις επανεκκινήσεις που εμπίπτουν σε ένα συγκεκριμένο χρονικό παράθυρο. Οι παράμετροι αυτού του παραθύρου ορίζονται με τις επιλογές –since και –until. Υπάρχουν διάφορες διαθέσιμες μορφές για τις χρονικές επιλογές. Η μορφή απόλυτης τιμής χρόνου είναι η εξής:
|
1 |
YYYY-MM-DD HH:MM:SS |
Έτσι, αν θέλετε να δείτε όλες τις εκκινήσεις από τις 10 Ιανουαρίου 2015 στις 5:15 μ.μ., πληκτρολογήστε την ακόλουθη εντολή:
|
1 |
journalctl --since "2015-01-10 17:15:00" |
Εάν κάποιο από τα στοιχεία παραλειφθεί, υπάρχουν ενσωματωμένες προεπιλογές. Επιπλέον, εάν παραλειφθεί μια ημερομηνία, προεπιλέγεται η τρέχουσα ημερομηνία. Εάν το στοιχείο της ώρας απουσιάζει, τότε η προεπιλογή είναι τα μεσάνυχτα (00:00:00). Εάν παραλείψετε τα δευτερόλεπτα από το στοιχείο της ώρας, θα προεπιλεγεί το αρχικό σημείο αυτού του λεπτού (00):
|
1 |
journalctl --since "2015-01-10" --until "2015-01-11 03:00" |
Το journal μπορεί να κατανοήσει συντομεύσεις που σχετίζονται με το χρόνο, όπως «today», «tomorrow», «yesterday» και «now». Λέξεις όπως το ago, σε συνδυασμό με τα προθέματα «-» και «+», μπορούν να χρησιμοποιηθούν για τη δημιουργία μιας εντολής τύπου πρότασης:
|
1 |
journalctl --since yesterday |
Εάν ειδοποιηθήκατε για διακοπή υπηρεσίας που ξεκίνησε στις 9:00 και θέλετε να ελέγξετε τα αρχεία καταγραφής του journal μέχρι και πριν από μία ώρα, μπορείτε να το κάνετε με το εξής:
|
1 |
journalctl --since 09:00 --until "1 hour ago" |
Όπως είναι προφανές, ο καθορισμός ενός ευέλικτου χρονικού παραθύρου για την προβολή των επιθυμητών εγγραφών είναι πολύ απλός.
Φιλτράρισμα βάσει ενδιαφέροντος μηνύματος
Εκτός από το φιλτράρισμα του journal με βάση χρονικούς περιορισμούς, τα δεδομένα μπορούν επίσης να φιλτραριστούν με βάση το στοιχείο υπηρεσίας που σας ενδιαφέρει. Το systemd παρέχει διάφορες μεθόδους για να γίνει αυτό.
Ανά μονάδα (Unit)
Ίσως η πιο χρήσιμη παράμετρος φιλτραρίσματος είναι ανά μονάδα ενδιαφέροντος. Για να φιλτράρετε ανά μονάδα, μπορείτε να χρησιμοποιήσετε την επιλογή -u. Για παράδειγμα, εάν θέλετε να δείτε όλα τα αρχεία καταγραφής που αφορούν τη μονάδα Nginx, πληκτρολογήστε την ακόλουθη εντολή:
|
1 |
journalctl -u nginx.service |
Ρεαλιστικά, θα θέλατε να το συνδυάσετε αυτό με ένα φίλτρο χρόνου, προκειμένου να εμφανίσετε τις γραμμές που σας ενδιαφέρουν. Εάν θέλετε να ελέγξετε την παραπάνω υπηρεσία και πώς έχει αποδώσει σήμερα, μπορείτε να κάνετε το εξής:
|
1 |
journalctl -u nginx.service --since today |
Αυτό είναι ιδιαίτερα χρήσιμο όταν χρησιμοποιείτε τη δυνατότητα του journal να συγκεντρώνει εγγραφές από πολλαπλές μονάδες, ειδικά από συνεργαζόμενες. Εάν η διεργασία Nginx είναι συνδεδεμένη με μια μονάδα PHP-FPN για επεξεργασία δυναμικού περιεχομένου, οι εγγραφές μπορούν να συγχωνευθούν με χρονολογική σειρά καθορίζοντας και τις δύο μονάδες:
|
1 |
journalctl -u nginx.service -u php-fpm.service --since today |
Αυτό μπορεί να βοηθήσει σημαντικά στην παρατήρηση της αλληλεπίδρασης των προγραμμάτων και να διευκολύνει τον εντοπισμό σφαλμάτων σε συστήματα αντί για μεμονωμένες διεργασίες.
Ανά αναγνωριστικό ομάδας (Group ID), διεργασία ή χρήστη
Πολλές υπηρεσίες ξεκινούν ένα πλήθος υποδιεργασιών (θυγατρικών διεργασιών) για την εκτέλεση συγκεκριμένων εργασιών. Εάν το ID μιας συγκεκριμένης διεργασίας είναι διαθέσιμο, μπορεί επίσης να φιλτραριστεί καθορίζοντας το πεδίο _PID. Εάν το PID που σας ενδιαφέρει είναι το 8088, μπορεί να γίνει το εξής:
|
1 |
journalctl _PID=8088 |
Μπορεί επίσης να θέλετε να δείτε εγγραφές που έχουν καταγραφεί από μια συγκεκριμένη ομάδα ή έναν συγκεκριμένο χρήστη. Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας τα φίλτρα _GID και _UID. Εάν ένας διακομιστής ιστού εκτελείται με τον χρήστη www-data, το ακόλουθο μπορεί να βρει το απαραίτητο ID:
|
1 |
id -u www-data |

Χρησιμοποιώντας αυτό το ID, μπορείτε στη συνέχεια να δείτε τα αντίστοιχα αποτελέσματα του journal:
|
1 |
journalctl _UID=33 --since today |
Το Systemd καθιστά πολλά πεδία διαθέσιμα για σκοπούς φιλτραρίσματος. Ορισμένα πεδία εφαρμόζονται από το journald με βάση πληροφορίες που συλλέγονται από το σύστημα κατά τη στιγμή της καταγραφής, ενώ άλλα μεταβιβάζονται από τη διεργασία που καταγράφεται εκείνη τη στιγμή.
Ένας προ-προσδιοριστής _PID υποδεικνύει ότι οι πληροφορίες έχουν συλλεχθεί από το σύστημα κατά τη στιγμή της καταγραφής. Το journal καταγράφει και ευρετηριάζει το PID αυτόματα κατά τη διαδικασία καταγραφής για να καταστήσει τη δυνατότητα φιλτραρίσματος διαθέσιμη αργότερα. Για να μάθετε σχετικά με τα διαθέσιμα πεδία του journal, μπορείτε να πληκτρολογήσετε:
|
1 |
man systemd.journal-fields |
Θα συζητήσουμε μερικά από αυτά αργότερα σε αυτόν τον οδηγό, αλλά προς το παρόν, θα αναφερθούμε σε κάποιες άλλες χρήσιμες επιλογές που αφορούν αυτά τα πεδία. Εάν θέλετε να δείτε όλες τις διαθέσιμες τιμές για ένα συγκεκριμένο πεδίο του journal, μπορείτε να χρησιμοποιήσετε την επιλογή -F. Εάν επιθυμείτε να δείτε τι διαθέτει το systemd journal για τα group IDs, μπορεί να γίνει το εξής:
|
1 |
journalctl -F _GID |

Αυτό μπορεί να βοηθήσει στη δημιουργία φίλτρων παρέχοντας μια πλήρη λίστα τιμών που έχει αποθηκεύσει το πεδίο group ID του journal.
Ανά διαδρομή στοιχείου
Το φιλτράρισμα μπορεί επίσης να πραγματοποιηθεί παρέχοντας μια τοποθεσία διαδρομής. Εάν η διαδρομή αφορά ένα εκτελέσιμο αρχείο, θα εμφανιστούν εγγραφές στο journalctl εάν σχετίζονται με αυτό το εκτελέσιμο. Εάν το εκτελέσιμο που σας ενδιαφέρει είναι το ‘bash’, μπορείτε να πληκτρολογήσετε:
|
1 |
journalctl /bin/bash |
Αν και μερικές φορές αυτό δεν είναι εφικτό, εάν η μονάδα (unit) του εκτελέσιμου είναι διαθέσιμη, μπορεί να δημιουργήσει μια σαφέστερη και πιο ενημερωτική μέθοδο φιλτραρίσματος.
Εμφάνιση μηνυμάτων πυρήνα
Τα μηνύματα του πυρήνα, που συνήθως βρίσκονται στην έξοδο του dmesg, μπορούν επίσης να ανακτηθούν από το journal. Για να εμφανίζονται μόνο αυτά τα μηνύματα, χρησιμοποιούμε είτε τη σημαία -k είτε τη σημαία -dmesg ως μέρος της εντολής μας:
|
1 |
journalctl -k |
Τα μηνύματα από την τρέχουσα εκκίνηση θα εμφανίζονται από προεπιλογή, αλλά προηγούμενες εκκινήσεις μπορούν να καθοριστούν με τη χρήση της προαναφερθείσας σημαίας επιλογής. Εάν αναζητάτε μηνύματα από πέντε εκκινήσεις πριν, πληκτρολογώντας αυτό θα έχετε τα απαραίτητα αποτελέσματα:
|
1 |
journalctl -k -b 5 |
Ανά προτεραιότητα
Οι διαχειριστές συστημάτων συχνά προτιμούν το φιλτράρισμα ανά προτεραιότητα. Τα αρχεία καταγραφής χαμηλής προτεραιότητας, αν και συχνά χρήσιμα για προβολή, μπορεί να προκαλέσουν σύγχυση και να περιέχουν πολλούς περισπασμούς, καθιστώντας τα λιγότερο κατανοητά κατά την ανάλυση. Η χρήση της επιλογής -p στο journalctl θα εμφανίσει μόνο μηνύματα μιας συγκεκριμένης προτεραιότητας, φιλτράροντας οποιεσδήποτε άλλες προτεραιότητες. Εάν επιθυμείτε να εμφανίσετε εγγραφές από το επίπεδο σφάλματος (error) και πάνω, εισαγάγετε τα ακόλουθα:
|
1 |
journalctl -p err -b |
Αυτή η εντολή θα επιστρέψει όλα τα μηνύματα που χαρακτηρίζονται ως errors, alert, emergency ή critical, με το journal να χρησιμοποιεί τα τυπικά επίπεδα μηνυμάτων syslog. Τα επίπεδα προτεραιότητας ορίζονται σύμφωνα με μια αριθμητική τιμή, ταξινομημένα από την υψηλότερη προς τη χαμηλότερη:
- 0: emerg
- 1: alert
- 2: crit
- 3: err
- 4: warning
- 5: notice
- 6: info
- 7: debug
Οποιοδήποτε από τα παραπάνω μπορεί να χρησιμοποιηθεί εναλλακτικά με την επιλογή -p. Η επιλογή οποιασδήποτε από τις προτεραιότητες όπως περιγράφεται παραπάνω θα φιλτράρει όλες τις προτεραιότητες σε αυτό το επίπεδο και πάνω.
Τροποποίηση της εμφάνισης στο Journal
Εκτός από τη χρήση φιλτραρίσματος για την επιλογή εγγραφών, έχουμε και άλλες μεθόδους τροποποίησης της εξόδου, προσαρμόζοντας την εμφάνιση του journalctl ώστε να ταιριάζει στις ανάγκες μας.
Περικοπή/Επέκταση εξόδου
Μπορούμε να προσαρμόσουμε την προβολή της εξόδου μας ρυθμίζοντας εάν το journalctl συρρικνώνει ή επεκτείνει τα δεδομένα. Η προεπιλογή του journalctl είναι να εμφανίζει ολόκληρη την εγγραφή, αφήνοντας τις μεγαλύτερες εγγραφές να εκτείνονται προς τα δεξιά της οθόνης. Μπορείτε να δείτε τις εγγραφές στο σύνολό τους κάνοντας κύλιση με το δεξί βέλος. Ένας χρήστης μπορεί να επιθυμεί να περικόψει την έξοδο, με ένα αποσιωπητικό να υποδηλώνεται στις γραμμές που διαφορετικά θα έβγαιναν εκτός οθόνης. Για αυτό, μπορεί να χρησιμοποιηθεί η επιλογή –no-full:
|
1 |
journalctl --no-full |

Alternatively, you can also permit the display to allow for everything regardless of length or inclusion of unprintable characters by using the -a flag:
|
1 |
journalctl -a |
Έξοδος στην τυπική έξοδο
Το journalctl εμφανίζει την έξοδο σε έναν σελιδοποιητή (pager) από προεπιλογή, αλλά αν θέλετε να επεξεργαστείτε τα δεδομένα με εργαλεία επεξεργασίας κειμένου, πιθανότατα χρειάζεστε η έξοδος να δημιουργηθεί σε μια επιλογή τυπικής εξόδου (standard output). Μπορείτε να το επιτύχετε αυτό με την επιλογή –no-pager:
|
1 |
journalctl --no-pager |
Ανάλογα με τις ανάγκες του χρήστη, αυτό μπορεί να ανακατευθυνθεί σε ένα αρχείο στον δίσκο ή σε ένα βοηθητικό πρόγραμμα επεξεργασίας.
Μορφές Εξόδου
Τα δεδομένα είναι πάντα πιο εύκολο να αναλυθούν όταν παρουσιάζονται σε μια πιο εύχρηστη μορφή. Το journal παρέχει πολλαπλές επιλογές για εμφάνιση χρησιμοποιώντας τον προσδιοριστή -o ακολουθούμενο από μια συγκεκριμένη μορφή.
Εάν επιθυμείτε να εξάγετε τις καταχωρήσεις του journal σε μορφή JSON, μπορείτε να το κάνετε με τον ακόλουθο τρόπο:
|
1 |
journalctl -b -u nginx -o json |
![]()
Αυτή η στρατηγική είναι ιδιαίτερα χρήσιμη για βοηθητικά προγράμματα ανάλυσης (parsing). Η μορφή json-pretty μπορεί να είναι καλύτερη για την εμφάνιση των δομών δεδομένων προτού τις μεταβιβάσετε στον καταναλωτή JSON:
|
1 |
journalctl -b -u nginx -o json-pretty |

Υπάρχουν διάφορες μορφές που μπορείτε να χρησιμοποιήσετε για την εμφάνιση:
- cat: Εμφανίζει μόνο το ίδιο το πεδίο του μηνύματος.
- export: Μια δυαδική μορφή κατάλληλη για μεταφορά ή δημιουργία αντιγράφων ασφαλείας.
- json: Τυπικό JSON με μία καταχώρηση ανά γραμμή.
- json-pretty: Μορφοποιημένο JSON για καλύτερη αναγνωσιμότητα από τον άνθρωπο
- json-sse: Έξοδος σε μορφή JSON τυλιγμένη ώστε να είναι συμβατή με συμβάντα που αποστέλλονται από τον διακομιστή (server-sent events)
- short: Η προεπιλεγμένη έξοδος σε στυλ syslog
- short-iso: Η προεπιλεγμένη μορφή επαυξημένη για να εμφανίζει χρονικές σημάνσεις ρολογιού ISO 8601.
- short-monotonic: Η προεπιλεγμένη μορφή με μονοτονικές χρονικές σημάνσεις.
- short-precise: Η προεπιλεγμένη μορφή με ακρίβεια μικροδευτερολέπτου
- verbose: Εμφανίζει κάθε διαθέσιμο πεδίο του journal για την καταχώρηση, συμπεριλαμβανομένων εκείνων που συνήθως είναι κρυμμένα εσωτερικά.
Οι παραπάνω επιλογές επιτρέπουν στο journal να εμφανίζεται στη μορφή της προτίμησής σας.
Ενεργή Παρακολούθηση Διεργασιών
Το journal επιτρέπει την πρόσβαση σε λειτουργίες παρακολούθησης ενεργής ή πρόσφατης δραστηριότητας χωρίς να χρειάζεται να εμπλακεί άλλο εργαλείο. Μπορείτε να το κάνετε αυτό με την εντολή journalctl με μια λειτουργία «tail».
-
Εμφάνιση Πρόσφατων Καταγραφών
Η εμφάνιση της επιλογής -n (η οποία λειτουργεί ακριβώς όπως η εντολή tail -n), θα επιτρέψει την εμφάνιση ενός συγκεκριμένου αριθμού εγγραφών:
|
1 |
journalctl -n |
Ο αριθμός των καταχωρήσεων που θα θέλατε να εμφανίζονται μπορεί να καθοριστεί με έναν συγκεκριμένο αριθμό μετά τον προσδιοριστή -n:
|
1 |
journalctl -n 20 |
-
Παρακολούθηση των Καταγραφών
Μπορείτε επίσης να παρακολουθείτε τις καταγραφές ενεργά καθώς γράφονται στο σύστημα με τη σημαία -f. Αυτό λειτουργεί επίσης με τον ίδιο τρόπο όπως η εντολή tail -f:
|
1 |
journalctl -f |
Συντήρηση του Journal
Οι καταγραφές καταλαμβάνουν χώρο. Αξίζει να το εξετάσετε αυτό, ενδεχομένως για την εκκαθάριση ορισμένων από τις παλαιότερες καταγραφές για την απελευθέρωση χώρου.
Εύρεση Τρέχουσας Χρήσης Δίσκου
Η σημαία –disk-usage μπορεί να βοηθήσει στον προσδιορισμό του χώρου που καταλαμβάνει αυτή τη στιγμή η καταγραφή στον δίσκο:
|
1 |
journalctl --disk-usage |

Διαγραφή Παλιών Καταγραφών
Με την έκδοση 218 του systemd (και τις μεταγενέστερες εκδόσεις) μπορείτε να συρρικνώσετε το journal με δύο διαφορετικούς τρόπους. Ο ένας είναι η επιλογή –vacuum-size. Αυτή μπορεί να συρρικνώσει το journal υποδεικνύοντας το μέγεθός του. Με άλλα λόγια, οι παλαιότερες καταχωρήσεις θα διαγραφούν από την καταγραφή μέχρι ο κατειλημμένος χώρος να φτάσει στην απαιτούμενη παράμετρο:
|
1 |
sudo journalctl --vacuum-size=1G |
Η επιλογή –vacuum-time μπορεί να συρρικνώσει τον κατειλημμένο χώρο του journal υποδεικνύοντας έναν χρόνο αποκοπής, πέρα από τον οποίο οποιεσδήποτε καταχωρήσεις θα διαγραφούν, ενώ εκείνες που δημιουργήθηκαν μετά τον καθορισμένο χρόνο θα διατηρηθούν. Εάν επιθυμείτε να κρατήσετε καταχωρήσεις μόνο από το τελευταίο ημερολογιακό έτος, μπορείτε να χρησιμοποιήσετε:
|
1 |
sudo journalctl --vacuum-time=1years |
Περιορισμός Επέκτασης του Journal
Μπορείτε επίσης να περιορίσετε τον χώρο που θα καταλαμβάνει το journal. Αυτό επιτυγχάνεται με την επεξεργασία του αρχείου /etc/systemd.journald.conf. Η ανάπτυξη του journal μπορεί να περιοριστεί χρησιμοποιώντας οποιαδήποτε από τις ακόλουθες μεθόδους:
- SystemMaxUse=: Δηλώνει τον μέγιστο χώρο στον δίσκο που επιτρέπεται να χρησιμοποιεί το journal σε μόνιμο χώρο αποθήκευσης.
- SystemKeepFree=: Δηλώνει πόσος χώρος πρέπει να παραμένει ελεύθερος όταν προστίθενται οι οντότητες του journal σε μόνιμο χώρο αποθήκευσης.
- SystemMaxFileSize=: Καθορίζει πόσο επιτρέπεται να αυξηθούν τα αρχεία καταγραφής (journal) πριν από την εναλλαγή (rotation) σε μόνιμο χώρο αποθήκευσης.
- RuntimeMaxUse=: Καθορίζει πόσος χώρος στο δίσκο επιτρέπεται να χρησιμοποιηθεί σε πτητική μνήμη αποθήκευσης (μέσα στο σύστημα αρχείων /run).
- RuntimeKeepFree=: Κατά την εγγραφή δεδομένων σε πτητική μνήμη αποθήκευσης, αυτή η λειτουργία υποδηλώνει την ποσότητα του χώρου που πρέπει να διατεθεί για άλλες χρήσεις (μέσα στο σύστημα αρχείων /run).
- RuntimeMaxFileSize=: Υποδηλώνει πόσο χώρο μπορεί να καταλάβει ένα μεμονωμένο αρχείο καταγραφής (log journal) σε πτητική μνήμη αποθήκευσης (μέσα στο σύστημα αρχείων /run) προτού χρειαστεί να γίνει αναλογική κατανομή.
Αυτές οι επιλογές μπορούν όλες να βοηθήσουν στον έλεγχο της κατανάλωσης χώρου αποθήκευσης από το journal. Ένα σημαντικό γεγονός που πρέπει να σημειωθεί είναι ότι οι επιλογές SystemMaxFileSize και RuntimeMaxFileSize θα στοχεύουν αρχειοθετημένα αρχεία για να φτάσουν τα καθορισμένα όρια. Αυτό είναι ένα σημαντικό στοιχείο που πρέπει να έχετε κατά νου κατά την ερμηνεία του αριθμού των αρχείων μετά από λειτουργίες εκκαθάρισης (post-vacuuming).
Συμπέρασμα
Είναι προφανές ότι το systemd journal είναι ένα απίστευτα χρήσιμο εργαλείο προς αξιοποίηση, με την πλειονότητα των οφελών του να πηγάζει από την κεντροποιημένη φύση των logs’ και τον εκτεταμένο όγκο των καταγεγραμμένων μεταδεδομένων. Τα εκτεταμένα χαρακτηριστικά του journal μπορούν να αξιοποιηθούν μέσω της χρήσης της εντολής journalctl, προωθώντας μια ευκολότερη μέθοδο για την εκτέλεση σχεσιακού εντοπισμού σφαλμάτων (relational debugging) των στοιχείων της εφαρμογής, καθώς και για εκτεταμένη ανάλυση του συστήματος.
Καλή συνέχεια με τους υπολογιστές!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.