web-dev-qa-db-ja.com

HAProxyは、一部のログメッセージのHost_header部分を切り捨てます

ログファイルをデータベースにチャックする特別な自家製デーモンにログを記録するように構成されたHAProxyインスタンスがあります。 Host_headerフィールドが特別な理由なしに切り捨てられるいくつかのログメッセージでいくつかの問題が発生しました。たとえば、次の代わりに:

56:34 haproxy[892]: 1.2.3.4:17907 [14/May/2012:13:56:33.999] app.prod app.prod/webp01 0/0/0/161/524 200 33627 - - --NI 0/0/0/0/0 0/0 {application.example.com} "GET /?feed=rss2 HTTP/1.0"

そうですか:

56:34 haproxy[892]: 1.2.3.4:17907 [14/May/2012:13:56:33.999] app.prod app.prod/webp01 0/0/0/161/524 200 33627 - - --NI 0/0/0/0/0 0/0 {application.examp} "GET /?feed=rss2 HTTP/1.0"

Host_headerがapplication.example.comからapplication.exampに切り捨てられていることに注意してください。

これは、これらのログを介してファームしようとする作業にいくつかのスパナを投げていますが、これが起こっている理由はありますか?

HAProxyのバージョンは1.4.18-0ubuntu1でUbuntu12.04で実行されています。

3
growse

これらはまったく同じタイムスタンプとタイミングを持っているので、実際の例は含まれていないと思います。

これらの例がない場合、私が考えることができる最善の方法は、次のようなものを使用して、これらのヘッダーフィールドの長さを手動で設定してみることです。

キャプチャリクエストヘッダーホストlen50 

また、syslogトラフィックはUDPであるため、ある程度の破損が予想されることにも注意してください(ただし、これはそれよりも具体的に聞こえます)。 HAProxyには最大長の設定もあります。私はこれを増やすことを決して続けませんでしたが、ここで試してみたい場合は、HAProxyの作成者とのやり取りです。

> HAProxyによって送信されるsyslogメッセージの長さを増やすことはできますか?
> 
>変更するのと同じくらい簡単ですか:
> #define MAX_SYSLOG_LEN 1024 
> In 
> include/types/log.h 
> 
>それともそれ以上のものがありますか?
 
試すことはできますが、syslogサーバーによっては何でもできる場合があります。
これらのメッセージを受け入れるものもあれば、行を切り捨てるものもあります、YMMV。 "
4
Kyle Brandt

私がコードで見ていることから、これはまったく不可能であるはずです(proto_http.cのcapture_headers()をチェックしてください)。ヘッダーは、要求された長さに切り捨てられます。このため、同じフロントエンドを通過する同じホストのリクエストでこの動作が見られることが確実な場合、私が考えることができる唯一の可能性は、2つのヘッダーフィールドがあり、1つは短縮された値であり、もう1つは通常のもので、そのhaproxyは最初のものだけをログに記録し、サーバーは最後のものを使用します。

3
Willy Tarreau