序章

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

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

  • systemctlsystemdサービスマネージャーを介してLinuxサービスを制御および操作するために使用されます。
  • journalctlsystemdによって生成されたログを照会および表示するために使用されます。
  • haproxy-トラブルシューティングの際、このコマンドはHAProxyの設定を確認するために使用されます。
  • /var/log/haproxy.log-このファイルには、サーバーによって処理されているTCPおよびHTTPトラフィックの詳細を示すHAProxy自体からのログエントリが含まれています。

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

systemctlHAProxyのコマンド

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

  1. 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コマンドを使用してさらにトラブルシューティングを行うことができます。

journalctlHAProxyのコマンド

systemdログでHAProxyを検査するには、journalctlコマンドを使用できます。 HAProxyのsystemdログは通常、HAProxyプロセスの開始または管理に問題があるかどうかを示します。

これらのログは、HAProxyのリクエストログおよびエラーログとは別のものです。 journalctlは、systemdからのログを表示します。このログには、起動からシャットダウンまでのHAProxyサービス自体と、途中で発生する可能性のあるプロセスエラーが記述されています。

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

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

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設定の問題をトラブルシューティングするには、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はそれを検出し、問題について通知しようとします。

たとえば、haproxy.cfgbindディレクティブを間違った場所で使用しようとすると、次のようなメッセージが表示されます。

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のトラブルシューティングを行う場合は、taillessなどのツールを使用して/var/log/haproxy.logのエラーを調べてください。 たとえば、tailを使用してログの最後の2行を表示するには、次のコマンドを実行します。

  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サーバーの状態を調べます。 さらに詳しい情報が必要な場合は、journalctlコマンドを使用して、HAProxyのsystemdログを調べてください。 journalctlを確認しても問題が解決しない場合は、haproxy -c -f /etc/haproxy/haproxy.cfgを使用してHAProxyの設定をテストすることが次のステップです。 最後に、詳細なトラブルシューティングのために、HAProxyのログファイルを調べると、通常、有用な診断メッセージとエラーコードとともに特定のエラーが示されます。

このシリーズの残りのチュートリアルでは、HAProxyを使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。