Haproxy (二)之日志打印

发布时间 2023-09-01 17:28:07作者: 夏之夜

一、日志配置介绍

 

二、案例

1、将 客户端 -> haproxy -> activemq 两个tcp连接地址全部打印,能够追溯 客户端 ->  activemq tcp连接的变化情况,助于问题排查

   记录 客户端->haproxy->amq 两端一一对应tcp连接,并打印出tcp连接源IP、源端口、目的IP、目的端口信息。目的明确以下几点:

  • 客户端->haproxy的连接断开,那么对应的haproxy到amq的连接是否会断开
  • haproxy->amq的连接断开,那么对应的客户端到haproxy的连接是否会断开

(1)  修改haproxy配置文件

  • 自定义 log-format格式,默认按照自定义格式输出,关闭tcplog模式。
global
    log   /dev/log  local0 info
    log   /dev/log  local0 notice
    log   /dev/log  local0 debug
    daemon
    maxconn 4096

defaults
    log     global
    log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %fi:%fp\ %bi:%bp\ %si:%sp\ %Tw/%Tc/%Tt\ %B\ %ts\ \%ac/%fc/%bc/%sc/%rc\ %sq/%bq
    mode    tcp
    #option  tcplog
    option  dontlognull
    option  forwardfor
    retries 3
    option  abortonclose
    maxconn 4096
    timeout connect  5000ms
    timeout client  3000ms
    timeout server  3000ms
    balance roundrobin

#自检页面配置:33333端口
listen private_monitoring_30750
    bind    0.0.0.0:30750
    mode    http
    option  httplog
    stats   refresh  5s
    stats   uri  /stats
    stats   realm   Haproxy
    stats   auth  admin:admin

# amq的ssl端口
listen amq_ssl_8355
    bind    0.0.0.0:8355
    mode    tcp
    #option  tcplog
    balance roundrobin
    timeout client  3h
    timeout server  3h
    server  10.19.214.136  10.19.214.136:30212  check  inter  5000  rise  2  fall  3
        # 拒绝多个端口怎么配置
        tcp-request connection reject if { src 10.19.214.136/32 }

# amq的tcp端口
listen amq_tcp_7018
    bind    0.0.0.0:7018
    mode    tcp
    #option  tcplog
    balance roundrobin
    timeout client  3h
    timeout server  3h
    server  10.19.214.136  10.19.214.136:30211  check  inter  5000  rise  2  fall  3
        tcp-request connection reject if { src 10.19.214.136/32 }

# amq的web端口
listen amq_web_8028
    bind    0.0.0.0:8028
    mode http
    option httplog
    server  10.19.214.136 10.19.214.136:30213  check  inter  5000  rise  2  fall  3
    option  httpchk GET /activemqmanage
  • 重启haproxy服务

(2) 配置rsyslog

  •   /etc/rsyslog.d 下创建haproxy.conf,内容如下:
$ModLoad imudp
$UDPServerRun 514

if ($programname == 'haproxy')
then -/var/log/haproxy.log
&~
  • 重启 rsyslog服务
systemctl restart rsyslog

(3) 查看 haproxy.log 日志

       /var/log 下可以看到有 haproxy.log文件,且该文件内容格式如下:

(4) 客户端 -> haproxy -> activemq 一端连接端口,另一个端必断开的验证

    a) 使用 linux 命令将客户端 -> haproxy的 tcp连接关闭,验证 haproxy ->activemq 端的连接也必端口的猜想

  • 使用 yum 安装gdb
  •  选定关闭端口
  • 通过 systemctl status <客户端服务名称>  查到进程号 19416
  • netstat -anop|grep 19416 根据进程号找到 客户端 发送给haproxy 8355 的连接中的源端口 62898
  • cat /var/log/haproxy.log |grep 62898  根据源端口查找haproxy.log日志找到 haproxy->amq tcp连接的源端口37464
  • netstat -anop|grep 37464 根据端口号找到amq的进程号 41661
  • 通过 systemctl status activemq 核实了amq进程号的确为 41661

客户端(62898)->haproxy(37464)-> amq

  • 使用gdb关闭端口(62898)
  • netstat -anop|grep 62898     查找62898 连接的haproxy进程号 46414
  • lsof -np 46414 |grep 62898    查找46414 进程 的62898  连接文件句柄
  • gdb -p 46414     通过gdb命令attach上haproxy 46414 进程
  • call close(xx)    关闭62898连接连接的tcp连接

  • 打开新的shell界面,查找62898、37464是否还存在

结论:客户端->haproxy tcp连接关闭之后,haproxy->amq一一对应的tcp连接也会自动关闭掉。

 

     b) 使用 linux 命令将 haproxy -> activemq 的 tcp连接关闭,验证 客户端 -> haproxy 端的连接也必断开的猜想

  • 按照 上面的方式 选定端口,此时选定关闭 haproxy与 amq 之间的连接

 

         客户端(46682)->haproxy(54016)->amq 

  • 使用gdb关闭端口54016

     结论:haproxy -> activemq tcp连接关闭之后,客户端 -> haproxy一一对应的tcp连接也会自动关闭掉。