haproxy开启日志记录

一、参考博文

HAproxy增加日志记录功能和自定义日志输出内容、格式
haproxy官方日志定义

二、原因

搭建了haproxy以后,在使用过程中会遇到有一些问题。为了更方便、快捷的发现问题。所以要打开haproxy的日志记录功能。

三、开启haproxy日志

1.linux日志级别

  1. 日志级别level:local0~local7。16~23保留为本地使用。
  2. emerg 0 系统不可用
  3. alert 1 必须马上采取行动的事件
  4. crit 2 关键的事件
  5. err 3 错误事件
  6. warning 4 警告事件
  7. notice 5 普通但重要的事件
  8. info 6 有用的信息
  9. 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的四种日志格式

  1. 默认格式,这种格式之包含少量的信息,官网说这种格式最终消失,所以不会进行描述。
  2. tcp协议格式,这种格式在使用的时候需要在frontend中设置option tcplog。tcp协议日志格式支持更丰富的信息,如定时器、连接数、队列大小。
  3. http协议格式,这种格式在使用的时候需要在frontend中设置option httplog。http协议日志格式可以支持一些http协议特有的信息,比如http状态码,请求和响应头信息。
  4. the CLF HTTP format,这个格式没有看的太明白。当时我们也没有需求要使用这个格式。所以这个暂时未详细研究,有感兴趣的可以自己看官网的介绍。
  5. 以上内容仅供参考,因为我是基于有道翻译官方的英文以后来理解的。

3.2 自定义haproxy的日志格式的话,需要用到capture。

  1. 使用capture捕获cookie信息
  2. 使用capture捕获http request信息
  3. 使用capture捕获response header信息
  4. 以上是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变量

  1. haproxy官方关于log-format变量的定义
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 -\
Previous Post

glustefs参考博文

Next Post

lvs简介

Related Posts