Wo befinden sich Upstart-Protokollmeldungen unter Ubuntu 13.X?

28

Unter Ubuntu 12.04 kann ich Upstart-Logmeldungen in finden /var/log/syslog.

Befehle:

# initctl log-priority info
# initctl emit hello

Log:

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 Nachrichten nicht in syslogoder an einer anderen Stelle im /var/logVerzeichnis, obwohl Befehle wie logger helloerwartet funktionieren. Soll ich sie woanders suchen? Gibt es eine Konfigurationseinstellung, die ich irgendwo ändern muss?

Es gibt eine Frage zum Serverfehler von jemandem, der anscheinend das gleiche Problem unter Ubuntu 13.04 hat, und hier und hier mehr , die möglicherweise auch das gleiche Problem beschreiben. Leider bieten diese Fragen keine Anhaltspunkte für das Problem.

Bradd Szonye
quelle

Antworten:

39

Bearbeiten 02.06.2016

Wenn Sie im Allgemeinen versuchen, "Upstart-Protokollmeldungen" zu finden, aktivieren Sie diese Option /var/log/upstart/. Hier speichert Upstart stdoutund stderrvon Upstart-Diensten. Vielen Dank an leopd's Antwort für den Hinweis.

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

Kurze Version

Die Protokolleinträge sollten tatsächlich in dmesg angezeigt werden. Trotzdem werden sie nicht standardmäßig in angezeigt /var/log.

Wenn Sie sie auch möchten /var/log, fügen Sie sie $KLogPermitNonKernelFacility onzur Konfiguration von rsyslogd hinzu. Ich schlage vor, eine benutzerdefinierte Datei /etc/rsyslog.d/60-custom.confzu erstellen , um eine Bearbeitung zu vermeiden /etc/rsyslog.conf, da dies von dpkg verwaltet wird. Jetzt sollten Upstart-Meldungen in angezeigt werden /var/log/syslog, sobald Sie Upstarts log-priorityauf infooder so eingestellt haben.

Lange Version

Das hat Tage gedauert, aber anscheinend meldet sich Upstart (1.5) nicht bei syslog an, das heißt, es ruft nicht die glibc-Funktion auf syslog(). Stattdessen protokolliert Upstart im Kernel-Ringpuffer, was dmesg liest. Nun, ich dachte nicht, dass es für User-Space-Prozesse möglich ist , in diesen Puffer zu schreiben, aber anscheinend können sie dies durch Schreiben /dev/kmsg, und genau das macht Upstart. Das ist also der erste Teil des Puzzles.

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

Der dritte Teil ist, dass Nachrichten, die aus dem Benutzerbereich in den Kernelringpuffer geschrieben werden, tatsächlich anders aussehen als Nachrichten, die aus dem Kernelbereich geschrieben werden: Sie haben eine andere Funktion. dmesg hat ein paar Optionen , die interact mit diesem: -xdie Anlage zeigen wird (und der Priorität), während -uund -kdmesg sagen nur Benutzereinrichtungsnachrichten und Kernel - Anlage Nachrichten anzuzeigen sind.

Hier ist der Drahtreifen: Standardmäßig ignoriert rsyslogd Nachrichten mit einer Nicht-Kernel-Funktion, wenn Nachrichten aus dem Kernel-Ringpuffer gelesen werden. Die entsprechende Konfigurationsoption ist $KLogPermitNonKernelFacilitystandardmäßig deaktiviert und muss aktiviert werden, wenn rsyslogd diese Nachrichten verarbeiten soll. Beachten Sie, dass der Rest der Konfiguration von rsyslogd alle Nachrichten aus dem Kernel-Ringpuffer als mit der kernEinrichtung versehen behandelt, unabhängig von der Einrichtung, die sie im Kernel-Ringpuffer hatten.

Mehr Informationen

Syslog

Code kann durch Aufrufen der syslog()in beschriebenen Funktion glibc in syslog schreiben man 3 syslog. Anscheinend schreiben diese Funktionen an /dev/log. Code kann durch Lesen aus dem Syslog gelesen werden /dev/log, und dies syslogdund seine Ersetzungen tun dies. rsyslogdliest /dev/logmit seinem imuxsockEingabemodul.

Kernel-Ringpuffer

Der Kernel-Speicherplatz schreibt in diesen Puffer, indem er die Kernel-Funktion printk()aufruft. Daher wird er manchmal als Printk-Puffer bezeichnet. Der Benutzerraum kann darauf schreiben, indem er darauf schreibt /dev/kmsg. Der Benutzerraum kann mit verschiedenen Methoden aus diesem Puffer lesen: Er kann auslesen /proc/kmsg(was dmesg standardmäßig tut), oder er kann auslesen /dev/kmsg, oder er kann den Systemaufruf aufrufen syslog(), der in der beschriebenen glibc-Funktion beschrieben ist man 2 syslogund sich vollständig von dieser unterscheidetsyslog() in man 3 syslog. glibc stellt dem Systemaufruf syslog(), der aufgerufen wird klogctl(), einen Wrapper zur Verfügung , um diese Verwirrung zu lindern.

klogdLiest traditionell von einer dieser Schnittstellen und ruft dann die Funktion glibc syslog()auf, um sie in das Syslog zu kopieren. rsyslogd liest eine dieser Schnittstellen über sein imklogEingabemodul, aber AFAIK kümmert sich nicht darum, die glibc aufzurufen syslog(), weshalb es nicht genau wie klogd ist. Es verarbeitet nur die Ausgabe von imkloggenauso wie die Ausgabe von jedem anderen Eingabemodul. Es gibt die zusätzliche Einschränkung, dass alle imklogAusgaben die Funktion haben kern, unabhängig davon, welche Funktionsnachrichten sich im Kernel-Ringpuffer befinden.

Verweise

Vanessa Phipps
quelle
4
Vielen Dank für die ausführliche Erklärung, warum dies nicht funktioniert hat und wie es behoben werden kann. Eine der Antworten auf die genannten verknüpften Fragen dmesgergab ohne den hier gegebenen Kontext keinen Sinn.
Bradd Szonye
16

Ich fand meine in /var/log/upstart/

Leopd
quelle
Ich fand Mine in der Datei , /var/log/upstart/job.logwo jobder Name meiner Arbeit ist.
Kenny Evitt
AFAIK das ist, wohin stdout / stderr von den Jobs gehen. Bei dieser Frage handelt es sich um Protokollnachrichten von Upstart selbst, die keinem bestimmten Auftrag zugeordnet sind.
Vanessa Phipps