syslog
syslogとはシステムから出てくるアラートなどの情報をネットワークで転送したり、ログとしてファイル保存していく仕組み。
- 稼働しているプログラムのログを、効率的に収集し記録するデーモンプロセスがsyslog。
- ログは多くの場合、/var/logs 配下のファイルのそれぞれに残る。
- さまざまなunit(=出力元)からログを集めてくる。
$ systemctl list-units --all
でunitを確認できる。 - Rails のログをsyslogに出すためのロガーも存在する。
- 現状ではsyslogは「rsyslog」という名称のサービスに改良されています。
- 設定ファイルは「/etc/syslog.conf」もしくは「/etc/rsyslog.conf」となっている
journalctl
systemd によって集められたログは journalctl を使用することで表示できます。
- ジャーナルは journald デーモンによって実装されている。
- systemd サービスのみならず、カーネルやその他のソースからもメッセージを取得できる。
docker logs
Dockerが標準で提供するログ機能は、「docker run」コマンドで起動したプロセスによる標準出力および標準エラー出力内容を、コンテナを稼動させているホストのファイルシステム上に記録するというものだ。
コンテナを実行させる「docker run」コマンドでは、「-i」オプションおよび「-d」オプションでコンソールへの出力動作を変更できるようになっている。「-i」オプションを指定した場合はコンテナ内で標準出力に出力された内容が「docker run」コマンドを実行したコンソールにそのまま出力され、「-d」オプションを指定した場合コンテナはバックグラウンドで実行されてコンソールへの出力は行われなくなるのだが、このどちらの場合も標準出力に出力された内容と同じものがDockerデーモンに送られて記録されるようになっている。
まあ要はコンテナ内のsyslogからとってきているとかではなさそう。
dockerから出されたログは、ホストマシン内でjournalctlで sudo journalctl -u <コンテナ名>
で取ることができる。
これは、docker runするとその時のdocker logsで得られる内容と同様のものを ホストマシンのsystemctlは、そのコンテナ名のunitとして保存しているから可能なのである。
Ref.