负载均衡器是数据中心的入口点,处于访问一切资源的关键路径上。这给了他们一些有趣的特征。首先,它们是在基础设施中需要监控的最重要的点。其次,他们处于一个独特的位置,不仅可以提供有关自己的特性,还可以提供他们所支持的后端的每项服务。
有两种流行的开源软件负载均衡器:HAProxy
和nginx
。让我们看看他们在这方面的异同。
启用负载均衡器上的监控
如题。负载均衡器将生产环境的一切服务组织成为一个整体系统。
- 安装新的东西
- 启用统计信息和监控内容
- 启用日志
- 启用nginx状态页面
编辑 /etc/nginx/nginx.conf
:
server { listen 0.0.0.0:6644; access_log off; allow 127.0.0.0/8; allow 10.0.0.0/8; deny all; location / { stub_status on; } }
启用HAProxy
统计信息页面
编辑/etc/haproxy/haproxy.cfg
:
listen stats 0.0.0.0:6427 mode http maxconn 10 no log acl network_allowed src 127.0.0.0/8 acl network_allowed src 10.0.0.0/8 tcp-request connection if if!network_allowed stats enable stats uri /
从负载均衡器收集指标
有标准的监控解决方案:datadog,signalfx,prometheus,graphite ... [2]
这些工具从应用程序,服务器和基础架构收集指标,它们允许检索指标,绘制图表并发送警报。
将负载平衡器集成到我们的监控系统中至关重要。我们需要了解客户端活动情况,请求数,错误率等...
毋庸置疑,监控能力将受限于负载均衡器测量到的信息。
可从nginx获得指标
nginx只提供7种不同的指标。
Nginx仅在所有站点上给出总和。 单个站点或应用程序则没有任何数字对应。
活动连接:当前活动客户端连接数,包括等待连接。接受:接受的客户端连接总数。handling:已处理连接的总数。通常,参数值与accept 相同,除非已达到某些资源限制(例如,worker_connections限制)。请求:客户端请求的总数。读取:nginx正在读取请求头的当前连接数。写入:nginx将响应写回客户端的当前连接数。等待:等待请求的当前空闲客户端连接数。
资料来源:https://nginx.org/en/docs/htt...
HAProxy 提供的指标
HAProxy提供83种不同的指标。
数字是全局,每个前端和每个后端(无论哪个有意义)。它们可在人类可读的网页上以原始CSV格式提供。
0. pxname [LFBS]:代理名称
1. svname [LFBS]:服务名称(FRONTEND用于前端,BACKEND用于后端,任何名称用于服务器/侦听器)
2. qcur [..BS]:当前排队的请求。对于后端,这将报告未分配服务器的队列号。
3. qmax [..BS]:qcur的最大值
4. scur [LFBS]:当前会话
5. smax [LFBS]:最大会话
6. slim [LFBS]:配置的会话限制
7. stot [LFBS]:累计数连接
8. bin [LFBS]:字节输入
9. bout [LFBS]:字节输出
[...]
32. 类型[LFBS] :( 0 =前端,1 =后端,2 =服务器,3 =套接字/监听器)
33. rate [.FBS]:每秒的会话数超过最后一秒
34. rate_lim [.F ..]:每秒新会话的配置限制
35. rate_max [.FBS]:每秒新会话的最大数量
36. check_status [... S]:上次健康检查的状态,其中一个:
37. check_code [... S]:layer5-7代码,如果可用
38. check_duration [... S]:以ms为单位完成上次健康检查所用的时间
39. hrsp_1xx [.FBS]:带1xx代码的http响应
40. hrsp_2xx [.FBS]:具有2xx代码的http响应
41. hrsp_3xx [.FBS]:具有3xx代码
42. http响应.hrsp_4xx[.FBS]:具有4xx代码的http响应
43. hrsp_5xx [.FBS]:http响应5xx代码
44. hrsp_other [.FBS]:与其他代码的http响应(协议错误)
[...]
资料来源:http://cbonte.github.io/hapro...
监控负载均衡器
上述度量标准用于在正在运行的系统上生成状态。
首先,我们将看到每个负载均衡器开箱即用的状态页面。然后我们将深入研究第三方监控解决方案。
Nginx状态页面
7个nginx指标显示在人类可读的网页上,可在127.0.0.1:6644/访问
不开玩笑。这就是nginx认为的“ 状态页面 ”。WTF?
它不显示负载平衡的应用程序。它不显示哪些服务器在线(有什么东西甚至运行???)。在该页面上没有什么可看的,它无助于调试任何问题。
HAProxy统计页面
为了比较,让我们看一下HAProxy监控页面,可在127.0.0.1:6427访问
在这里,我们可以看到哪些服务器上升或下降,使用了多少带宽,连接了多少客户端等等。这就是监控的意义所在。
正如一位经验丰富的系统管理员曾经告诉我:“ 这页是宇宙中最重要的事情。” [1]
每当事情变得不稳定时。首先,您在浏览器中打开www.yoursite.com
,看看它有多糟糕。其次,打开 HAProxy 统计信息页面以查找损坏的内容。此时,您已经90%的时间发现了问题的根源。
在可用监控有限的环境中尤其如此,或者更糟糕的是,根本没有监控工具。状态页面随时可以提供帮助(如果不是,那么只需要几条配置行)。
将nginx与监控系统集成
我们所能得到的只是来自网络状态页面的7个指标,其中只有请求数是值得注意的。它没有以 API 友好格式公开,并且不可能获得每个站点的数字。我们唯一能做的就是解析原始文本,寄希望于在未来的版本中不会改变间距。
鉴于 nginx 没有公开任何有用的信息,现有的监控工具都不能与之集成。当没有任何东西可以得到时,没有任何东西可以显示,也没有什么可以提醒的。
注意:一些监控工具实际上假装支持nginx集成。这意味着他们解析文本并提取请求数。这就是他们所能获得的一切。
将HAProxy与监控系统集成
除了漂亮的人类可读监控页面之外,所有HAProxy指标都以CSV格式提供。工具可以(并且确实)利用它。
例如,这是 Datadog 提供的默认HAProxy仪表板:
Datadog 预制的 HAProxy 仪表板
资料来源:http://docs.datadoghq.com/int...
主机上安装的 Datadog 代理会定期收集 HAProxy 指标。可以绘制指标,可以将图表排列到仪表板(这是一个示例),同时我们可以配置自动警报。
HAProxy
状态页面提供当前状态(在生成页面时),而监控解决方案保存历史记录并允许事后的调试。
为什么nginx没有监控?
nginx故意缺少所有监视功能。它们不会也永远不会免费提供。
如果您已被nginx锁定,并且需要一个合适的监控页面和用于集成的JSON API,则必须支付“ Nginx Plus”版本的费用。价格从每台服务器每年1900美元起。
请参阅:https://www.nginx.com/products/pricing/
结论:不惜一切代价避免使用nginx
负载均衡器是传输的关键点,也是在基础架构中需要监控的最重要的事情。
Nginx的为金钱而剥离了所有监控功能,同时装作开源的样子。
对我们的运营完全视而不见是不可接受的。远离nginx
。请改用HAProxy
。