Daily Archives: February 5, 2021

rsyslog in docker environment

在docker中,預設沒有啟用systemd所需要的 CAP_SYS_ADMIN  privileged capabilities,因此在執行服務時,一般採用直接執行process的方式而不透過systemd控制(systemctl) 不過rsyslogd在CentOS預設是透過journald讀取syslog,journald在systemd的架構下主要處理來自systemd service的stdout/stderr、以及syslog(透過/run/systemd/journal/dev-log,並將/dev/log symlink到前述位置),以及處理systemd forward log到 /run/systemd/journal/syslog (須設定ForwardToSyslog開啟,新版本的rsyslogd已經直接讀取journal,不再使用此方式) 如果要跑journald則需要對docker另外開一些capabilites(可參考systemd的service裡面的CapabilityBoundingSet設定,雖然部分應該是處理kern log),另外要處理listen unix socket的設定(描述在/lib/systemd/system/systemd-journald.socket、/lib/systemd/system/syslog.socket) ,因此最簡單的方式就是直接讓rsyslog listen unix socket /dev/log,並且如果不用systemd,單純使用syslog的話沒有理由需要透過journald來處理。 在/etc/rsyslog.conf 將所有journald相關的設定註解,並且開啟imuxsock 並且刪掉 /etc/rsyslog.d/listen.conf 啟動rsyslogd就可以正常運行將syslog寫入到對應的log檔 以 logger測試 值得一提的是 因為透過imuxsock 模組讀取log,是透過 /dev/log unix socket 讀取log 而這個socket是由 rsyslogd產生的,logger預設也是寫入此socket 可參考 util-linux/logger.c 另外docker執行時,一般習慣上是用foreground執行,rsyslogd預設是會跑在背景,並且會做fork,這對於在整合一些process manager如supervisor或是chapterone的工具無法正確追蹤process是否正確執行,或是要設定專門的rsyslog … Continue reading

Posted in System Administration | Leave a comment