一、日志配置介绍
二、案例
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连接也会自动关闭掉。