一般的なHAProxyエラーのトラブルシューティング方法
序章
3つの主要なコマンドと、HAProxyエラーのトラブルシューティングを開始するために使用できる共通のログの場所があります。 通常、HAProxyのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。
ほとんどのLinuxディストリビューションでHAProxyのトラブルシューティングに一般的に使用するコマンドとログは次のとおりです。
systemctl
-Linuxサービスを介して制御および対話するために使用されますsystemd
サービスマネージャ。journalctl
-によって生成されたログを照会および表示するために使用されますsystemd
.haproxy
-トラブルシューティング時に、このコマンドを使用してHAProxyの設定を確認します。/var/log/haproxy.log
-このファイルには、サーバーによって処理されているTCPおよびHTTPトラフィックの詳細を示すHAProxy自体からのログエントリが含まれています。
これらのコマンド、それらの使用方法、およびエラーに関する追加情報を見つけることができるHAProxyのログについては、次のセクションでさらに詳しく説明します。
systemctl
HAProxyのコマンド
を使用して一般的なHAProxyエラーをトラブルシューティングするには systemd
サービスマネージャーの最初のステップは、システム上のHAProxyプロセスの状態を検査することです。 以下 systemctl
コマンドはクエリを実行します systemd
ほとんどのLinuxディストリビューションでのHAProxyのプロセスの状態。
- sudo systemctl status haproxy.service -l --no-pager
The -l
フラグは、出力が切り捨てられたり省略されたりしないようにします。 The --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
指図。 The systemd
HAProxyのログは通常、HAProxyプロセスの開始または管理に問題があるかどうかを示します。
これらのログは、HAProxyのリクエストログおよびエラーログとは別のものです。 journalctl
からのログを表示します systemd
起動からシャットダウンまでのHAProxyサービス自体と、途中で発生する可能性のあるプロセスエラーについて説明します。
- sudo journalctl -u haproxy.service --since today --no-pager
The --since today
フラグは、コマンドの出力を、当日の00:00:00から始まるエントリをログに記録するように制限します。 このオプションを使用すると、エラーをチェックするときに調べる必要のあるログエントリの量を制限するのに役立ちます。 次のような出力を受け取るはずです( Starting
と Started
Linuxディストリビューションに応じた行):
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 -c
指図。 このツールは、サーバーを起動する前に、HAProxyファイルを解析し、エラーや不足している設定を検出します。
Ubuntu、Debian、CentOS、およびFedoraベースのディストリビューションでこのようなコマンドを実行します。 別のファイル名または場所を使用している場合は、必ず構成ファイルへのパスを変更してください。
- sudo haproxy -c -f /etc/haproxy/haproxy.cfg
HAProxy構成が機能すると、次のような出力が得られます。
OutputConfiguration file is valid
タイプミスや誤ったディレクティブなど、HAProxy設定にエラーがある場合は、 haproxy -c
それを検出し、問題について通知しようとします。
たとえば、 bind
のディレクティブ haproxy.cfg
間違った場所にあると、次のようなメッセージが表示されます。
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のトラブルシューティングを行う場合は、次のことを確認してください。 /var/log/haproxy.log
次のようなツールを使用したエラーの場合 tail
また less
. たとえば、を使用してログの最後の2行を表示するには tail
、次のコマンドを実行します。
- 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サーバーの状態を調べます。 さらに情報が必要な場合は、 systemd
を使用したHAProxyのログ journalctl
指図。 チェックしても問題が解決しない場合 journalctl
、を使用してHAProxyの構成をテストする haproxy -c -f /etc/haproxy/haproxy.cfg
次のステップです。 最後に、詳細なトラブルシューティングのために、HAProxyのログファイルを調べると、通常、有用な診断メッセージとエラーコードとともに特定のエラーが示されます。
このシリーズの残りのチュートリアルでは、HAProxyを使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。