ユーザーがWebサイトにアクセスするとき、さまざまなことが起こり得ます。 ユーザーの要求がサーバーに到達しない場合さえあり、潜在的に、すべてが OK であるという誤った肯定を与えてしまうことがあります。 Web サイトが 1 つのサーバーだけを使用していた時代はとうに過ぎ去りました。 今日の分散世界では、ロード バランサーの背後に多くのサーバーがあり、Web サイトのユーザー負荷を分散しています。
では、ユーザーとサーバーの間ですべてが順調に進んでいるかどうかを知るにはどうしたらよいのでしょうか。 ロード バランサーと HAProxy のようなプロキシ サーバーが出力するログは、異なる視点を与えてくれます。 例えば、ユーザーのリクエストにどれだけの時間がかかったか、どれだけのリクエストが失敗したかを知ることができる。 この情報は貴重で、実環境でインシデントをトラブルシューティングするときに、より多くの手がかりを与えてくれます。
今日の投稿では、HAProxy でログがどのように動作するか、ログ設定がどのように動作するか、ログを処理する方法、および、大きなログ ファイル サイズによるサーバーのストレージ不足を避ける方法について、簡単に説明したいと思います。
HAProxy でログはどのように動作するか
HAProxy をインストールすると、このツールが記録するログをどのように扱うかを設定することができます。 たとえば、ログを異なる場所に同時に送信するように HAProxy を設定することができます。 あるチームはリアルタイムでログを取得する必要があり、別のチームはログを使用して過去の傾向を特定することができるかもしれません。 あるいは、単にログを集中型ログ ストレージ ソリューションのような別の場所に移行したい場合もあります。
通常、ツールのログを構成する場合、ログはローカル ディスクに記録されます。 しかし、多くのログ書き込み操作があるようなシナリオでは、これは逆効果になることがあります。 パフォーマンスが低下し、ログのいくつかを見逃してしまうかもしれない。 デフォルトでは、HAProxy には、ログをネットワーク経由で送信したり、ファイルに直接書き込むよりも高速な、ソケットにログを書き込む設定が付属しています。 この投稿で基本を学んだら、Cookie や HTTP ヘッダーをキャプチャする方法など、他のトピックにすぐに深く潜り込むことができます。 見たいログのタイプや冗長性を設定することもできます。
まだインストールしていない場合は、HAProxy をインストールします。 Ubuntu では、この方法で行うことができます:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Configuring Logging for Syslog
デフォルトでは、HAProxy 設定ファイルには、グローバルとデフォルトという 2 つのセクションがあります。 グローバルセクションでは、セキュリティ、パフォーマンス、およびログの宛先などの低レベルの機能を設定します。 defaults セクションでは、フロントエンドやバックエンドのような、以下の他のすべてのプロキシセクションに適用される設定を行います。 目標は、繰り返しを避けることです。 HAProxy Web サイトの投稿に各セクションの詳細が記載されていますが、私たちの場合は、global と defaults セクションで十分です。
デフォルトの設定ファイル (/etc/haproxy/haproxy.cfg) では、ロギングについて次のようなものがあります:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
「/dev/log/」ディレクトリを見ると、systemd の journal へのシンボリックリンクがあり、これはログが syslog に送信されていることを意味します:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Ubuntu 18.04 など最近のバージョンでは rsyslog が導入されています。 そうでない場合は、サーバーで “sudo apt install -y rsyslog” というコマンドを実行してインストールする必要があります。 そして、rsyslogフォルダの設定を見てください。 私の場合、次のようになります。
ls -la /etc/rsyslog.d/total 24drwxr-xr-x 2 root root 4096 Aug 21 22:41 .drwxr-xr-x 90 root root 4096 Aug 21 22:41 ..-rw-r--r-- 1 root root 314 Aug 15 2017 20-ufw.conf-rw-r--r-- 1 root root 255 Jun 3 02:08 21-cloudinit.conf-rw-r--r-- 1 root root 282 Jun 22 08:41 49-haproxy.conf-rw-r--r-- 1 root root 1124 Jan 30 2018 50-default.conf
「49-haproxy.conf」という名前のファイルがありますが、これはHAProxyロギング用の設定が存在する場所です。 このようなファイルがない場合は、作成してください。 以下はデフォルトの内容です:
$ cat /etc/rsyslog.d/49-haproxy.conf# Create an additional socket in haproxy's chroot in order to allow logging via# /dev/log to chroot'ed HAProxy processes$AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfileif $programname startswith 'haproxy' then /var/log/haproxy.log&~
ログは /var/log/haproxy.log というファイルに書き込まれることがわかりますね。 ここから先は、これらのログを使って何かをするのはあなたの仕事です。 しかし、ログを見る前に、rsyslog と HAProxy を再起動する必要があるかもしれません。
sudo service rsyslog restartsudo service haproxy restart
少なくとも、次のような初期ログが表示されるはずです:
$ cat /var/log/haproxy.logAug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Exiting Master process...Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Current worker 1815 exited with code 143Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : All workers exited. Exiting... (143)
ログが表示されたら、次はそれを使って何かをする番です。 haproxy.log ファイルからのログを処理するためにどのツールを使ってもかまいません。 たとえば、ログを処理して Loggly に自動的に送信するエージェントもある SolarWinds® Loggly® のようなツールを選択できます。
Configure Back-End Servers
プロキシを追加したときにログがデフォルトでどう動作するか試してみたい場合は、以下のような設定を haproxy の最後に追加すれば、ログを取得できるようになります。conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
「Your-Webserver1-IP」と「Your-Webserver2-IP」を、トラフィックをリダイレクトしたいサーバーのIPアドレスに置き換えます。 変更を保存して、HAProxy サービスを再起動します。 バックエンドプロキシのセクションで、ログの設定をする必要がないことに注意してください。 これで、HAProxy を通してこれらのバックエンドサーバにトラフィックを送ることができ、ログは自動的に haproxy.log ファイルに送られます。
Rotate Logrotate
最後に、良き市民として、我々は haproxy.log がすべてのサーバストレージを食わないことを確認する必要があります。 これを行うには、logrotate を使用できます。 私の場合、デフォルトでインストールされていますが、次のコマンドでインストールできます:
sudo apt-get install logrotate
そして、次のような設定ファイルを用意して、haproxy.log ファイルをクリーンアップおよび圧縮します:
cat /etc/logrotate.d/haproxy/var/log/haproxy.log { daily rotate 52 missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true endscript}
上記の設定を使用すると、logrotate は毎日このルールを適用し、52日前以降のログを保存してくれます。 また、ローテートされたファイルはgzip形式で圧縮されます。 サーバー上のログファイルが増えすぎることを心配する必要はありません-logrotateはあなたのために古いファイルを削除します。 この簡単な設定により、夜中にログを削除するために起きる必要がなくなります。 お得な感じでしょう?
設定がうまくいくことを確認するには、HAProxy と rsyslog を再起動します:
sudo service rsyslog restartsudo service haproxy restart
Conclusion
HAProxy が提供するログ オプションの表面を引っかいただけでした。 引き続き公式ドキュメントを参照してください。 また、HAProxy ブログには、ログ形式を変更する方法と、プロファイリング メトリクスを取得する方法についてさらに詳しく説明した優れた投稿があります。
注意 私は AWS で Ubuntu 18.04 サーバーを使用し、ここで説明した構成のほとんどはデフォルトでそこにあります。 すべてのサーバーがこのようになるわけではありませんが、少なくとも HAProxy でロギングがどのように動作し、これらの設定がどこにあるかがわかったので、必要であれば変更することができます。 ハッピーロギング!
。