Haproxy Syslog


原文链接: Haproxy Syslog

1.haproxy 安装

使用 yum install haproxy 进行一步安装, 很简单
  1. 配置说明

    
    #########################################################################  
    # HAProxy 配置文件  
    #########################################################################  
           
    global  
    # 使用系统的 syslog 记录日志(通过 udp,默认端口号为 514)  
    log 127.0.0.1 local0 # info [err warning info debug]  
    chroot /home/user/haproxy  
           
    #限制单个进程的最大连接数  
    maxconn 65535  
           
    # 让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数 -D  
    # daemon  
    # 指定作为守护进程运行的时候,要创建多少个进程,默认只创建一个,需要 daemon 开启模式  
    # nbproc 1  
           
    # 设置 debug 模式运行,与 daemon 模式只能互斥,等同于在命令行添加参数 -d  
    # debug  
    pidfile /home/user/haproxy/logs/haproxy.pid    # not work  
           
    defaults  
    # 在连接失败或断开的情况下,允许当前会话被重新分发  
    option redispatch  
    # 设置在一个服务器上链接失败后的重连次数  
    retries 2  
    # 设置服务器分配算法  
    balance roundrobin  
           
    # 不记录空连接  
    option dontlognull  
           
    # 设置等待连接到服务器成功的最大时间  
    timeout connect 5000ms  
    # 设置客户端的最大超时时间  
    timeout client 1800000ms  
    # 设置服务器端的最大超时时间  
    timeout server 1800000ms  
           
    # Enable the sending of TCP keepalive packets on both sides, clients and servers  
    # NOTE: 在服务器 CPU 强劲的情况下,最好不要开启保活,这样可减少资源消耗  
    #option tcpka  
           
    ############################## 统计页面配置 ##################################  
           
    listen admin_stat  
    # 监听端口  
    bind *:8011  
    # http 的 7 层模式  
    mode http  
    option httplog  
    log global  
    # 统计页面自动刷新时间  
    stats refresh 30s  
    # 统计页面 URL  
    stats uri /admin?stats  
    # 统计页面密码框上提示文本  
    stats realm Haproxy\ Statistics  
    # 统计页面用户名和密码设置  
    stats auth admin:admin  
    # 隐藏统计页面上 HAProxy 的版本信息  
    stats hide-version  
           
    ###########################TCP 连接的监听配置 ################################  
           
    listen  tcp-in  
    bind *:2211  
    mode tcp  
    # 日志记录选项  
    option tcplog  
    log global  
           
    # 后台服务器  
    # weight  -- 调节服务器的负重  
    # check -- 允许对该服务器进行健康检查  
    # inter  -- 设置连续的两次健康检查之间的时间,单位为毫秒 (ms),默认值 2000(ms)  
    # rise  -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2  
    # fall  -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3  
    # maxconn  -- 指定可被发送到该服务器的最大并发连接数  
    server localhost 0.0.0.0:2233 weight 3 check inter 2000 rise 2 fall 3  
    server 192.168.1.100 192.168.1.100:2233 weight 3 check inter 2000 rise 2 fall 3  
    server 192.168.1.101 192.168.1.101:2233 weight 3 check inter 2000 rise 2 fall 3  
           
    #########################HTTP 连接的监听配置 ################################  
           
    listen  http-in  
    bind *:2212  
    mode http  
    option httplog  
    log global  
           
    # 设置健康检查模式  
    #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www  
    #option smtpchk  
           
    # 后台服务器  
    server localhost 0.0.0.0:2234 weight 3 check inter 2000 rise 2 fall 3  
    server 192.168.1.100 192.168.1.100:2234 weight 3 check inter 2000 rise 2 fall 3  
    server 192.168.1.101 192.168.1.101:2234 weight 3 check inter 2000 rise 2 fall 3  
    
    1. 日志的输出问题
      根据说明,haproxy 的日志输出使用了系统的日志程序,比如 syslogd, syslog-ng。这两个日志系统使用上其主要的区别就是其配置文件的格式不同,考虑 syslog-ng 算是 syslog 的一个升级版,在性能和功能性上都要优于 syslogd,因此这里主要介绍的是配置 syslog-ng 来实现 haproxy 的日志输出。
      我的机器环境,一如既往:SUSE Linux Enterprise Server 11 (x86_64),
      日志程序默认是 syslog-ng。

    I. 编辑系统日志服务的配置文件 / etc/sysconfig/syslog,查看 SYSLOG_DAEMON 的值,这个值指定了所要使用的日志服务程序,默认为空,表示自动检测,如果不确定,可以显式指定 SYSLOG_DAEMON = “syslog-ng”。

    II. 编辑 syslog-ng 的配置文件 / etc/syslog-ng/syslog-ng.conf,在末尾添加如下代码:

    Java 代码 收藏代码

    for supporting the logging of "HAProxy"

    source my_src {

    #  
    # process log messages from network:  
    #  
    udp(ip("0.0.0.0") port(514));  
    

    };

    filter f_local0 { facility(local0); };
    filter custom { program("haproxy"); };

    destination d_haproxy { file("/var/log/haproxy.log"); };

    log { source(my_src); filter(f_local0); destination(d_haproxy); };
    #log { source(my_src); filter(custom); destination(d_haproxy); }; # OK, work too

    注:这里指定了日志输出到 / var/log 目录下,工作正常,若指定输出到 / home 等其他子目录下却会失败,具体原因不详,待查。另,haproxy 的日志也可通过此方法将其发送到某个日志服务器用于统一处理,具体可查看 syslog-ng 的相关文档。

    III. 重启 syslog 服务,使用如下命令:
    Java 代码 收藏代码

    service syslog restart

    IV. 编辑 haproxy 的配置文件,假定名为 haproxy.cfg
    在所需要做日志记录的模块(比如,global, default 等)添加如下代码:
    Java 代码 收藏代码

    使用系统的 syslog 记录日志(通过 udp,默认端口号为 514)

    log 127.0.0.1 local0

    注:local0 在两个配置文件中的一致。

    这会查看日志基本上就 OK 了。

    Java 代码 收藏代码

    tail -f /var/log/haproxy.log

    注:其他须解决的日志相关问题
    a. haproxy 当前的日志全部记录在一个文件中,考虑按日期将其分段成不同文件存储;
    b. 日志不能输出到除 / var/log / 外的其他目录

    在这个配置文件中,使用了 listen 块,而没有用 frontend 和 backend。listen 块定义了一个完整的代理过程,同时包含了前端的监听套接字和后台的服务器描述,从这个层面考虑,使用 frontend 和 backend,似乎显得条理要清楚点。不过测试发现使用 listen 块的时候,输出的日志会记录下后台服务器的健康状况,而使用 frontend 和 backend 则不会。
    对于健康检查,推荐开开启比较好,否则当后台服务器当掉的时候,haproxy 将不会将连接重定向到下一个可用的服务器上。

    根据以上配置的统计页面 url,可访问:http://host_ip:2212/admin?stats 进入统计页面。注:端口号是你配置的前置 http 端口。

`