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、あなたは正しいです。私は過去の行動に見当違いでした。最近のリリースではブロックされないため、この文は意見が分かれていました(そして間違っていました)。答えを編集しました。ありがとうございます!

回答

ユーザーのホームディレクトリで設定しようとしましたが、haproxyに権限がありませんユーザーのホームディレクトリにアクセスすると、問題が発生します。

代わりに、別の場所で試して、/var/<directory>

コメント

  • sudo touch /var/log/ha.logを試し、log /var/log/ha.log local0を設定しましたが、上記と同じエラーが発生しましたconnection refused
  • ログで、最後にlocal0を指定した理由は何ですか?
  • 省略しようとしましたが、再起動するとエラー'log' expects <address> and <facility> as arguments.が発生したため、そこに何かが必要でした。指示に従って<facility> must be one of the 24 standard syslog facilities(これは問題の一部である可能性があります)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です