HAProxyはファイルロギングをサポートしていますか?

HAProxyはファイルロギングをサポートしていますか?

ただインストールしました。ハエージェント私のテストサーバーから。

システムログの代わりにローカルファイルにログを書き込む方法はありますか?

これは単なるテストのため、ポートを開いたり、すべてのテストデータでシステムログを複雑にしたくありません。

残念ながら、私が見つけることができる唯一の情報は、syslogサーバーへのログ記録に関するものです。

私は以下を使用しようとしています:

log /home/user/ha.log local0

私の構成では。しかし、これは私に言います:

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)

再起動するとき。それでファイルを作成しtouch /home/user/ha.logて再起動しましたが、その時点で次のような結果が得られました。

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)

これは可能ですか、それとも私のテストデータを見るためにsyslogなどを設定する必要がありますか?

答え1

Haproxyはファイルロギングをまったくサポートしていません。文書に記載されているように(https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log)、 "log"ステートメントはアドレスを最初のパラメータとして使用します。ファイルの場合はUnixソケットで、HAProxyはsyslog形式でそのソケットと通信します。 Haproxy は、ファイル書き込みではなく要求プロキシを担当し、ログファイルの書き込みを syslog に委任するため、このように設計されています。コンピュータを台無しにしたくない場合は、logstashをインストールして次のコマンドを実行し、haproxy.cfgに次のものを logstash -e 'input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }' 追加してテストできます。 log /tmp/haprxoy_log.sock

答え2

以下の haproxy ログ構成ファイルを変更して、/etc/rsyslog.d/そのファイルが目的のパスを指すようにすることができます。他のディストリビューションについてはよくわかりません。私はDebianを使います。私は代わりに/etc/rsyslog.d/49-haproxy.conf次を指しました/var/log/haproxy/haproxy.log

# Create an additional socket in haproxy's chroot in order to allow logging via
# /dev/log to chroot'ed HAProxy processes
$AddUnixListenSocket /var/lib/haproxy/dev/log

# Send HAProxy messages to a dedicated logfile
:programname,startswith,"haproxy" /var/log/haproxy/haproxy.log

また、ログパスを/etc/logrotate.d/haproxy新しいパスに更新する必要があります。この方法では、新しく設定されたパスでログファイルを回転して圧縮できますgzip

その後、rsyslog.service を再起動します。

sudo systemctl restart rsyslog.service

これでhaproxy.log.*ファイルが/var/log/haproxy/ディレクトリに配置されます。

答え3

バージョン以降1.9 HAProxyのサポートstdoutとにログインしてくださいstderr

これを念頭に置いてファイルにパイプするのはとても簡単です。

# change haproxy.cfg file with the following
global
    log stdout local0 debug

defaults
    log global
    option httplog

その後、次のように簡単にHAProxyを実行できます。

haproxy -f haproxy.cfg > haproxy.log 2>&1 &

おそらくファイルに>パイピングしてから、同じファイルにパイピングすることがわかります。最後に、プロセスはバックグラウンドに配置されます。stdouthaproxy.log2>&1stderr&

haproxyもう一度ステップを実行して、次の手順を実行して古いインスタンスを終了するスクリプトを設定できます。

#!/bin/bash
# mini launcher
kill -9 `cat /home/user/haproxy.pid`
/home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 &
echo $! > /home/user/haproxy.pid

ご存知のように難しいことです...お勧めできません。

編集:ブロックイベントであったファイルにログを記録するため、特にHAProxyなどの場合はお勧めできません。 HAProxyチームは、上記のリンクされたリリースポストでこれが次のようになることを非常に明確に明らかにしました。もうそうではありません。

私たちはこのような多くの要求を受け取り、それを実装する最良の方法(非ブロック)を計画するのに時間を費やし、解決策を見つけたことを発表することを嬉しく思います!

答え4

haproxyが特定のファイルにログを記録できるように、ログサービスを作成する必要があります。 EL7とHAProxy 2.7-dev5で私に役立つ次のガイドラインを使用してください。

ヤムrsyslogのインストール

vi /etc/rsyslog.d/haproxy.conf

$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

local2.*        /logdir/haproxy
local3.*        /logdir/haproxy-access_log

systemctl 再起動 rsyslog && ldconfig

vi /../../haproxy.cfg

global
        log stderr local0 info
        log 127.0.0.1 local2 notice
        log 127.0.0.1 local3

defaults 
        log global
        option httplog

systemctl 再起動 haproxy

不要なスペース消費を避けるために、ログローテーションサービスを設定することを忘れないでください。次の作業を行う必要があります。

vi /etc/logrotate.d/haproxy

/logdir/logdir/haproxy-access_log {
  weekly
  rotate 7
  missingok
  size=5M
  notifempty
  dateext
  dateformat -%d%m%Y
  compress
  create 0644 logfileowner logfileowner
  su logfileowner logfileowner
  mail email@torecievelogs
  postrotate
    /usr/bin/systemctl reload haproxy
  endscript
}

また、次の2つのコマンドを実行して、ログの回転に問題がないかどうかを確認してください。 -

logrotate --force /etc/logrotate.d/haproxy
grep logrotate /var/log/audit/audit.log | audit2why

最後に、セキュリティ強化が有効になっている場合は、ログファイルのコンテキストとその親ディレクトリを調整する必要があるかもしれないことを指摘したいと思います。

幸運を祈ります:)。

ジャカリア。

関連情報