CentOS 7 の yum でさくっとインストールできるバージョンで試しています。
- haproxy-1.5.14-3.el7.x86_64
ログの宛先の設定
chroot しない場合
chroot しない場合は /dev/log を指定すれば簡単でした。
/etc/haproxy/haproxy.cfg
global
log /dev/log local2
#chroot /var/lib/haproxy
:
chroot する場合で UDP を使う
chroot すると /dev/log が haproxy から見えなくなってしまいます。ので、UDP にします。
CentOS 7 の rsyslog はデフォだと UDP でリッスンしていないので、下記のように設定を変更して UDP を有効にします。
/etc/rsyslog.d/udp.conf
$ModLoad imudp $UDPServerRun 514
haproxy.cfg でログの宛先に 127.0.0.1 を指定するのですが、このとき log-send-hostname も指定しなければログのホスト名が localhost になってしまったので、これも一緒に指定します。
/etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
log-send-hostname
chroot /var/lib/haproxy
:
chroot する先に /dev/log を mount する
chroot した先で /dev/log が見えればいいので・・うーん、mount --bind で作っておく?
sudo mkdir -p /var/lib/haproxy/dev/ sudo touch /var/lib/haproxy/dev/log sudo mount --bind /dev/log /var/lib/haproxy/dev/log
/etc/haproxy/haproxy.cfg
global
log /dev/log local2
chroot /var/lib/haproxy
:
うーん、これはちょっと無いかな・・
chroot する先に rsyslog にリッスンさせる
chroot する先で rsyslog がリッスンするように設定します。
/etc/rsyslog.d/haproxy.conf
$AddUnixListenSocket /var/lib/haproxy/dev/log
ディレクトリを作成します。あと、↑で mount --bind したままなら解除しておきます。
sudo umount /var/lib/haproxy/dev/log sudo rm -f /var/lib/haproxy/dev/log sudo mkdir -p /var/lib/haproxy/dev/
/etc/haproxy/haproxy.cfg
global
log /dev/log local2
chroot /var/lib/haproxy
:
ログを別ファイルに出力
↑の設定をしただけだとログが /var/log/messages に出てしまうので、rsyslog で別ファイルに書かれるように設定します。
/etc/rsyslog.d/haproxy.conf
:programname, isequal, "haproxy" /var/log/haproxy.log & stop
haproxy をインストールしたときに下記のようなログローテートも設定されていたので /var/log/haproxy.log に出力しておけばローテートも行われます。
/etc/logrotate.d/haproxy
/var/log/haproxy.log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
systemd のユニットファイルに書かれている /usr/sbin/haproxy-systemd-wrapper からもログが出力されるようなのですが、↑の設定だとそのログは /var/log/messages に書かれるままです。
haproxy-systemd-wrapper というタグで出力されるので、下記のようにすればそのログも /var/log/haproxy.log に出力されます。
/etc/rsyslog.d/haproxy.conf
:programname, isequal, "haproxy" /var/log/haproxy.log & stop :programname, isequal, "haproxy-systemd-wrapper" /var/log/haproxy.log & stop
もしくは、startswith でも良いと思います。
:programname, startswith, "haproxy" /var/log/haproxy.log & stop
さいごに
うーん、どの方法が良いのだろうか。。ググった感じでは UDP にしているのが多いっぽいけど。