haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件。下面以centos6.4为例,haproxy使用系统自带的rpm报1.4版本
编辑/etc/haproxy/haproxy.conf
在default处添加,如下红色部分,记住不要添加到global处,否则输出日志会有重复的现象,一个请求输出两行相同的日志内容。
defaults
mode http
log global
log 127.0.0.1 local0
#local0是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别
编辑系统日志配置
# cat /etc/rsyslog.conf
默认有下面的设置,会读取 /etc/rsyslog.d/*.conf目录下的配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
为haproxy创建一个独立的配置文件
# vim /etc/rsyslog.d/haproxy.conf $ModLoad imudp $UDPServerRun 514
$UDPServerAddress 0.0.0.0 local0.* /var/log/haproxy.log #如果不加下面的的配置则除了在/var/log/haproxy.log中写入日志外,也会写入message文件 &~
配置rsyslog的主配置文件,开启远程日志
# vim /etc/sysconfig/rsyslog SYSLOGD_OPTIONS=”-c 2 -r -m 0″ #-c 2 使用兼容模式,默认是 -c 5 #-r 开启远程日志 #-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
重启haproxy和rsyslog服务
# /etc/init.d/rsyslog restart
# /etc/init.d/haproxy restart
---------------------------------------------------------------------------------------------------------------------------------------------------------------
日志查询
按时间范围查询:(注意:时间点要确实存在,才可查找时间范围)
其实就是打印文件中,正则匹配 Aug 16 16:25:54 和 Aug 16 16:35:54 这两行之间的所有的内容
# cat /var/log/haproxy.log | sed -n '/Aug 16 16:25:54/,/Aug 16 16:35:54/p'|awk '{print $6}'|cut -d : -f1|sort| uniq -c |sort -k1,1nr|more
再比如:时间字段内容为 “[15/Apr/2019:11:45:25 +0800]”时,也可以进行查询
# cat /var/log/nginx/log | sed -n '/15/Apr/2019:11:45:23/,/15/Apr/2019:11:45:29/p'
汇总求和:
# cat haproxy.log-20170102 | sed -n '/Jan 1 14:00:00/,/Jan 1 14:05:00/p'|grep 'packet/index'|awk '{print $6}'|cut -d : -f1|sort| uniq -c |sort -k1,1nr|awk '{ SUM += $1 } END { print SUM }' 汇总求和