お元気そうで残念です

仕事とか趣味のメモを残します

HAProxy 1.6 のHTTP log formatについて

こんにちは、じょにーです。

今日はHAProxyのHTTPモードにおけるデフォルトのログフォーマットの中で重要そうなものについて簡単に解説します。

公式ドキュメントは以下のサイトです。
HAProxy version 1.6.14 - Configuration Manual

サンプルログはこちら。

Nov 18 02:20:39 localhost haproxy[10745]: 10.1.0.101:57034 [18/Nov/2018:02:20:39.017] http-in backend_servers/server-01-06 0/0/0/3/3 200 3632 - - ---- 14/14/7/1/0 0/0 "GET /doku.php HTTP/1.1"
Nov 18 02:17:34 localhost haproxy[10745]: 10.1.0.103:37640 [18/Nov/2018:02:17:34.107] http-in backend_servers/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1791/1791/1790/0/0 0/0 "GET /doku.php HTTP/1.1"

HTTP log formatについて

各ログの形式は以下のようになります。

名称 : リクエスト例 200(OK) 503(Service Unavailable)
時刻 Nov 18 02:20:39 Nov 18 02:17:34
HAProxyのIP? localhost localhost
1. process_name '[' pid ']:' haproxy[10745] haproxy[10745]
2. client_ip ':' client_port 10.1.0.101:57034 10.1.0.103:37640
3. '[' request_date ']' [18/Nov/2018:02:20:39.017] [18/Nov/2018:02:17:34.107]
4.frontend_name http-in http-in
5. backend_name '/' server_name backend_servers/server-01-06 backend_servers/<NOSRV>
6. TR '/' Tw '/' Tc '/' Tr '/' Ta* 0/0/0/3/3 0/-1/-1/-1/0
7. status_code 200 503
8. bytes_read* 3632 212
9. captured_request_cookie - -
10. captured_response_cookie - -
11. termination_state ---- SC--
12. actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 14/14/7/1/0 1791/1791/1790/0/0
13. srv_queue '/' backend_queue 0/0 0/0
16. '"' http_request '"' "GET /doku.php HTTP/1.1" "GET /doku.php HTTP/1.1"

重要そうなものは,3、6、7、12です。
3はリクエストを受信した時刻です。
7は応答のステータスコード

6はリクエストの処理過程でどこでどのくらい時間がかかったのか示したもののようです。
TRは,最初のバイトが受信された後、クライアントからの完全なHTTP要求(本文を数えずに)を待つのに費やされた合計時間。
Twは.さまざまなキューで待機する合計時間。
Tcは,リトライを含む最終的なサーバーへの接続の確立を待機する合計時間。
Trは,サーバーがデータをカウントせずに完全なHTTP応答を送信するのを待機する合計時間。
Ta*は、要求がHAProxyでアクティブなままだった時間であり、要求の最初のバイトが受信されてから応答の最後のバイトが送信されたまでの合計時間をそれぞれ示しています。
様々なキューというのは基本的にコネクションキューを指すようです。

以下が公式ドキュメントにある6のTiming Eventの説明図です。

            first request               2nd request
      |<---------------------->|<-------------- ...
      t                        t     ...
   ---|----|----|----|----|----|----|--
      : Tq   Tw   Tc   Tr   Td : Tq  ...
      :<--------- Tt --------->:

12は接続を維持しているコネクション数などを示しています。
actconnは,セッションがログに記録されたときの、プロセス上の同時接続の合計数。
feconnは,セッションがログに記録されたときのフロントエンドでの同時接続の合計数。
beconnは,セッションがログされたときにバックエンドによって処理された同時接続の総数。
srv_connは,セッションがログに記録されたときにサーバーでアクティブな同時接続の合計数。
retries*は,サーバーに接続しようとしたときにこのセッションで発生した接続再試行回数です。

まとめ

以上、簡単に重要そうなフォーマットについて解説しました。
6のTiming Eventを解析すればどこがボトルネックになっているのか分かりますし、
12の connectionsを見ればロードバランサ自体がボトルネックになっている場合に気づきやすいのかなと思います。

参考文献

HAProxy version 1.6.14 - Configuration Manual