一般的なHAProxyエラーのトラブルシューティング方法
序章
3つの主要なコマンドと、HAProxyエラーのトラブルシューティングを開始するために使用できる共通のログの場所があります。 通常、HAProxyのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。
ほとんどのLinuxディストリビューションでHAProxyのトラブルシューティングに一般的に使用するコマンドとログは次のとおりです。
systemctl
-systemd
サービスマネージャーを介してLinuxサービスを制御および操作するために使用されます。journalctl
-systemd
によって生成されたログを照会および表示するために使用されます。haproxy
-トラブルシューティングの際、このコマンドはHAProxyの設定を確認するために使用されます。/var/log/haproxy.log
-このファイルには、サーバーによって処理されているTCPおよびHTTPトラフィックの詳細を示すHAProxy自体からのログエントリが含まれています。
これらのコマンド、それらの使用方法、およびエラーに関する追加情報を見つけることができるHAProxyのログについては、次のセクションでさらに詳しく説明します。
systemctl
HAProxyのコマンド
systemd
サービスマネージャーを使用して一般的なHAProxyエラーのトラブルシューティングを行うための最初のステップは、システム上のHAProxyプロセスの状態を検査することです。 次のsystemctl
コマンドは、ほとんどのLinuxディストリビューションでのHAProxyのプロセスの状態をsystemd
に照会します。
sudo systemctl status haproxy.service -l --no-pager
-l
フラグは、出力が切り捨てられたり省略されたりしないようにします。 --no-pager
フラグを使用すると、出力を表示するためにユーザー側での操作を必要とせずに、出力が端末に直接送信されるようになります。 --no-pager
フラグを省略すると、矢印キーまたはページの上下キーを使用して出力をスクロールできます。 ポケットベルを終了するには、q
キーを使用します。 次のような出力を受け取るはずです。
Output● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-08-20 19:30:11 UTC; 5s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 487 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS) Main PID: 488 (haproxy) Tasks: 2 (limit: 2344) . . . Aug 19 21:31:46 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.
使用しているLinuxディストリビューションによって出力が若干異なる場合がありますが、いずれの場合も、出力のActive
行をメモしてください。 HAProxyサーバーが出力例で強調表示されているようにactive (running)
を表示しないが、表示されるはずの場合は、エラーが発生している可能性があります。 通常、問題がある場合は、出力に次のような行が表示されます(強調表示されたfailed
の部分に注意してください)。
Example Error Output Active: failed (Result: exit-code) since Thu 2020-08-20 19:32:26 UTC; 6s ago
HAProxyプロセスまたは構成に問題がある場合は、journalctl
コマンドを使用してさらにトラブルシューティングを行うことができます。
journalctl
HAProxyのコマンド
systemd
ログでHAProxyを検査するには、journalctl
コマンドを使用できます。 HAProxyのsystemd
ログは通常、HAProxyプロセスの開始または管理に問題があるかどうかを示します。
これらのログは、HAProxyのリクエストログおよびエラーログとは別のものです。 journalctl
は、systemd
からのログを表示します。このログには、起動からシャットダウンまでのHAProxyサービス自体と、途中で発生する可能性のあるプロセスエラーが記述されています。
sudo journalctl -u haproxy.service --since today --no-pager
--since today
フラグは、コマンドの出力を、当日の00:00:00から始まるエントリをログに記録するように制限します。 このオプションを使用すると、エラーをチェックするときに調べる必要のあるログエントリの量を制限するのに役立ちます。 次のような出力を受け取るはずです(Linuxディストリビューションによっては、Starting
行とStarted
行の間に数行余分にある場合があります)。
OutputAug 20 19:37:08 d6cdd0c71489 systemd[1]: Starting HAProxy Load Balancer... . . . Aug 20 19:37:08 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.
エラーが発生した場合、出力に次のような行が表示されます。Linuxディストリビューション間の主な違いは、強調表示されたyourhostname
部分です。
Example Error OutputAug 20 19:32:25 yourhostname systemd[1]: Failed to start HAProxy Load Balancer.
前の例のようにHAProxyサーバーのjournalctl
ログにエラーがある場合、考えられる問題をトラブルシューティングする次のステップは、haproxy
コマンドラインツールを使用してHAProxyの構成を調査することです。
haproxy
を使用したトラブルシューティング
HAProxy設定の問題をトラブルシューティングするには、haproxy -c
コマンドを使用します。 このツールは、サーバーを起動する前に、HAProxyファイルを解析し、エラーや不足している設定を検出します。
Ubuntu、Debian、CentOS、およびFedoraベースのディストリビューションでこのようなコマンドを実行します。 別のファイル名または場所を使用している場合は、必ず構成ファイルへのパスを変更してください。
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
HAProxy構成が機能すると、次のような出力が得られます。
OutputConfiguration file is valid
タイプミスや誤ったディレクティブなど、HAProxy構成にエラーがある場合、haproxy -c
はそれを検出し、問題について通知しようとします。
たとえば、haproxy.cfg
のbind
ディレクティブを間違った場所で使用しようとすると、次のようなメッセージが表示されます。
Example Error Output[ALERT] 232/194354 (199) : parsing [/etc/haproxy/haproxy.cfg:13] : unknown keyword 'bind' in 'global' section [ALERT] 232/194354 (199) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg [ALERT] 232/194354 (199) : Fatal errors found in configuration.
この例では、bind
ディレクティブがglobal
構成セクション内に誤って配置されているため、HAProxyはunknown keyword
エラーを生成します。 メッセージには行番号13
も含まれているため、ファイルを検索しなくても、ファイルを編集して誤った行を修正または削除できます。
haproxy -c
を使用してエラーを検出および修正する方法を学ぶことは、既存のエラーのトラブルシューティングを行う場合、またはエラーを含む可能性のある編集済みの構成でHAProxyをリロードする前に役立ちます。
HAProxyログファイル
HAProxyログファイルは、トラブルシューティングに非常に役立つリソースです。 通常、ブラウザまたはその他のHTTPクライアントで発生したエラーは、HAProxyのログに対応するエントリがあります。 HAProxyは、構成やその他のデバッグ情報に関連するエラーをログファイルに出力する場合もあります。
UbuntuおよびDebianベースのLinuxディストリビューションでは、haproxy
パッケージには、/var/log/haproxy.log
のログ出力を構成するスクリプトが含まれています。
CentOS、Fedora、およびその他のRedHatから派生したLinuxディストリビューションでは、haproxy
はデフォルトではログファイルに出力されません。 HAProxy出力ログを/var/log/haproxy.log
に記録するには、このクイックスタートチュートリアル CentOS8でRsyslogを使用してHAProxyログを構成する方法に従ってください。
ログファイルを使用してHAProxyのトラブルシューティングを行う場合は、tail
やless
などのツールを使用して/var/log/haproxy.log
のエラーを調べてください。 たとえば、tail
を使用してログの最後の2行を表示するには、次のコマンドを実行します。
sudo tail -n 2 /var/log/haproxy.log
エラーの例は、HAProxyサーバーの実行に使用しているLinuxディストリビューションに関係なく、次の行のようになります。
Log ExamplesAug 20 19:36:21 d6cdd0c71489 haproxy[19202]: [ALERT] 258/134605 (19202) : Proxy 'app', server 'app1' [/etc/haproxy/haproxy.cfg:88] verify is enabled by default but no CA file specified. If you're running on a LAN where you're certain to trust the server's certificate, please set an explicit 'verify none' statement on the 'server' line, or use 'ssl-server-verify none' in the global section to disable server-side verifications by default. Aug 20 19:36:22 d6cdd0c71489 haproxy[4451]: 203.0.113.1:54428 [20/Aug/2020:19:36:22.288] main app/<NOSRV> 0/-1/-1/-1/1 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
これらの例の行は、説明のみを目的としています。 HAProxyサーバーでエラーを診断している場合、ログの行の内容がこれらとは異なる可能性があります。 一部の行には、成功応答およびその他の重要ではない診断エントリが含まれます。
Linuxディストリビューションに関係なく、HAProxyログの行の形式には、要求IPとバックエンドサーバーのステータスとともに、クライアントに返されるHTTPステータスコードが含まれます。
HAProxyサーバーで問題を引き起こしている可能性があるものがわかったら、問題の調査とトラブルシューティングを続けることができます。 HTTPステータスコードとテキストの説明は、問題の考えられる原因の範囲を絞り込むために使用できる明示的で具体的な用語を提供するため、特に便利です。
結論
HAProxyエラーのトラブルシューティングは、サービス自体のエラーの診断から、モジュールの誤って構成されたオプションの特定、またはカスタマイズされたアクセス制御ルールの詳細な調査にまで及ぶ可能性があります。 HAProxyの問題を診断するためのこの紹介では、エラーの考えられる原因を絞り込むために多くのユーティリティを使用する方法を説明しました。 通常、これらのユーティリティは同じ順序で使用しますが、いつでもスキップすることも、問題の概要がわかっている場合はログの調査から直接開始することもできます。
ただし、トラブルシューティングの一般的な手順として、これらのツールを説明されている順序で系統的に使用することが役立ちます。 systemctl
でトラブルシューティングを開始して、HAProxyサーバーの状態を調べます。 さらに詳しい情報が必要な場合は、journalctl
コマンドを使用して、HAProxyのsystemd
ログを調べてください。 journalctl
を確認しても問題が解決しない場合は、haproxy -c -f /etc/haproxy/haproxy.cfg
を使用してHAProxyの設定をテストすることが次のステップです。 最後に、詳細なトラブルシューティングのために、HAProxyのログファイルを調べると、通常、有用な診断メッセージとエラーコードとともに特定のエラーが示されます。
このシリーズの残りのチュートリアルでは、HAProxyを使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。