Ubuntu 13.XのUpstartログメッセージはどこにありますか?


28

Ubuntu 12.04では、Upstartログメッセージをで見つけることができます/var/log/syslog

コマンド:

# initctl log-priority info
# initctl emit hello

ログ:

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

Ubuntu 13.10では、メッセージはディレクトリ内syslogまたは/var/logディレクトリの下のどこにも表示されませんが、コマンドlogger helloは期待どおりに機能します。他の場所で探してください。どこかに変更する必要がある構成設定はありますか?

Ubuntu 13.04で同じ問題を抱えていると思われる人からのServer Faultに関する質問があります。ここここで同じ問題を説明している可能性があります。残念ながら、これらの質問は問題の原因にはなりません。

回答:


39

編集2016-06-02

一般に「Upstartログメッセージ」を検索する場合は、を確認してください/var/log/upstart/。そこで、Upstart はUpstartサービスを保存stdoutstderrます。これを指摘してくれたleopdの回答に感謝します。

Upstart自体からのログメッセージを探している場合は、によって構成initctl log-priorityされinitctl emit、によって出力されます。

短縮版

ログエントリは、実際にはdmesgに表示されるはずです。それにもかかわらず、それらはデフォルトで表示されませ/var/log

それら/var/logも必要な場合は、$KLogPermitNonKernelFacility onrsyslogdの構成に追加します。/etc/rsyslog.d/60-custom.conf編集を避けるようなカスタムファイルを作成することをお勧めします/etc/rsyslog.conf。これはdpkgによって管理されているためです。今、成り上がりのメッセージがで表示されるはずです/var/log/syslogあなたは成り上がり者の設定した後、log-priorityinfoたりそうします。

ロングバージョン

これは、追跡する日かかったが、どうやらUpstartは(1.5)がないではない syslogにログインし、あること、それは、glibcの関数を呼び出していませんsyslog()。代わりに、Upstartはdmesgが読み取るカーネルリングバッファーにログを記録します。今、ユーザー空間プロセスがそのバッファーに書き込むことは不可能だと思いましたが、明らかにに書き込むことで可能/dev/kmsgになり、Upstartはまさにそれを行います。これがパズルの最初の部分です。

2番目の部分は、カーネルリングバッファーに書き込まれたメッセージがカーネルによってsyslogに自動的にコピーされるという広く信じられていることです(少なくとも、私は常に考えていました)。これは、実際にはsyslogdと連携して動作するklogdというユーザー空間デーモンによって実際に行われます。明らかに、rsyslogdはsyslogdを置き換えますが、明らかにklogdも置き換えます(並べ替え:末尾の注を参照)。

3番目の部分は、ユーザー空間からカーネルリングバッファーに書き込まれたメッセージは、実際にはカーネル空間から書き込まれたメッセージとは異なるように見えることです。つまり、機能が異なります。dmesgには、これと対話するいくつかのオプションがあります。-xファシリティ(および優先度)を表示し-u-kdmesgにそれぞれユーザーファシリティメッセージとカーネルファシリティメッセージのみを表示するように指示します。

これがクリンチャーです。デフォルトでは、rsyslogd 、カーネルリングバッファーからメッセージを読み取るときに、非カーネル機能を持​​つメッセージを無視します。関連する設定オプションはです$KLogPermitNonKernelFacility。これはデフォルトでオフになっており、rsyslogdでこれらのメッセージを処理する場合はオンにする必要があります。残りのrsyslogdの設定では、カーネルリングバッファーにあるkern機能に関係なく、カーネルリングバッファーからのすべてのメッセージが機能を持つものとして扱われることに注意してください。

詳しくは

syslog

コードはsyslog()、で説明されているglibc関数を呼び出すことでsyslogに書き込むことができますman 3 syslog。どうやらこれらの関数はに書き込み/dev/logます。コードは読んでのsyslogから読み取ることができ/dev/log、これは何でsyslogdやるとその代替品。入力モジュールを使用してrsyslogd読み取ります。/dev/logimuxsock

カーネルリングバッファー

カーネル空間は、カーネル関数を呼び出すことでこのバッファーに書き込みますprintk()。したがって、printkバッファーと呼ばれることもあります。ユーザー空間は、に書き込むことでそれに書き込むことができます/dev/kmsg。ユーザースペースは、いくつかの方法により、このバッファから読み取ることができます:それはから読み取ることができます/proc/kmsg(デフォルトでは何のdmesg)、またはそれから読み取ることができ/dev/kmsg、またはそれはシステムコールを呼び出すことができますsyslog()に記載されており、man 2 syslogかつある完全に異なる glibcの機能からsyslog()説明をでman 3 syslog。glibcは、実際にこの混乱を軽減するためにsyslog()呼び出されるシステムコールにラッパーを提供しますklogctl()

従来、klogdこれらのインターフェイスの1つから読み取り、glibc関数syslog()を呼び出してsyslogにコピーします。rsyslogdはimklog入力モジュールを介してこれらのインターフェースの1つを読み取りますが、知る限りではglibcを呼び出すことはありませんsyslog()imklog他の入力モジュールからの出力を処理するのと同じように、単に出力を処理します。カーネルリングバッファーにあるファシリティメッセージに関係なくimklog、すべての出力にkernファシリティがあるという追加の警告があります。

参照資料


4
これが機能しなかった理由とその修正方法の詳細な説明をありがとう。上記のリンクされた質問に対する回答の1つですが、dmesgここで説明するコンテキストなしでは意味がありませんでした。
ブラッドゾニエ14

16

で見つけた /var/log/upstart/


私は、ファイル内の鉱山を発見した私の仕事の名前です。/var/log/upstart/job.logjob
ケニーエビット

仕事からstdout / stderrが行くところだと知る。この質問は、特定のジョブに関連付けられていないUpstart自体からのログメッセージに関するものです。
ヴァネッサフィップス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.