開発者ドキュメント

一般的なHAProxyエラーのトラブルシューティング方法

序章

3つの主要なコマンドと、HAProxyエラーのトラブルシューティングを開始するために使用できる共通のログの場所があります。 通常、HAProxyのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。

ほとんどのLinuxディストリビューションでHAProxyのトラブルシューティングに一般的に使用するコマンドとログは次のとおりです。

これらのコマンド、それらの使用方法、およびエラーに関する追加情報を見つけることができるHAProxyのログについては、次のセクションでさらに詳しく説明します。

systemctl HAProxyのコマンド

を使用して一般的なHAProxyエラーをトラブルシューティングするには systemd サービスマネージャーの最初のステップは、システム上のHAProxyプロセスの状態を検査することです。 以下 systemctl コマンドはクエリを実行します systemd ほとんどのLinuxディストリビューションでのHAProxyのプロセスの状態。

  1. 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サービス自体と、途中で発生する可能性のあるプロセスエラーについて説明します。

  1. sudo journalctl -u haproxy.service --since today --no-pager

The --since today フラグは、コマンドの出力を、当日の00:00:00から始まるエントリをログに記録するように制限します。 このオプションを使用すると、エラーをチェックするときに調べる必要のあるログエントリの量を制限するのに役立ちます。 次のような出力を受け取るはずです( StartingStarted Linuxディストリビューションに応じた行):

Output
Aug 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 Output
Aug 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ベースのディストリビューションでこのようなコマンドを実行します。 別のファイル名または場所を使用している場合は、必ず構成ファイルへのパスを変更してください。

  1. sudo haproxy -c -f /etc/haproxy/haproxy.cfg

HAProxy構成が機能すると、次のような出力が得られます。

Output
Configuration 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、次のコマンドを実行します。

  1. sudo tail -n 2 /var/log/haproxy.log

エラーの例は、HAProxyサーバーの実行に使用しているLinuxディストリビューションに関係なく、次の行のようになります。

Log Examples
Aug 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を使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。

モバイルバージョンを終了