About Me

header ads

Guidlene dành cho haproxy, một số cấu hình hay

1. HAProxy Logging

Haproxy hỗ trợ custom log, bằng cách thêm cấu hình logformat như sau:

log-format [%pid]\ [%Ts.%ms]\ %ac/%fc/%bc/%bq/%sc/%sq/%rc\ %Tq/%Tw/%Tc/%Tr/%Tt\ %tsc\ %ci:%cp\ %fi:%fp\ %si:%sp\ %ft\ %sslc\ %sslv\ %{+Q}r\ %ST\ %b:%s\ "%CC"\ "%hr"\ "%CS"\ "%hs"\ req_size=%U\ resp_size=%B

--> ví dụ:
Mar 14 17:14:51 localhost haproxy[14887]: [14887] [1394817291.250] 10/5/2/0/3/0/0 48/0/0/624/672 ---- 1.10.2.10:35701 10.151.122.228:443 127.0.0.1:8000 logger - - "GET /v1/ HTTP/1.0" 404 fxa-nodejs:nodejs1 "-" "{||ApacheBench/2.3|over-100-active-connections,over-100-connections-in-10-seconds,high-error-rate,high-request-rate,|47B4176E:8B75_0A977AE4:01BB_5323390B_31E0:3A27}" "-" "" ireq_size=592 resp_size=787



Các tham số:
%pid: process ID của HAProxy
%Ts.%ms: unix timestamp + milliseconds
%ac: tổng số connection hiện tại
%fc: tổng số connection hiện tại của frontend
%bc: tổng số connection hiện tại của backend
%bq: kích thước hàng đợi của backend
%sc: tổng số connection trên server
%sq: Kích thước hàng đợi trên toàn server
%rc: số kết nối phải thực hiện lại của server
%Tq: Tổng thời gian khởi tạo kết nối (chỉ dành cho HTTP MODE)
%Tw: Tổng thời gian đợi ở hàng đợi (queue) để đến lượt kết nối
%Tc: Tổng thời gian sử dụng để khởi tạo kết nối
%Tr: Thời gian server phản hồi (chỉ dành cho HTTP MODE)
%Tt: Tổng thời gian session tồn tại, tính từ lúc proxy chấp nhận kết nối tới khi đóng kết nối
%tsc: termination state (see 8.5. Session state at disconnection)
%ci:%cp: IP và port của máy khách
%fi:%fp: IP và port của frontend
%si:%sp: Ip và port của backend
%ft: transport type of the frontend (with a ~ suffix for SSL)
%sslc %sslv: SSL cipher and version
%{+Q}r: HTTP request, between double quotes
%ST: HTTP status code
%b:%s: backend name and server name
%CC: captured request cookies
%hr: captured request headers
%CS: captured response cookies
%hs: captured response headers
%U: bytes read from the client (request size)
%B: bytes read from server to client (response size)


2.Unique request ID




Việc theo dõi các request xuyên suốt nhiều server có thể có một số vấn đề, do thông tin ở mỗi nơi có thể không mapping được với nhau, để hỗ trợ việc đó, haproxy hỗ trợ việc sinh một uniqueID, gán vào mỗi gói tin , và chúng ta có thể tracking mỗi request bằng cách sử dụng trường thông tin này.



# Insert a unique request identifier is the headers of the request
# passed to the backend
unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
unique-id-header X-Unique-ID

Điều  này sinh ra một mã, đại loại như: 485B7525:CB2F_0A977AE4:01BB_5319CB0C_000D:27C0
và gán nó vào trường X-Unique-ID của bản tin http

GET / HTTP/1.1
Host: backendserver123.example.net
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cache-Control: max-age=0
X-Unique-ID: 485B7525:CB70_0A977AE4:01BB_5319CD3F_0163:27C0
X-Forwarded-For: 2.12.17.87


3.Capturing headers and cookies


Trong cấu hình log, chúng ta định nghĩa trường cho header và cookie của request và response. Nhưng, mặc định, những trường này sẽ không hiển thị trong log. Vì vậy, cần thêm tham số capture cho mỗi frontend. Dưới đây mà ví dụ capture các http header được gửi tới bởi client
  capture request header Referrer len 64
capture request header Content-Length len 10
capture request header User-Agent len 64
capture cookie mycookie123=  len 32

Đăng nhận xét

0 Nhận xét