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 にしているのが多いっぽいけど。