HAProxy の背後にある Rails アプリを使用しています。HAProxy サーバーからの ping からの Rails ログをすべて無視したいと考えています。サーバーは 1 秒に 1 回程度の ping を実行しており、実際にログ ファイルが乱雑になっています。
3 に答える
これはテストしていませんが、機能するはずです。
class Rails::Rack::Logger
def call_with_filter(env)
if env['REMOTE_ADDR'] == '10.0.0.1'
@app.call(env)
else
call_without_filter(env)
end
end
alias_method_chain :call, :filter
end
オリジナルについては、railties-3.0.7 / lib / rails / Rack/logger.rbを参照してください。
私が最終的に採用したソリューションは、比較的ローテクなものでした。
HAProxy を使用する目的は、負荷を分散することだけではなく、トラフィックを誘導しているノードが実際に稼働していることを確認することです。これは、HAProxy がサーバーにアクセスして稼働しているかどうかを確認するだけでなく、Nginx と Passenger が稼働して機能していることをテストする必要があることを意味します。
Rails プロジェクトの公開アセットに静的テキスト ファイルを配置し、HAProxy にそのファイルをヒットさせます。ファイルは完全なスタックによって提供され、サービスが稼働していることを示す適切な指標になります。公開資産であるため、ヒットはログに表示されず、スパム行為は停止されます。
これは Rails スタックを深くテストするものではありませんが、コード化されたソリューションよりも実装にかかる時間は短く、アプリケーションをさらに複雑にすることはなく、将来のアプリケーションに組み込むことができます。
私が選んだ解決策は、もう少し体系的なものでした。パブリック ディレクトリに静的なテキスト ファイルを作成し、これを ping の場所として使用するように HAProxy を切り替えました。ログはなく、コード ソリューションほど複雑ではありません。
上記の例を試して動作させることができましたが、この問題に対してモンキー パッチを適用する必要はないようですが、要件がもう少し複雑な場合 (つまり、HAProxy が特定のコントローラーをヒットする必要がある場合) は、 dローマンの ソリューションを選ぶ