GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Upstart-Protokollmeldungen unter Ubuntu 13.x?

Unter Ubuntu 12.04 finde ich Upstart-Protokollmeldungen in /var/log/syslog .

Befehle:

# initctl log-priority info
# initctl emit hello

Protokoll:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

Unter Ubuntu 13.10 erscheinen die Meldungen nicht im syslog oder irgendwo anders unter /var/log Verzeichnis, obwohl Befehle wie logger hello funktionieren wie erwartet. Soll ich sie woanders suchen? Gibt es eine Konfigurationseinstellung, die ich irgendwo ändern muss?

Es gibt eine Frage zu Server Fault von jemandem, der das gleiche Problem unter Ubuntu 13.04 zu haben scheint, und mehr hier und hier, die möglicherweise auch das gleiche Problem beschreiben. Leider bieten diese Fragen keine Anhaltspunkte für das Problem.

Beste Antwort

Bearbeiten 2016-06-02

Wenn Sie versuchen, „Upstart-Protokollmeldungen“ im Allgemeinen zu finden, überprüfen Sie /var/log/upstart/ . Dort speichert Upstart stdout und stderr von Upstart-Diensten. Danke an leopds Antwort für den Hinweis.

Wenn Sie nach Protokollmeldungen von Upstart selbst suchen, die von initctl log-priority konfiguriert werden und von initctl emit ausgegeben , lesen Sie weiter!

Kurzfassung

Die Log-Einträge sollten eigentlich in dmesg erscheinen. Trotzdem nicht werden standardmäßig in /var/log angezeigt .

Wenn Sie sie wollen in /var/log fügen Sie auch $KLogPermitNonKernelFacility on hinzu zu rsyslogds config. Ich schlage vor, eine benutzerdefinierte Datei wie /etc/rsyslog.d/60-custom.conf zu erstellen um die Bearbeitung von /etc/rsyslog.conf zu vermeiden , da diese von dpkg verwaltet wird. Jetzt sollten Upstart-Meldungen in /var/log/syslog erscheinen , sobald Sie die log-priority von Upstart festgelegt haben zu info oder so.

Lange Version

Ich brauchte Tage, um das aufzuspüren, aber anscheinend tut Upstart (1.5) nicht log in Syslog, das heißt, es ruft nicht die glibc-Funktion syslog() auf . Stattdessen protokolliert Upstart den Kernel-Ringpuffer, den dmesg liest. Nun, ich hielt es nicht für möglich für Benutzerraumprozesse, um in diesen Puffer zu schreiben, aber anscheinend können sie das, indem sie nach /dev/kmsg schreiben , und genau das macht Upstart. Das ist also der erste Teil des Puzzles.

Der zweite Teil ist, dass es eine weit verbreitete Meinung gibt, dass Nachrichten, die in den Kernel-Ringpuffer geschrieben werden, vom Kernel automatisch in Syslog kopiert werden (zumindest dachte ich das immer). Es stellt sich heraus, dass dies tatsächlich von einem Userspace-Daemon erledigt wird, traditionell klogd, der zusammen mit syslogd arbeitet. Offensichtlich ersetzt rsyslogd syslogd, aber anscheinend ersetzt es auch klogd (sozusagen:siehe Anmerkungen am Ende).

Der dritte Teil ist, dass Nachrichten, die aus dem Benutzerraum in den Kernel-Ringpuffer geschrieben werden, tatsächlich anders aussehen als Nachrichten, die aus dem Kernel-Raum geschrieben werden:Sie haben eine andere Einrichtung. dmesg hat einige Optionen, die damit interagieren:-x zeigt die Einrichtung (und die Priorität), während -u und -k Sagen Sie dmesg, dass es nur Benutzer-Facility-Meldungen bzw. Kernel-Facility-Meldungen anzeigen soll.

Verwandte:Wie kann Unity daran gehindert werden, den Suchverlauf zu speichern?

Hier ist der Clou:Standardmäßig ignoriert rsyslogd Nachrichten mit einer Nicht-Kernel-Einrichtung, wenn Nachrichten aus dem Ringpuffer des Kernels gelesen werden. Die relevante Konfigurationsoption ist $KLogPermitNonKernelFacility , die standardmäßig deaktiviert ist und aktiviert werden muss, wenn Sie möchten, dass rsyslogd diese Nachrichten verarbeitet. Beachten Sie, dass der Rest der Konfiguration von rsyslogd alle Nachrichten aus dem Kernel-Ringpuffer so behandeln wird, als hätten sie den kern Einrichtung, unabhängig von der Einrichtung, die sie im Ringpuffer des Kernels hatten.

Weitere Informationen

syslog

Code kann in Syslog schreiben, indem er die glibc-Funktion syslog() aufruft , beschrieben in man 3 syslog . Anscheinend schreiben diese Funktionen in /dev/log . Code kann aus Syslog lesen, indem /dev/log gelesen wird , und das ist syslogd und seine Ersetzungen tun. rsyslogd liest /dev/log mit seinem imuxsock Eingangsmodul.

Kernel-Ringpuffer

Der Kernelspace schreibt in diesen Puffer, indem er die Kernelfunktion printk() aufruft , daher wird es manchmal als printk-Puffer bezeichnet. Der Benutzerbereich kann darauf schreiben, indem er in /dev/kmsg schreibt . Der Benutzerbereich kann auf verschiedene Weise aus diesem Puffer lesen:Er kann aus /proc/kmsg lesen (was dmesg standardmäßig macht), oder es kann aus /dev/kmsg lesen , oder es kann den Systemaufruf syslog() aufrufen , das in man 2 syslog beschrieben wird und ist völlig anders aus der Glibc-Funktion syslog() beschrieben in man 3 syslog . glibc stellt tatsächlich einen Wrapper für den Systemaufruf syslog() bereit , genannt klogctl() , um diese Verwirrung zu beseitigen.

Traditionell klogd liest von einer dieser Schnittstellen und ruft dann die glibc-Funktion syslog() auf um sie in das Syslog zu kopieren. rsyslogd liest eine dieser Schnittstellen durch sein imklog Eingabemodul, aber AFAIK macht sich nicht die Mühe, die glibc syslog() aufzurufen , weshalb es nicht genau wie klogd ist; es verarbeitet nur die Ausgabe von imklog genauso wie es die Ausgabe von jedem anderen Eingabemodul verarbeitet. Es gibt die zusätzliche Einschränkung, dass alle imklog Ausgabe hat den kern Einrichtung, unabhängig von der Einrichtung, die Nachrichten im Ringpuffer des Kernels hatten.

Referenzen

  • http://upstart.ubuntu.com/cookbook/#initctl-log-priority (gibt fälschlicherweise an, dass Upstart in Syslog protokolliert)
  • https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg
  • http://www.gnu.org/software/libc/manual/html_node/Overview-of-Syslog.html
  • http://www.rsyslog.com/doc/v5-stable/configuration/modules/imklog.html (Beachten Sie, dass dies für v5 ist, das in Ubuntu 12.04 verwendet wird. Diese Optionen gelten in neueren rsyslog-Versionen als veraltet)

Ubuntu
  1. Aktualisieren Sie die Kernel-Version auf Ubuntu-Servern

  2. Linux-Kernel 5.13 veröffentlicht! So installieren Sie unter Ubuntu 21.04

  3. Unterschied zwischen /var/log/messages, /var/log/syslog und /var/log/kern.log?

  4. Fehlgeschlagene Installation von Virtualbox 5.1 auf Ubuntu 16.04?

  5. Ssh-Aktivität protokollieren?

So installieren Sie den Linux-Kernel 5.15 auf Ubuntu 20.04

So überprüfen Sie die Kernel-Version in Ubuntu 20.04

4 Möglichkeiten, sich von einer Ubuntu-Desktop-Sitzung abzumelden

So installieren Sie den neuesten Linux-Kernel 5.15 auf Ubuntu 20.04

So installieren Sie den neuesten Linux-Kernel 4.8 unter Ubuntu 16.04

So installieren Sie den Linux-Kernel 4.7.2 auf Ubuntu 16.04 LTS