ユーザ用ツール

サイト用ツール


debian:debiantips

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
debian:debiantips [2015-09-22 23:08]
tosihisa@netfort.gr.jp
debian:debiantips [2019-01-20 17:43] (現在)
tosihisa@netfort.gr.jp ↷ debiantips から debian:debiantips へページを移動しました。
行 26: 行 26:
 どれがどう切り分けられているのか,気になったので調べてみました. どれがどう切り分けられているのか,気になったので調べてみました.
  
-  * rsyslog-8.4.2/plugins/imuxsock/imuxsock.c に,以下の記述があります.+切り分けとして,まずは仕組みの切り分けから進めます. 
 + 
 +Linux の syslog(3) は,最終的には /dev/log のソケットに渡されますので,それが systemd-journald で握っているのか,それとも rsyslogd で握っているのかを確認します. 
 + 
 +さしあたり,rsyslogd のソースを確認してみます. 
 + 
 +rsyslog-8.4.2/plugins/imuxsock/imuxsock.c に,以下の記述があります.
  
 <code c rsyslog-8.4.2/plugins/imuxsock/imuxsock.c> <code c rsyslog-8.4.2/plugins/imuxsock/imuxsock.c>
行 63: 行 69:
 Linux では,標準ではログのためのソケットは /dev/log ですが,rsyslog では,sd_booted() の戻り値が真の場合,"/run/systemd/journal/socket" と言うファイルが存在して,さらにそれがソケットを指していれば,それをログのためのソケットとして使うようです. Linux では,標準ではログのためのソケットは /dev/log ですが,rsyslog では,sd_booted() の戻り値が真の場合,"/run/systemd/journal/socket" と言うファイルが存在して,さらにそれがソケットを指していれば,それをログのためのソケットとして使うようです.
  
 +sd_booted() の実体は,rsyslog-8.4.2/runtime/sd-daemon.c にあります.
 +
 +<code c rsyslog-8.4.2/runtime/sd-daemon.c>
 +_sd_export_ int sd_booted(void) {
 +#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
 +        return 0;
 +#else
 +        struct stat st;
 +
 +        /* We test whether the runtime unit file directory has been
 +         * created. This takes place in mount-setup.c, so is
 +         * guaranteed to happen very early during boot. */
 +
 +        if (lstat("/run/systemd/system/", &st) < 0)
 +                return 0;
 +
 +        return !!S_ISDIR(st.st_mode);
 +#endif
 +}
 +</code>
 +
 +"/run/systemd/system/" と言う名前のディレクトリがあるかどうかで決まります.
 +
 +要は,rsyslog は,自身で systemd が動いているかを "/run/systemd/system/" ディレクトリの有無で判定し,
 +もしこのディレクトリが存在しているならば,"/run/systemd/journal/socket" をログのためのソケットとして使うようです.
 +
 +と言うことを踏まえると,以下のようになるかと思います.
 +
 +  syslog(3)==>[/dev/log]==>systemd-journald==>[/run/systemd/journal/socket]==>rsyslogd
 +
 +経路がわかったところで,Debian jessie での systemd-journald と rsyslogd の棲み分けですが,
 +私がインストールした Debian jessie では,
 +"/run/log/journal/" ディレクトリは存在しますが,"/var/log/journal" ディレクトリは存在しません.
 +また,/etc/systemd/journald.conf には,特段の設定がないことから,systemd-journald の Storage=auto がデフォルトになっているはずです.
 +
 +Storage=auto は,"/var/log/journal" ディレクトリが無ければ作成せず,そのまま "/run/log/journal/" ディレクトリ側に記録するようです.
 +
 +http://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s15.html によれば,"/run" ディレクトリは,起動してからのシステム情報の可変データを格納する事が目的のディレクトリです.
 +
 +上記のことから,Debian jessie は,標準では systemd-journald は起動してからの内容を記録しており,永続的なログの記録は,systemd-journald 経由でこれまでどおり rsyslogd が行っていると言えます.
 +
 +もし,systemd-journald で永続的に記録させたいならば,"/var/log/journal" ディレクトリを作成し,アクセス権を適宜設定すれば良いと思います.
  
debian/debiantips.1442930939.txt.gz · 最終更新: 2015-09-22 23:08 by tosihisa@netfort.gr.jp