一、参考博文
二、原因
搭建了haproxy以后,在使用过程中会遇到有一些问题。为了更方便、快捷的发现问题。所以要打开haproxy的日志记录功能。
三、开启haproxy日志
1.linux日志级别
- 日志级别level:local0~local7。16~23保留为本地使用。
- emerg 0 系统不可用
- alert 1 必须马上采取行动的事件
- crit 2 关键的事件
- err 3 错误事件
- warning 4 警告事件
- notice 5 普通但重要的事件
- info 6 有用的信息
- debug 7 调试信息
2.配置haproxy日志
2.1. 编辑haproxy配置文件haproxy.conf,在defaults配置选项下增加以下几条
option tcplog #如果有4层代理,所以必须使用tcp层的log。
log 127.0.0.1 local3 info
log global
2.2. 修改linux的rsyslog的配置文件。
vi /etc/rsyslog.conf #增加以下内容
$ModLoad imudp
$UDPServerRun 514
#haproxy log
local3.* /var/log/haproxy/haproxy.log (local3和/var/中间要用tab隔开)
2.3. 修改/etc/sysconfig/rsyslog文件, 把SYSLOGD_OPTIONS=”-c 5″改成 SYSLOGD_OPTIONS=”-r -c 0″
vi /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -c 0"
2.4. 配置haproxy日志轮转
vi /etc/logrotate.d/haproxy
/var/log/haproxy/haproxy.log
{
daily
rotate 7
compress
delaycompress
notifempty
copytruncate
dateext
}
2.5. 重启liunx日志系统和haproxy程序。
service rsyslog restart
service haproxy restart
3.自定义haproxy日志格式
系统自带的格式是默认的tcp协议的格式,里面包含的信息太少了。所以我们需要自定义haproxy日志的格式,来更好的帮我们分析问题。
3.1 haproxy的四种日志格式
- 默认格式,这种格式之包含少量的信息,官网说这种格式最终消失,所以不会进行描述。
- tcp协议格式,这种格式在使用的时候需要在frontend中设置option tcplog。tcp协议日志格式支持更丰富的信息,如定时器、连接数、队列大小。
- http协议格式,这种格式在使用的时候需要在frontend中设置option httplog。http协议日志格式可以支持一些http协议特有的信息,比如http状态码,请求和响应头信息。
- the CLF HTTP format,这个格式没有看的太明白。当时我们也没有需求要使用这个格式。所以这个暂时未详细研究,有感兴趣的可以自己看官网的介绍。
- 以上内容仅供参考,因为我是基于有道翻译官方的英文以后来理解的。
3.2 自定义haproxy的日志格式的话,需要用到capture。
- 使用capture捕获cookie信息
- 使用capture捕获http request信息
- 使用capture捕获response header信息
- 以上是haproxy官网关于capture的文档
3.3 haproxy自定义日志格式配置
global
log 127.0.0.1 local2 info
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
# option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend http-in
bind 0.0.0.0:8000
mode http
log global
option httplog
option httpclose
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server
#((
#capture捕获信息
capture request header Host len 64
capture request header User-Agent len 128
capture request header X-Forwarded-For len 100
capture request header Referer len 200
capture response header Server len 40
capture response header Server-ID len 40
#使用log-format自定义日志显示格式。log-format变量的含义,请看后面从官网截取的解释文档。
log-format %ci:%cp\ %si:%sp\ %B\ %U\ %ST\ %r\ %b\ %f\ %bi\ %hrl\ %hsl\
#))
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server html-A 127.0.0.1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
3.4 log-fromat变量
Please refer to the table below for currently defined variables :
+---+------+-----------------------------------------------+-------------+
| R | var | field name (8.2.2 and 8.2.3 for description) | type |
+---+------+-----------------------------------------------+-------------+
| | %o | special variable, apply flags on all next var | |
+---+------+-----------------------------------------------+-------------+
| | %B | bytes_read (from server to client) | numeric |
| H | %CC | captured_request_cookie | string |
| H | %CS | captured_response_cookie | string |
| | %H | hostname | string |
| | %ID | unique-id | string |
| | %ST | status_code | numeric |
| | %T | gmt_date_time | date |
| | %Tc | Tc | numeric |
| | %Tl | local_date_time | date |
| H | %Tq | Tq | numeric |
| H | %Tr | Tr | numeric |
| | %Ts | timestamp | numeric |
| | %Tt | Tt | numeric |
| | %Tw | Tw | numeric |
| | %U | bytes_uploaded (from client to server) | numeric |
| | %ac | actconn | numeric |
| | %b | backend_name | string |
| | %bc | beconn (backend concurrent connections) | numeric |
| | %bi | backend_source_ip (connecting address) | IP |
| | %bp | backend_source_port (connecting address) | numeric |
| | %bq | backend_queue | numeric |
| | %ci | client_ip (accepted address) | IP |
| | %cp | client_port (accepted address) | numeric |
| | %f | frontend_name | string |
| | %fc | feconn (frontend concurrent connections) | numeric |
| | %fi | frontend_ip (accepting address) | IP |
| | %fp | frontend_port (accepting address) | numeric |
| | %ft | frontend_name_transport ('~' suffix for SSL) | string |
| | %hr | captured_request_headers default style | string |
| | %hrl | captured_request_headers CLF style | string list |
| | %hs | captured_response_headers default style | string |
| | %hsl | captured_response_headers CLF style | string list |
| | %ms | accept date milliseconds (left-padded with 0) | numeric |
| | %pid | PID | numeric |
| H | %r | http_request | string |
| | %rc | retries | numeric |
| | %rt | request_counter (HTTP req or TCP session) | numeric |
| | %s | server_name | string |
| | %sc | srv_conn (server concurrent connections) | numeric |
| | %si | server_IP (target address) | IP |
| | %sp | server_port (target address) | numeric |
| | %sq | srv_queue | numeric |
| S | %sslc| ssl_ciphers (ex: AES-SHA) | string |
| S | %sslv| ssl_version (ex: TLSv1) | string |
| | %t | date_time (with millisecond resolution) | date |
| | %ts | termination_state | string |
| H | %tsc | termination_state with cookie status | string |
+---+------+-----------------------------------------------+-------------+
R = Restrictions : H = mode http only ; S = SSL only
2.haproxy日志的输出格式
Mar 5 09:46:56 localhost haproxy[19317]: 120.92.51.3:21435 127.0.0.1:80 412 123 301 GET / HTTP/1.1 html-server http-in 127.0.0.1 c.guanshizhai.online:8000 Wget/1.14 (linux-gnu) - - nginx/1.11.7 -\