Haproxy :统计脚本
2015-07-24 by dongnan
环境
操作系统: CentOS 6.6 amd64
软件版本: Haproxy 1.5.x(源码方式安装)
目标
输出 Haproxy 统计数据,为 Zabbix 采集 Haproxy 数据提供支持。 
功能
通过 Socat命令从 Haproxy socket文件获得统计数据,完成流量统计、tcp连接统计、http请求数量统计、http状态统计等。
开始之前
Shell脚本需要以下3个条件:
- Haproxy 配置统计 Socket
- Haproxy 使用Socat获得统计数据
- 使用crontab任务计划,每分钟获得一次数据保存在文本文件中。
脚本代码
注意: 示例 awk 匹配字符串为 localhost,请根据 haproxy 实际配置(frontend) 更改匹配字符串。
#!/bin/bash
# 20150726 by dongnan
# crontab -l
# * * * * *  /bin/echo "show stat" | /usr/bin/socat stdio /var/run/haproxy.sock | awk -F, '/localhost/' > /tmp/ha_stat.txt
# 0 0 * * *  /etc/init.d/haproxy reload > /dev/null 2>&1
#variables
item="$1"
disk="$2"
tmp_file='/tmp/ha_stat.txt'
#main
case "$1" in
    byte_in)
        awk -F, '{print $9}' $tmp_file
        ;;
    byte_out)
        awk -F, '{print $10}' $tmp_file
        ;;
    cur_sess)
        awk -F, '{print $5}' $tmp_file
        ;;
    max_sess)
        awk -F, '{print $6}' $tmp_file
        ;;
    curr_conns)
        /bin/echo "show info" | /usr/bin/socat stdio /var/run/haproxy.sock | awk -F: '/CurrConns/ {print $2}'
        ;;
    cum_conns)
        /bin/echo "show info" | /usr/bin/socat stdio /var/run/haproxy.sock | awk -F: '/CumConns/ {print $2}'
        ;;
    max_sess_rate)
        awk -F, '{print $36}' $tmp_file
        ;;
    max_request_rate)
        awk -F, '{print $48}' $tmp_file
        ;;
    cum_http)
        awk -F, '{print $49}' $tmp_file
        ;;
    http_1xx)
        awk -F, '{print $40}' $tmp_file
        ;;
    http_2xx)
        awk -F, '{print $41}' $tmp_file
        ;;
    http_3xx)
        awk -F, '{print $42}' $tmp_file
        ;;
    http_4xx)
        awk -F, '{print $43}' $tmp_file
        ;;
    http_5xx)
        awk -F, '{print $44}' $tmp_file
        ;;
    *)
        echo "Usage: $0 {byte_in|byte_out|curr_conns|cum_conns|cum_http|http_1xx|http_2xx|http_3xx|http_4xx|http_5xx}"
        echo "Example: $0 byte_in"
        exit 1
        ;;
esac