- Το Journalctl συγκεντρώνει και φιλτράρει τα αρχεία καταγραφής του συστήματος κατά ώρα, μονάδα, προτεραιότητα και άλλα.
- Επιτρέπει ευέλικτες εξόδους (JSON, ISO 8601, λεπτομερείς) και παρακολούθηση σε πραγματικό χρόνο.
- Διαχείριση χώρου με κενό και όρια στο journald.conf για λεπτομερή έλεγχο.
όταν δουλεύεις με Linux σύγχρονος, systemd και το κεντρικό του ημερολόγιο Είναι το βασικό εργαλείο για την κατανόηση του τι συμβαίνει στο μηχάνημα. Και εδώ έρχεται το journalctl, το ελβετικό σουγιά για την υποβολή ερωτημάτων, το φιλτράρισμα και την εξαγωγή αυτών των αρχείων καταγραφής με ταχύτητα και ακρίβεια που δεν θα έχετε με διάσπαρτα επίπεδα αρχεία.
Αυτό το σεμινάριο συνδυάζει, βήμα προς βήμα, Όλα τα βασικά και προηγμένα χαρακτηριστικά του journalctl: από τότε που είδα το τελευταίο εκκίνηση, φιλτράρετε κατά υπηρεσία, χρήστη ή προτεραιότητα, για να διαχειριστείτε τον χώρο στο δίσκο, να αλλάξετε μορφές εξόδου ή να εξαγάγετε σε JSON. Επιπλέον, θα δείτε πώς να ενεργοποιήσετε το αποθήκευση επίμονος, λίστα προηγούμενων εκκινήσεων και μετακίνηση σε χρονικά παράθυρα με απόλυτη ευελιξία.
Journalctl, systemd-journald, και γιατί είναι σημαντικά
Σε συστήματα με systemd, τα μηνύματα από τον πυρήνα, τις υπηρεσίες, το initrd και τις διεργασίες χρήστη συλλέγονται σε ένα δυαδικό ημερολόγιο που διαχειρίζεται το systemd-journaldΣε αντίθεση με το /var/log/syslog και παρόμοια, αυτή η δυαδική μορφή επιτρέπει Γρήγορες αναζητήσεις, φιλτράρισμα μεταδεδομένων και ευέλικτα αποτελέσματα (π.χ. JSON ή στυλ syslog), όλα από ένα μόνο σημείο πρόσβασης: journalctl.
Πρώτα απ 'όλα: ελέγξτε τη ζώνη ώρας
Δεδομένου ότι οι εγγραφές εμφανίζονται σε τοπική ώρα από προεπιλογή, συνιστάται πρώτα να επικυρώσετε τη ζώνη ώρας με timedatectlΜπορείτε να εμφανίσετε τις διαθέσιμες ζώνες με timedatectl list-timezones
και αλλάξτε το με sudo timedatectl set-timezone ZONA
Για να ελέγξετε την κατάσταση, χρήσεις timedatectl status
και επιβεβαιώνει ότι το τοπικό ρολόι είναι σωστό.
Αν ενδιαφέρεστε να εργαστείτε σε UTC, το journalctl προσθέτει τον τροποποιητή –utc για να εμφανίζετε καθολικές χρονικές σημάνσεις όταν τις χρειάζεστε. Με αυτόν τον τρόπο δεν υπάρχει καμία ταλαιπωρία κατά τη σύγκριση με αρχεία καταγραφής. άλλοι διακομιστές ή με δεδομένα παρακολούθησης.
Ξεκινώντας: προβολή, πλοήγηση και σελιδοποίηση
Χωρίς επιχειρήματα, journalctl
εμφανίζει ολόκληρο το ημερολόγιο από την παλαιότερη καταχώρηση έως την νεότερη χρησιμοποιώντας σελιδοποίηση (συνήθως μείον). Μπορείτε να κάνετε κύλιση με τα βέλη και, αν η γραμμή είναι μεγαλύτερη από την οθόνη, δείτε τα υπόλοιπα με το δεξί βέλοςΓια να αντιστρέψετε τη σειρά (πρώτα τα πρόσφατα), προσθέστε -r
.
Αν θέλετε η γραμμή να περικοπεί αντί να μετατοπιστεί πλευρικά, χρησιμοποιήστε --no-full
και να δεις τα πάντα (συμπεριλαμβανομένων μη εκτυπώσιμοι χαρακτήρες), προσθέτει -a
Όταν θέλετε να επεξεργαστείτε την έξοδο με άλλα εργαλεία, --no-pager
απενεργοποιεί το pager και αφήνει την έξοδο σε stdout.
Υπάρχουν πιο πρακτικές συντομεύσεις για την καθημερινή ζωή: -e
μεταβείτε κατευθείαν στο τέλος του ημερολογίου για να δείτε τα τελευταία νέα και -x
δοκιμάστε προσθήκη εξηγήσεων χρήσιμο σε ορισμένα μηνύματα (όταν είναι διαθέσιμα) για την επιτάχυνση της διάγνωσης.
Φιλτράρισμα κατά εκκίνηση συστήματος
Ο διακόπτης -b
Σας δείχνει μόνο τις καταχωρήσεις του τρέχουσα εκκίνησηΘα δείτε τις γραμμές "– Επανεκκίνηση –" που οριοθετούν τις συνεδρίες εάν πλοηγηθείτε σε περισσότερες από μία εκκινήσεις. Για να μεταβείτε σε μια προηγούμενη εκκίνηση, χρησιμοποιήστε το journalctl -b -1
; για πέντε εκκινήσεις πριν, -b -5
Αυτό είναι ιδανικό όταν ένα πρόβλημα παρουσιάζεται μόνο μετά από επανεκκίνηση ή σε συγκεκριμένες ακολουθίες εκκίνησης.
Αν θέλετε τη λίστα με τις stars που γνωρίζει η εφημερίδα, journalctl --list-boots
θα εμφανίσει ένα ανά γραμμή με: σχετική μετατόπιση (0, -1, -2, …), BOOT_ID και χρονικό εύρος. Μπορείτε να υποβάλετε ερώτημα με μετατόπιση ή απόλυτο αναγνωριστικό: journalctl -b 0
o journalctl -b BOOT_ID
.
Σημαντικό: Για να διατηρούνται οι προηγούμενες εκκινήσεις σε όλες τις επανεκκινήσεις, ενεργοποιήστε τη μόνιμη αποθήκευση δημιουργώντας /var/log/journal
(sudo mkdir -p /var/log/journal
) ή επεξεργασία /etc/systemd/journald.conf με Storage=persistent
Με αυτόν τον τρόπο, τα αρχεία καταγραφής δεν θα χάνονται σε κάθε εκκίνηση.
Ισχυρά χρονικά παράθυρα
Για χρονικό περιορισμό, χρησιμοποιήστε --since
y --until
με τη μορφή ΕΕΕΕ-ΜΜ-ΗΗ ΥΗ: ΜΜ: SSΑν παραλείψετε την ώρα, θεωρούνται μεσάνυχτα. Αν παραλείψετε την ημερομηνία, θεωρείτε την τρέχουσα ημέρα. Για παράδειγμα: journalctl --since "2024-12-01 09:00" --until "2024-12-01 12:00"
.
Μπορείτε επίσης να χρησιμοποιήσετε σχετικές εκφράσεις: χτες, σήμερα, αύριο, οργανωμένες εκδρομέςή φράσεις όπως "1 hour ago"
Ένα κλασικό: journalctl --since 09:00 --until "1 hour ago"
για προβολή από την πρώτη ώρα έως την ώρα πριν από την τρέχουσα.
Φιλτράρισμα κατά υπηρεσία, διαδικασίες, χρήστες και άλλα
Το πιο συνηθισμένο φίλτρο είναι ανά μονάδα systemd: -u
. Για παράδειγμα, journalctl -u nginx.service
Εμφανίζει τα πάντα από την υπηρεσία nginx. Μπορείτε να συνδυάσετε πολλές μονάδες για να δείτε πώς αλληλεπιδρούν. που παρεμβάλλονται χρονολογικά καταχωρήσεις από, για παράδειγμα, Nginx και PHP-FPM: journalctl -u nginx.service -u php-fpm.service --since today
.
Για υπηρεσίες που εκτελούνται ή όχι, μπορείτε να παραθέσετε μονάδες με systemctl list-units -t service --all
και ανακαλύψτε ακριβή ονόματα (χρήσιμο σε συστήματα με δεκάδες υπηρεσίες). Με αυτόν τον τρόπο αποφεύγετε τα τυπογραφικά λάθη και φιλτράρετε μόνο ό,τι χρειάζεται.
Εάν γνωρίζετε το PID, φιλτράρετε με βάση _PID
: journalctl _PID=8088
Για χρήστες και ομάδες, χρησιμοποιήστε _UID
y _GID
Για παράδειγμα, id -u www-data
θα επιστρέψει το UID που μπορείτε στη συνέχεια να χρησιμοποιήσετε στο journalctl _UID=33 --since today
για δείτε τι δημιουργήθηκε από αυτόν τον χρήστη.
Το ημερολόγιο καταχωρεί αυτόματα πολλά πεδία: εκτελέσιμο, εντολή, μεταφορά, εγκατάσταση, κ.λπ. Με journalctl -F CAMPO
μπορείτε να απαριθμήσετε τα διαφορετικές τιμές από ένα πεδίο και έτσι να δημιουργήσετε πιο ακριβή φίλτρα. Συμβουλευτείτε man systemd.journal-fields
για να δείτε τον πλήρη κατάλογο των φιλτραριζόμενων πεδίων.
Μερικά πολύ χρήσιμα φίλτρα: ανά εκτελέσιμη διαδρομή (journalctl /usr/bin/bash
), από τη δυνατότητα στυλ syslog (SYSLOG_FACILITY=3
αντιστοιχεί σε δαίμονα), με βάση το αναγνωριστικό εκκίνησης (_BOOT_ID=...
) ή με μεταφορά (_TRANSPORT=kernel|stdout|journal|syslog|driver|audit
) σύμφωνα με Η προέλευση του μηνύματος.
Μπορείτε ακόμη και να φιλτράρετε ανά συσκευή σε ορισμένες περιπτώσεις, για παράδειγμα για Εντοπισμός συμβάντων USB σε Linux o con journalctl /dev/sda
, χρήσιμο για τον εντοπισμό μηνυμάτων που σχετίζονται με αποθήκευση όταν υπάρχουν υποψίες για I/O ή κατεστραμμένους τομείς.
Μηνύματα πυρήνα και ισοδύναμα dmesg
Για να δείτε μόνο τα μηνύματα πυρήνα που έχετε -k
o --dmesg
Από προεπιλογή, περιορίζονται στην τρέχουσα εκκίνηση, αλλά μπορείτε να τα συνδυάσετε με -b
για άλλες μπότες: journalctl -k -b -5
θα δείξει τον πυρήνα από πέντε εκκινήσεις πριν.
Αυτό το φίλτρο είναι πολύ χρήσιμο για την ανίχνευση συγκρούσεις οδηγοί, προβλήματα του υλικού o πυρήνα πανικού ή συμβάντα χαμηλού επιπέδου που δεν εμφανίζονται στις υπηρεσίες χρήστη. Είναι η σύγχρονη εναλλακτική λύση στην παλιά εντολή dmesg
με χρονικό πλαίσιο και μεταδεδομένα.
Προτεραιότητες καταγραφής: 0 έως 7 ή ονομαστικά
Το Journalctl αναγνωρίζει τα τυπικά επίπεδα προτεραιότητας: 0 έκτακτη ανάγκη, 1 ειδοποίηση, 2 κρίσιμη, 3 σφάλμα, 4 προειδοποίηση, 5 ειδοποίηση, 6 πληροφορίες, 7 εντοπισμός σφαλμάτων. Μπορείτε να φιλτράρετε με -p
χρησιμοποιώντας το όνομα ή τον αριθμό και από προεπιλογή περιλαμβάνει το επιλεγμένο επίπεδο και όλα τα πιο αυστηρά.
Παραδείγματα: journalctl -p err -b
(σφάλμα και υψηλότερο στην τρέχουσα εκκίνηση) ή journalctl -p 3
Αν θέλετε να περιορίσετε μια ακριβές εύρος, χρησιμοποιήστε τη μορφή desde..hasta
: για παράδειγμα, μόνο προειδοποίηση, σφάλμα και κρίσιμο με journalctl -p warning..crit
ή σε αριθμούς journalctl -p 4..2
.
Παρακολουθήστε σε πραγματικό χρόνο, τις πιο πρόσφατες γραμμές και αναζητήσεις
Για να «ακούσετε» την εφημερίδα ζωντανά, -f
λειτουργεί το ίδιο όπως ουρά -fΙδανικό όταν επανεκκινείτε μια υπηρεσία και θέλετε να δείτε αμέσως τι βγάζει. Αν προτιμάτε ένα δείγμα, -n
εμφάνιση των τελευταίων N γραμμών (προεπιλογή 10): journalctl -n
, journalctl -n 20
o journalctl -n12
στη συμπαγή του μορφή.
Εκτός από την πάντα χρήσιμη διοχέτευση για το grep, το journalctl ενσωματώνει --grep
για μοτίβα regex απευθείας στο ερώτημα. Για παράδειγμα, για να εντοπίσετε καταχωρήσεις που περιέχουν GnuPG: journalctl --grep GnuPG
Σε συνδυασμό με τον χρόνο, την οδήγηση ή την προτεραιότητα, η αναζήτηση είναι χειρουργικός.
Μορφές εξόδου και εξαγωγής
με -o
αλλάζετε τη μορφή εξόδου. Έχετε short
(στυλ syslog από προεπιλογή), short-iso
(Χρονική σήμανση ISO 8601), short-monotonic
(μονότονο σημάδι), short-precise
(μικροδευτερόλεπτα) και πολύλογος (εμφανίζει όλα τα πεδία, συμπεριλαμβανομένων των εσωτερικών).
Για ενσωματώσεις, json
y json-pretty
είναι ιδανικά (το τελευταίο είναι πιο ευανάγνωστο από τον άνθρωπο), και json-sse
ενθυλακώνει την έξοδο για συμβάντα που αποστέλλονται από τον διακομιστήΗ μορφή cat
εκτύπωση μόνο του πεδίου MESSAGE
, χρήσιμο για καθαρές μετρήσεις, και export
Χρησιμοποιείται για μεταφορά ή αντίγραφα ασφαλείας των αρχείων σε δυαδικό.
Αν πρόκειται να επεξεργαστείτε με άλλα εργαλεία, θυμηθείτε να τα συνδυάσετε --no-pager
και ανακατευθύνσεις: journalctl -b -u nginx -o json --no-pager > nginx.json
ή απλά journalctl > mensajes.log
όταν χρειάζεστε ένα γρήγορο άδειασμα.
Άδειες και ασφάλεια
Από τη σχεδίαση, κάθε χρήστης μπορεί να υποβάλει ερώτημα τα δικά τους αρχείαΓια να δείτε το σύστημα, πρέπει να είστε ρίζα ή ανήκουν σε ομάδες όπως adm
, wheel
o systemd-journal
Αυτό αποτρέπει τις διαρροές ευαίσθητων πληροφοριών και σέβεται την αρχή της ελάχιστο προνόμιο.
Έλεγχος χρήσης δίσκου
Για να μετρήσετε πόσο χώρο καταλαμβάνει η εφημερίδα: journalctl --disk-usage
Θα δείτε μια σύνοψη των MiB/GiB που καταναλώνονται από τα αρχεία του ημερολογίου σε μόνιμη και πτητική αποθήκευση, κάτι που είναι σημαντικό για αποφύγετε τους τρόμους σε μικρά χωρίσματα.
Εάν χρειάζεται να μειώσετε ή ελευθερώστε χώρο στο LinuxΈχετε τρεις στρατηγικές εκκένωσης: κατά μέγεθος, κατά χρόνο και κατά αριθμό αρχείων. Παραδείγματα: sudo journalctl --vacuum-size=1G
, sudo journalctl --vacuum-time=2weeks
o sudo journalctl --vacuum-files=10
να διατηρήσουμε όσο το δυνατόν περισσότερο 10 αρχειοθετημένα αρχεία.
Για να ορίσετε μόνιμα όρια, επεξεργαστείτε /etc/systemd/journald.conf
Τα πιο χρήσιμα κλειδιά: SystemMaxUse=
y RuntimeMaxUse=
(συνολικό όριο σε επίμονες και ασταθείς), SystemKeepFree=
y RuntimeKeepFree=
(χώρος προς κράτηση στο FS), SystemMaxFileSize=
y RuntimeMaxFileSize=
(μέγεθος μεμονωμένου αρχείου) και SystemMaxFiles=
y RuntimeMaxFiles=
(μέγιστος αριθμός αρχειοθετημένων αρχείων). Τα μεγέθη δέχονται επιθήματα K, M, G, T, P, E.
Λάβετε υπόψη ότι τα όρια μεγέθους αρχείου καθοδηγούν την περιστροφή για να επιτευχθεί η σημειωμένη τιμή και ότι, από προεπιλογή, εάν δεν ρυθμίσετε τίποτα, το journal συνήθως αυτοπεριορισμός σε περίπου 10% του συστήματος αρχείων όπου βρίσκεται. Αφού αλλάξετε τη διαμόρφωση, επανεκκινήστε την υπηρεσία με sudo systemctl restart systemd-journald
.
Γρήγορες συνταγές και κόλπα
Για να δείτε μόνο τα πιο σοβαρά σφάλματα από την τελευταία εκκίνηση: journalctl -p err -b
Αν θέλετε ακριβώς προειδοποίηση, σφάλμα και κρίσιμο: journalctl -p warning..crit
o journalctl -p 4..2
να το εκφράσω με αριθμούς.
Καταγράψτε όλες τις τιμές σε ένα πεδίο και βελτιώστε τα φίλτρα: journalctl -F _GID
(o -F _UID
, -F _EXE
, κ.λπ.). Είναι ιδανικό για την ανακάλυψη πραγματικών αναγνωριστικών πριν από τη δημιουργία του τελικού σας ερωτήματος.
Διαχωρίστε ανά εκτελέσιμο αρχείο ή εντολή: journalctl _EXE=/usr/bin/sudo
o journalctl _COMM=sudo
Εάν χρειάζεται να απομονώσετε τι προέρχεται από την έξοδο τυπικών υπηρεσιών, φιλτράρετε κατά _TRANSPORT=stdout
.
Φιλτράρισμα κατά κεντρικό υπολογιστή σε κοινόχρηστα περιβάλλοντα ονόματος κεντρικού υπολογιστή: journalctl _HOSTNAME=debian
Και για να ζητήσετε εισιτήρια από έναν συγκεκριμένο χρήστη που γνωρίζει το UID του: journalctl _UID=0
(root) ή ο αριθμός που αντιστοιχεί στην περίπτωσή σας.
Χρειάζεται να βλέπετε μόνο μηνύματα επιπέδου "χρήστη" από το αρχείο καταγραφής συστήματος της εγκατάστασης; journalctl SYSLOG_FACILITY=1
(και να θυμάστε ότι το 3 αντιστοιχεί σε δαίμονας). Αυτά τα φίλτρα σάς βοηθούν να μιμηθείτε κλασικές προβολές syslog κατά τη μετεγκατάσταση στο systemd.
Εργασία σε UTC, ISO 8601 και ακρίβεια μικροδευτερολέπτων
Εάν έχετε συστήματα σε πολλές ζώνες ή συγκρίνετε με μετρήσεις, προσθέστε --utc
για την τυποποίηση του χρόνου. Για σαφείς και τακτοποιημένες μορφές, -o short-iso
Είναι μια εξαιρετική επιλογή. Αν ενδιαφέρεστε για μονοτονική ταξινόμηση ρολογιού (για εντοπισμό σφαλμάτων σε σχετικές ακολουθίες), -o short-monotonic
είναι φίλος σου.
Όταν ένα περιστατικό απαιτεί μέγιστη λεπτομέρεια, -o short-precise
προσθέτει μικροδευτερόλεπτα στη χρονική σήμανση. Είναι ένα στολίδι όταν συσχετίζεται με ίχνη, προφίλ ή καταγραφές δικτύου.
Καλές πρακτικές για καθημερινή χρήση
Ενεργοποιήστε την επιμονή αν σας ενδιαφέρει το ιστορικό: δημιουργήστε /var/log/journal
ή διαμορφώστε Storage=persistent
και επανεκκινήστε το journald. Εάν εργάζεστε με πολλή εναλλαγή, ορίστε SystemMaxUse
y SystemKeepFree
ώστε να μην πνίξει ποτέ το χώρισμα.
Για τον εντοπισμό σφαλμάτων σε υπηρεσίες, συνδυάστε: -u servicio
+ -f
+ φίλτρα του προτεραιότητα και ώρα. Προσθήκη -x
όταν υποψιάζεστε κρυπτικά μηνύματα. Μερικές φορές παρέχει επιπλέον ενδείξεις που σας σώζουν πολύτιμα λεπτά.
Σε αγωγούς και εξαγωγές, χρησιμοποιήστε --no-pager
και μορφές όπως json
o export
ανάλογα με το εργαλείο-στόχο. Μην ξεχνάτε την ασφάλεια: περιορίστε την πρόσβαση σε κατάλληλες ομάδες και έλεγχος δικαιωμάτων εάν κοινοποιείτε αποτελέσματα που ενδέχεται να περιέχουν ευαίσθητα δεδομένα.
Η εξοικείωση με το journalctl αλλάζει τον τρόπο που κατανοείτε το σύστημα: με φίλτρα ανά μονάδα, PID, χρήστη, προτεραιότητα ή ώρα, με πλούσιες εξόδους και έλεγχο της χρήσης του δίσκου, Θα έχετε πάντα την ακριβή ιστορία πρόχειρη για το τι συμβαίνει. Είναι ένα αξιόπιστο εργαλείο για έξυπνη παρακολούθηση, έλεγχο και εντοπισμό σφαλμάτων, χωρίς να χαθείτε σε χιλιάδες γραμμές.
Παθιασμένος συγγραφέας για τον κόσμο των byte και της τεχνολογίας γενικότερα. Μου αρέσει να μοιράζομαι τις γνώσεις μου μέσω της γραφής, και αυτό θα κάνω σε αυτό το blog, θα σας δείξω όλα τα πιο ενδιαφέροντα πράγματα σχετικά με τα gadget, το λογισμικό, το υλικό, τις τεχνολογικές τάσεις και πολλά άλλα. Στόχος μου είναι να σας βοηθήσω να περιηγηθείτε στον ψηφιακό κόσμο με απλό και διασκεδαστικό τρόπο.