已测试的Haproxy版本1.5.3, 1.5.9.
通过Haproxy的stats socket接口来采集Haproxy基础状态信息,qcur,scur,rate等;
操作系统: Linux
Python > 2.6
python-toml > 0.9.0
1 目录解压到/path/to/haproxymon,配置文件也放到同一路径,记得根据你的实际情况修改配置文件中的参数
2 配置要采集的指标,因haproxy stats文件指标太多,为了方便关注关键指标,脚本提供指标筛选功能;
3 配置crontab, 修改haproxymon_cron文件中haproxymon安装路径; cat haproxymon_cron >> /var/spool/cron/root
4 在haproxy.py中将debug_level设置:
0 表示不输出任何调试内容;
1 表示输出调用本地falcon代理的返回信息;
2 表示输出metric信息;
3 表示输出采集的原始stats内容;
5 endpoint默认是hostname,还可以指定EndpointType来设置为使用本机IP.
6 推荐haproxy的配置文件中使用listen块来配置后端集群: 本插件通过pxname,svname来识别不同metric的,参考例子如下:
listen http-in 0.0.0.0:80
server server1:8000 192.168.0.10:8000 maxconn 32
server server2:8000 192.168.0.11:8000 maxconn 32
# other
一般情况几分钟后,可从open-falcon的dashboard中查看haproxy metric
Counters | Type | Notes |
---|---|---|
haproxy_getstats/pxname=your_pxname,svname=FRONTEND | GAUGE | 如果非0则表示无法获取stats socket信息 |
haproxy_status/pxname=your_pxname,svname=FRONTEND | GAUGE | 后端机器状态:down or up |
haproxy_scur/pxname=your_pxname,svname=FRONTEND | GAUGE | 当前的会话数 |
haproxy_qcur/pxname=your_pxname,svname=FRONTEND | GAUGE | 当前排队的请求数量 |
haproxy_rate/pxname=your_pxname,svname=FRONTEND | GAUGE | 最近一秒的每秒请求会话数 |
haproxy_ereq/pxname=your_pxname,svname=FRONTEND | GAUGE | 客户端请求的错误数 |
haproxy_econ/pxname=your_pxname,svname=FRONTEND | GAUGE | 连接后端时的错误数 |
haproxy_dreq/pxname=your_pxname,svname=FRONTEND | GAUGE | 因安全原因被拒绝的请求数 |
haproxy_qtime/pxname=your_pxname,svname=FRONTEND | GAUGE | 请求的平均排队时间(毫秒) |
haproxy_ctime/pxname=your_pxname,svname=FRONTEND | GAUGE | 请求的平均连接时间(毫秒) |
告警项 | 触发条件 | 备注 |
---|---|---|
haproxy_getstats/pxname=your_pxname,svname=FRONTEND | all(#3)>0 | 可能是因为stats socket不存在或是无权访问 |
haproxy_status/pxname=your_pxname,svname=FRONTEND | all(#1)>0 | 后端机器down会导致负载能力下降,如果所有机器down则无法在提供服务 |
haproxy_scur/pxname=your_pxname,svname=FRONTEND | all(#3)>=1800 | 会话数超过阀值会拒绝客户端建立新连接 |
haproxy_qcur/pxname=your_pxname,svname=FRONTEND | all(#3)>100 | 超过阀值,说明排队请求多,整体负载压力大 |
haproxy_rate/pxname=your_pxname,svname=FRONTEND | all(#3)>8000 | 超过阀值表示haproxy压力过大 |
haproxy_ereq/pxname=your_pxname,svname=FRONTEND | all(#3)>100 | 客户端请求错误超过阀值需要检查timeout等于客户端连接有关的配置 |
haproxy_econ/pxname=your_pxname,svname=FRONTEND | all(#3)>100 | 若这个值大幅上升可能是后端机器无法响应请求 |
haproxy_dreq/pxname=your_pxname,svname=FRONTEND | all(#3)>100 | tcp模式可能是触发tcp请求内容规则 |
haproxy_qtime/pxname=your_pxname,svname=FRONTEND | all(#3)>50 | 超过阀值可能是后端处理能力在下降 |
haproxy_ctime/pxname=your_pxname,svname=FRONTEND | all(#3)>50 | 超过阀值可能是haproxy到后端间网络状况变差 |
- 窦锦帅: QQ:33903914; weibo: http://weibo.com/iiask