如何通过监控网站服务器日志来扩容承载容量



     任何互联网公司都会有自己的运维体系,其中最重要的是监控体系。监控方法有很多,最简

单的就是用一些系统命令,比如df命令来检查磁盘利用率,然后每天生成一个报告。通过查看

报告,运行维护人员可以监控系统压力和容量,当接近系统压力上限时,发出警报提醒扩容。
 
但这种方法不能作为主要监测手段,只能作为辅助监测。毕竟监控就是实时了解系统状态。在

这方面,使用了监测系统。目前有很多开源的监控系统,比如cacti,zabbix等。大多数监控系

统以图表的形式显示监控指标。
 
大多数监控系统基于简单网络管理协议。SNMP是衡量性能指标的通用标准。大多数网络设备

和服务器设备都支持这个协议,所以我们的监控系统可以通过这个协议获取设备的监控指标。

既然是“简单”的网络管理协议(其实SNMP一点也不简单),说明单靠SNMP并不能满足所有的监

控要求,所以这些监控系统也支持自定义采集程序。要拓展,如果公司业务复杂,一般开源的

监控系统不能满足需求,公司会开发合适的监控系统。这通常是为了满足自定义监控,一般包

括。
 
(1)日志监控,从日志文件中匹配关键字,统计相应的数字,如状态码数或超过一定时间的处理

次数。(2)端口监控,检测端口是否活动,一般用来判断Server程序是否“活动”,但不是很可靠

。有时服务器端口仍被占用,但没有响应。此时,端口监控仍然指示正常。(3)语义监控,可靠

得多,模拟客户端向服务器发送请求,然后服务器给出响应进行监控。(4)结构监控,只有绑定

到特定的流程才可行,也就是被监控的模块会处理这个结构。
 
 
此外,还可以通过模拟用户点击来进行监控,即模拟用户行为,这是最真实的监控,效果最好。

但是因为这种模拟程序是捕捉网页中的dom标签元素,所以只要网页发生变化,重写监控就比

较麻烦。回到正题,我们都在监控系统中设置报警阈值,我们都在监控图中看到了接近报警阈

值的紧迫性。如果接近门槛,运维人员就会开始膨胀。
 
 
扩容的前提是压力接近模块的极限。例如,一个模块每秒处理的最大请求数(qp)为300,当实

际qp接近250左右时,应考虑容量扩展。如何判断模块已经接近最大处理极限?一种方法是在

程序的日志文件中添加请求处理时间字段,这样我们就可以知道每个请求的处理时间。如果任

何一页的处理时间过长,都要考虑扩容。这里说的处理时间长短不是固定的,要结合业务。如

果页面主要消耗CPU资源,页面的处理时间不宜过大,最长不要超过几百毫秒。如果页面的功

能和存储或者外网有关,会比较长,超过一秒是正常的。

 
一般情况下,我们也会统计模块的各种请求或者大于某个值的请求的处理量,按照分钟或者更

小的时间粒度在监控系统中绘制。
 
 
MySQL通用监控。此外,大多数模块都有请求超时设置。例如,一个模块将请求的最大处理时

间设置为30秒。超过30秒的请求会在日志中写入错误信息,通常会有警告、错误或致命等关键

字。我们可以在监控日志中匹配这些关键字,以统计每单位时间由于超时而报告错误的请求数

量。当达到一定的极限值,就意味着离扩容不远了。为了使监控可视化,这种日志监控通常被

添加到监控系统中。同样,如果监控系统不支持这种监控,我们可以自己编写监控程序,然后

输出自己的图像。通用开发语言有现成的图形函数可以调用,或使用第三方工具,如rrdtool或

前端图形库,如highcharts和amcharts。
分享: