
ただインストールしました。ハエージェント私のテストサーバーから。
システムログの代わりにローカルファイルにログを書き込む方法はありますか?
これは単なるテストのため、ポートを開いたり、すべてのテストデータでシステムログを複雑にしたくありません。
残念ながら、私が見つけることができる唯一の情報は、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 &
おそらくファイルに>
パイピングしてから、同じファイルにパイピングすることがわかります。最後に、プロセスはバックグラウンドに配置されます。stdout
haproxy.log
2>&1
stderr
&
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
最後に、セキュリティ強化が有効になっている場合は、ログファイルのコンテキストとその親ディレクトリを調整する必要があるかもしれないことを指摘したいと思います。
幸運を祈ります:)。
ジャカリア。