haproxy をインストールしましたテストサーバー。
Syslogではなくローカルファイルにログを書き込む方法はありますか?
これはテスト専用なので、開き始めたくありません。ポート/すべてのテストデータでsyslogが乱雑になります。
残念ながら、私が見つけることができる唯一の情報は、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などを構成する必要がありますか?
コメント
- ありません' HAProxyはファイルにログを記録できると思いますが、これはディスクへの書き込みがブロック操作であるためだと思います。 Syslogを本当に使用したくないのはなぜですか?構成はそれほどトリッキーではありません。 'でない場合は、ローカル機能をHAProxyに割り当て、それらのエントリを他のsyslogファイル(またはネットワークストリーム)ではなく別のファイルに書き込むようにsyslogデーモンを構成できます。 HAProxyログが他のすべてのものと混同されないようにしたい。
回答
Haproxyは単にサポートしていませんファイルへのログ記録。ドキュメント( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log )に記載されているように、「log」ステートメントは最初のパラメータとしてその「safile、it」sa unixソケットとHAProxyがsyslog形式でこのソケットに話しかける場合。Haproxyはファイルの書き込みではなくリクエストのプロキシを担当するため、このように設計されており、ログファイルの書き込みをsyslogに委任します。 。マシンをいじりたくない場合は、たとえば、logstashをインストールして、 logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }"
を実行し、次を追加できます。 log /tmp/haprxoy_log.sock
In haproxy.cfgをテストしてください。
コメント
- I ' m get " E:パッケージlogstashが見つかりません"。 logstashはubuntuから削除されましたか?
- @ user568021 logstashはubuntuで提供されていないようですが、elastic(logstash 'のメンテナー)が適切なソースを提供します。また、logstashはJavaソフトウェアであるため、JRE(ubuntuが提供)で実行しているjarファイルをダウンロードすることで実行できる場合があります。
回答
/etc/rsyslog.d/
の下にあるhaproxyログ構成ファイルを変更して、ファイルが目的のパスを指すようにすることができます。他のディストリビューションについてはよくわかりません。私の場合、Debianを使用しています。/etc/rsyslog.d/49-haproxy.conf
を/var/log/haproxy/haproxy.log
、
/etc/logrotate.d/haproxy
のログパスも新しいパスに更新する必要があります。これにより、gzip
。
次に、rsyslog.serviceを再起動します。
sudo systemctl restart rsyslog.service
ここでhaproxy.log.*
ファイルは/var/log/haproxy/
ディレクトリにあります。
コメント
- 個別に作成するにはどうすればよいですか元のhaproxy.logに影響を与えずに/var/log/haproxy-errors.logのようなエラーをログに記録しますか?
回答
バージョン 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
も同じファイルに。プロセスをバックグラウンドで実行する&
で終わります。
より洗練されたスクリプトをセットアップして、
次のようにします:
#!/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チームは、上記のリンクされたリリース投稿で、これはもはや当てはまらないことを十分に明らかにしました。
このリクエストをかなり受け取り、ブロックせずに実装するための最良の方法を計画するのに時間を費やしました。これを発表できることをうれしく思います。解決策を見つけました!
コメント
- stdout / errにログを記録する理由"推奨されません"?これはあなたの意見ですか、それとも問題に関する公式のドキュメントがありますか?
- @Florian、あなたは正しいです。私は過去の行動に見当違いでした。最近のリリースではブロックされないため、この文は意見が分かれていました(そして間違っていました)。答えを編集しました。ありがとうございます!