Was sind die Konzepte von "Kernel Ring Buffer", "User Level", "Log Level"?

35

Ich habe oft die Wörter "kernel ring buffer", "user level", "log level" und einige andere Wörter zusammen gesehen. z.B

/ var / log / dmesg Enthält Informationen zum Kernel-Ringpuffer.

/var/log/kern.log Enthält nur die Kernelmeldungen eines beliebigen Loglevels

/var/log/user.log Enthält Informationen zu allen Protokollen auf Benutzerebene

Geht es um Protokolle? Wie hängen sie zusammen und wie unterscheiden sie sich?

Unter "Ebene" stelle ich mir eine Hierarchie von mehreren Ebenen vor?

Bezieht sich "Benutzerebene" auf "Benutzerbereich"?

Haben sie in irgendeiner Weise mit Runlevel oder Schutzring zu tun ?

Tim
quelle

Antworten:

41

Ja, das alles hat mit Protokollierung zu tun. Nein, nichts davon hat mit Runlevel oder "Schutzring" zu tun.

Der Kernel speichert seine Protokolle in einem Ringpuffer. Der Hauptgrund dafür ist, dass die Protokolle vom Systemstart gespeichert werden, bis der Syslog-Daemon die Möglichkeit hat, sie zu starten und zu sammeln. Andernfalls werden vor dem Start des Syslog-Daemons keine Protokolle aufgezeichnet. Der Inhalt dieses Ringpuffers kann jederzeit mit dem dmesgBefehl angezeigt werden, und sein Inhalt wird auch /var/log/dmesgbeim Start des Syslog-Daemons gespeichert .

Alle Protokolle, die nicht vom Kernel stammen, werden beim Generieren an den Syslog-Daemon gesendet, sodass sie nicht in Puffern aufbewahrt werden. Die Kernel-Protokolle werden ebenfalls vom Syslog-Daemon bei der Generierung abgerufen, sie werden jedoch weiterhin (unnötigerweise, möglicherweise) im Ringpuffer gespeichert.

Die Protokollebenen sind in der Manpage syslog (3) dokumentiert und lauten wie folgt:

  • LOG_EMERG : System ist unbrauchbar
  • LOG_ALERT : Es muss sofort etwas unternommen werden
  • LOG_CRIT : Kritische Bedingungen
  • LOG_ERR : Fehlerbedingungen
  • LOG_WARNING : Warnbedingungen
  • LOG_NOTICE : normaler, aber signifikanter Zustand
  • LOG_INFO : Informationsmeldung
  • LOG_DEBUG : Meldung auf Debug-Ebene

Jedes Level ist weniger "wichtig" als das vorherige. Eine Protokolldatei, die Protokolle auf einer Ebene aufzeichnet, zeichnet auch Protokolle auf allen wichtigeren Ebenen auf.

Der Unterschied zwischen /var/log/kern.logund hat /var/log/mail.log(zum Beispiel) nicht mit dem Level zu tun, sondern mit der Einrichtung oder Kategorie. Die Kategorien sind auch auf der Manpage dokumentiert.

Celada
quelle
Vielen Dank. (1) Bezieht sich "Benutzerebene" auf "Benutzerbereich"? (2) Nach dem, was Sie gesagt haben, /var/log/kern.logund /var/log/dmesgsollte den gleichen Inhalt wie die Kernel-Nachrichten haben? Ihr Inhalt ist jedoch nicht derselbe.
Tim
"User Level" ist meines Wissens keine Sache. Es gibt die Syslog-Ebene, die die "Wichtigkeits" -Ebene einer Syslog-Nachricht darstellt (ich habe die Ebenen aufgelistet), und sie hat nichts mit Benutzer- oder Kernelspeicher zu tun. /var/log/kern.logsollte den dmesgInhalt enthalten (möglicherweise anders formatiert) als beim Booten. Es sei denn, es ist lange her, dass das Booten und der Inhalt herausgedreht wurden.
Celada
Meine zweite Frage lautet: Während dmesgdie aktuellen Werte des Kernel-Ringpuffers ausgedruckt werden, werden die vergangenen / alten Werte des Puffers in gespeichert /var/log/dmesg. Die dmesgAusgabe ist also nur eine aktuelle Teilmenge des /var/log/dmesgInhalts, und sie unterscheiden sich. Dann sind die Inhalte von /var/log/dmesg(nicht dmesgwie in Ihrem Kommentar) und /var/log/kernel.logdie gleichen?
Tim
Kommt darauf an wann! Bald nach dem Booten wird der /var/log/dmesgInhalt voraussichtlich gegen Ende des Monats vorliegen /var/log/kern.log. Viel später wird es nicht mehr da sein, es wird herausgedreht sein. Enthält im Allgemeinen /var/log/kern.logProtokolle, die älter sind als ein bestimmter Snapshot des Kernel-Protokollringpuffers, sowie Protokolle, die neuer sind als der Snapshot.
Celada
17

Um zumindest den ersten Teil Ihrer Frage zu beantworten dmesg:

/var/log/dmesg speichert den Inhalt des 'Kernel-Ringpuffers', eines vom Kernel beim Booten erstellten Speicherpuffers, in dem die von ihm erzeugten Protokolldaten gespeichert werden, sobald Sie die Bootloader-Phase hinter sich haben.

Ein Ringpuffer ist eine spezielle Art von Puffer, der immer eine konstante Größe hat und die ältesten Nachrichten entfernt, wenn neue Nachrichten eingehen. Der im Ringpuffer des Kernels gespeicherte Text wird angezeigt, wenn Sie zum ersten Mal ein Unix-System starten -ähnliche Maschine im Konsolenmodus (kein Startbildschirm, Plymouth). Das Kernel-Protokoll wird in einem Speicherpuffer gespeichert, so dass sich die Boot-Protokolle irgendwo befinden müssen, bis das System sich selbst an dem Punkt gebootet hat, an dem der syslogDämon übernehmen kann.

dmesgunter Linux ist ein Teil des wesentlichen util-linuxPakets von Systemwartungs-Tools, die von kernel.org veröffentlicht werden. Nach der dmesg(1)Manpage,

Mit dmesg wird der Kernel-Ringpuffer untersucht oder gesteuert.

Siehe: http://www.computerhope.com/unix/dmesg.htm

Unter 'systemd' init kann dieser Befehl verwendet werden, um den Kernel-Ringpuffer zu drucken
# journalctl --dmesg or journalctl -k:, thxs for correction @don_crissti

Ausgeben des Befehls dmesg | grep -i ethernet zum Beispiel, wird die Kernel - Ringpuffer für die Zeichenfolge ‚Ethernet‘ parsen.

Ich hoffe, das hilft zumindest beim ersten Teil Ihrer Anfrage.

nomadrc
quelle