现在的位置:首页  /  云计算培训 >云计算技术教程

运维程序员如何做到对php业务监控和故障发现

来源: 薪享宏福
发布时间: 2019年03月25日
分享到:
大部分网站可能是等用户抱怨的时候才发现有故障,而这时不知道已经影响了多少人、出现了多久,这时候老板很可能也已经发现了,运维处理起来会很仓促,压力也很大。好的故障处理是要做到比用户和老板先发现故障,甚至还没有出现故障,而只是一个风险 点的时候就把它解决掉。所以故障发现是非常有必要的,故障发现最重要的方式就是监控。大部分故障的原因是性能问题达到了不可容忍的程度,只要关注这些性能指标的变化,就可以提前发现故障的苗头。说起来很容易,但是应该如何做呢,首先我们可以回顾有哪些点可以发现故障线索,哪些点需要监控,应尽可能地收集性能数据和用户访问数据, 智能监控, 关联分析,而不是等到业务完全不可用了时才发现。
 
1、监控点和监控方法
业务的URL :如果用户访问的页面都出现了问题,这是故障最直观的体现,则要加入URL监控,设定合理的超时值。可以使用服务器模拟用户访问,或者使用基调、博锐、监控宝等第三方服务。
 
PHP状态信息:监控PHP-FPM的PHP状态( status )页面,查看当前正在处理的请求、RPM等 ,定期获取,并记录到监控系统,设定好阈值, 进行告警,多台服务器可以归并告警。
 
错误日志的数量和比例:监控PHP的错误日志和FPM的错误曰志,还有慢日志。可以通过数量得到错误率。通过日志内容进行双重监控。
 
PHP访问处理时间:通过监控PHP的访问日志得到每个PHP请求的响应时间。
 
业务日志:可以在业务代码中的关键处埋点,如果出现错误或特别耗时的操作超时了则打印日志,使得运维对日志做监控。
 
吞吐量(单位为rpm ,每分钟请求数) :通过访问日志可以得到RPM,对突发的请求量提前介入观察,并记录下来作为长期统计值。
 
进程存活和端口:监控PHP进程是否存活,监控PHP的端口是否存活。
 
Web服务器的错误日志:Nginx到PHP的fastcgi_connect、read timeout、send timeout等 的超时时间,如果出现超时则写入Nginx错误日志,可以监控出现超时的日志数量。
 
MySQL等的监控: PHP的性能严重依赖后端的性能,所以后端也要加强监控。MySQL可监 控的项目非常多,具体请查阅MySQL的show status命令。
 
性能分析系统:上面都是各种总体的监控,一旦出现故障,排查还是无法准确定位,这时如果有一套性能分析系统,也许就能迅速发现PHP的故障点了,从而可以反馈给研发做快速处理,而不是呼叫研发上线慢慢分析和排查并最终处理。
 
外部接C的性能:跨应用性能问题跟踪,比如脚本调用外部资源失败或超时。
 
合适的报警机制:根据阈值告警出来之后,可以通过各种渠道发送给运维和研发,预警用邮件,告警用短信、IM、 电话、定期出报告等。
 
业务日志监控:很多PHP程序员不太习惯使用日志、也不太喜欢打日志、对监控问题不够重视,容易犯以实现功能为唯一目标的错误。这些对大型互联网来说都是不可取的,需要运维和研发一起配合,做好日志和监控,只有这样才能打造出高性能的PHP服务,为海量用户提供服务。
 
2、监控系统
监控系统是运维的核心系统。我们不可能每次都靠人工上服务器去分析问题,所以好的做法是自动把分析结果存入监控系统中,定期持续地记录数据。需要分析时到监控系统中去查看即可。监控系统可以使用开源的Zabbix、Nagios等 ,这些都是优秀的开源监控系统,大公司往往会选择自建监控系统。例如,如何把PHP状态( status )监控上报到Zabbix ,在Zabbix中展示出来。在服务器中定期执行:
 
/usr/bin/curl -S "ttp://127.0.0. 1/php_ status?xml" |awk -F'<|>' '$2 ~ /^
active-processes/ {print $3}'
 
即可得到活动的工作进程数,也就是当前并发处理的请求数。
配置zabbix. agentd.conf :
 
UserParameter-active.processes,/usr/bin/curl -S "tp://127 .0.O.1/php_
status?xml" |awk -F'<>' '$2 ~ /^active- processes/ {print $3}', active
 
通过Zabbix相关模板,即可展示出来。网上有大量的此类教程,可自行查阅。
 
3、可用性管理
通过上面所讲的各种方法可以发现网站各个点的性能问题,有没有什么办法可以衡量整个网站业务的质量呢?如果老板问起,最近网站的运行质量怎么样,运维总不能说最近告警少了很多,或者多了很多吧。这里我们引入可用性管理的概念,可用性管理是把业务综合质量通过量化的数据表达出来,并且能够报告给业务方和老板,从而量化业务的质量,和运维工作的价值。
 
可用性管理:在长期分析性能数据的基础上形成的一套可用性的标准。例如我们定义首页响应时间在1500ms内即认为是正常的;或者PHP-FPM工作进程最大达到总进程的80%是安全的;如果某时刻慢日志数量大幅增加了则可能是出问题了。前面列出的分析点都可以形成一个指标,业界称服务等级指标( SLI )。我们可以在团队内部确定几个大家普遍关心的指标,形成服务等级目标( SLO),期望达到的性能目标(如响应时间在1 500ms以内,整个服务的RPM达到500以上等)。
 
持续性能管理:性能是一个长期的、动态变化的过程, 应该长期自动采集性能数据,以反映业务的性能变化情况。比如每分钟定期采集请求的响应时间,就能得到一条性能曲线图。上面所说的每一个性能分析点都是可以通过长期采集数据来得到曲线图的。拿着这个指标就能定期汇报说,我们的网站性能下降了或提高了。

相关推荐:

sysVinit方式下系统的启动特点

systemd方式 下系统的启动特点

sysVinit的正常启动顺序详细解析教程

运维培训班的学员要明白开发同样重要

PHP运维常见问题以及解决办法

云计算运维工程师遇到php故障该如何处理

运维工程师如何提升桌面云存储性能,有哪些方式?

典型的桌面云网络配置场景案例分享