监控:系统构架重要的一环
监控非常有用,不仅能及时预警发现故障,事后还能提供详实的数据用于追查定位问题。
监控也非常重要,从产品的角度来看,没有监控意味着产品是不可靠不安全的。从技术的角度来看,没有监控意味着分析bug就如同盲人摸象,不知下次故障何时发生,出现故障后毫无头绪,无法解决。
说到监控大家首先想到的是运维监控,不过监控不仅仅是运维的工作。后端可以有后端的监控(如监控php的致命错误),前端也可以有前端的监控(如监控app闪退)。甚至产品运营都要各自的监控,它是一种实用方法。
运维监控:
目标:
1.实时监控系统
2.能实时反馈系统状态
3.保障服务安全稳定
4.保证产品稳定运行
方法:
1.了解监控对象
2.分析监控对象有哪些指标,例如cpu的指标有使用率、负载、用户态、内核态、上下文切换
3.给每个指标设置阈值,可以设多个阈值,例如提醒阈值,警告阈值,故障阈值。
4.超过提醒/警告/故障阀值时需要设计处理流程,例如在管理端醒目显示,给相关责任人发送消息等等
作用:
1.发现问题
2.定位问题
3.可以第一时间解决问题
4.总结过往问题为系统优化提供方向。
工具:
zabbix(神器),有它就够了!是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的agent代理,也支持snmp、ipmi、jmx、telnet、ssh等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做的非常优秀。
从以上各种监控系统的对比来看,zabbix都是具有优势的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。
流程:
1.采集各种指标(种类繁多)的数据值。
2.将采回得数据存储到db
3.分析数据
4.展示数据和结论
5.超过阈值报警
6.可以设置处理流程,例如自动重启等等。
细类:
硬件监控,系统监控 ,应用监控 ,网络监控 ,流量分析 ,日志监控 ,安全监控 ,api监控 ,性能监控 ,业务监控等等。
这里的每个分类都可以讲很多,就不展开了,需要了解的自行百度。当然zabbix工具基本可以覆盖这些监控。
软件开发中的监控思想:
软件能够上线并不意味着软件运行过程中不会出现bug,服务器硬件不会出现故障,进程不会假死等等很多问题。最好的效果是即使出现故障也要是负责人第一时间知道而不是用户先投诉。
软件开发的过程中可以考虑的监控手段有一下这些:
-
心跳检测(比较适合客户端模式的软件):软件定时发送心跳包,而监控程序不停的检测是否有心跳,如果检测到说明软件已经挂掉了或者假死中。
-
通过异常/错误处理过程将错误信息发给责任人,每种编程语言都有异常/错误处理,我们可以自定义异常/错误处理类/方法,将错误/异常信息第一时间发送给开发者。
一个例子:监控线上php的致命异常
具体的实现思路是这样的:
1.php产生致命错误会通过日志类记录这个致命的bug。
2.在日志类中埋入一个钩子程序(切面编程思想)
3.通过钩子程序将错误信息发布到kafka(异步处理,防止阻塞)
4.另一个程序订阅kafka中的错误信息,分析后,将错误信息通过钉钉发送给开发者。
5.开发者第一时间获取到错误信息,立马定位修改bug。
6.bug及时修复上线,避免重大损失。
欢迎大家讨论和指正!!!