打造五层轻量监控体系
监控系统中的监控功能可以告诉我们系统的哪些部分正常工作,哪里出现了问题;监控系统具有的可观察性可以帮助我们判断出有问题的地方为何不能工作了。除了监控功能和可观察性外,数据分析对监控系统来说也非常重要。监控系统获取的数据可以使用大数据、漏斗分析、分析模型和算法等进行分析(Analysis)。
工欲善其事,必先利其器。一个完善的监控系统是 IT 系统构建之初就该考虑的关键要素。监控系统可以贯穿于移动端、前端、业务服务端、中间件、应用层、操作系统等,渗透到 IT 系统的各个环节。通常情况下,监控系统分为端监控、业务层监控、应用层监控、中间件监控、系统层监控这 5 层。
端监控:针对用户在体验上可以感知的对象进行监控,如网站、App、小程序等。有些公司会设置专门的端用户体验团队负责进行端监控。在移动客户端的系统中,端监控的对象主要有 H5、小程序、Android 系统、iOS 系统等,完善的端监控可以反馈地域、渠道、链接等多维度的用户体验信息;用户终端为传统的 Web 页面时,端监控仍会围绕用户体验采集数据,比如页面打开速度(测速)、页面稳定性(JS)和外部服务调用成功率(API),这 3 个方面的数据反映了 Web 页面的健康度。对于端上数据的采集和监控,除了有 SPM(超级位置模型)、SCM(超级内容模型)、黄金令箭(交互采集模型)等理论支撑外,还有一系列相关工具、相关系统与大数据分析提供实践支撑。
业务层监控:对于业务层,可按需深度定制监控系统,实现对业务属性的监控告警功能,生成业务数据监控大盘。比如用户访问 QPS、DAU 日活、转化率、业务接口(如登录数、注册数、订单量、支付量、搜索量)等都是常见的监控对象。
应用层监控:主要是对分布式应用和调用链应用的性能进行管理和监控,如对 Spring Boot、JVM 信息、服务链路、Dubbo 等应用在进行诸如 RPC 调用、Trace 链路追踪动作时产生的数据进行监控。
中间件监控:监控的主要对象是框架自身的埋点、延迟、错误率等。这里的中间件包括但不限于消息中间件(RabbitMQ、Kafka、RocketMQ 等)、数据库中间件(MySQL、Oracle、PostgreSQL、TIDB、PolarDB 等)、数据库连接池中间件(HikariCP、Druid、BoneCP 等)、缓存中间件(Redis、Memcached 等)和 Web 服务中间件(Tomcat、Jetty 等)。
系统层监控:如何对系统层进行监控,是运维工程师最关心的问题。Linux 系统的运维基础采集项,主要包含 CPU、Load、内存、磁盘 I/O、网络相关参数、内核参数、ss 统计输出、端口、核心服务的进程存活情况、关键业务进程资源消耗、NTP offset 采集、DNS 解析采集等指标。这些都可以作为对系统层监控的关键指标。另外,网络监控也是系统监控中很重要的部分,对交换机、路由器、防火墙、VPN 进行的监控都属于网络监控的范畴,内网和外网的丢包率、网络延迟等也都是很重要的监控指标。
市面上的监控系统可以说是五花八门,Apache 的 SkyWalking、百度的 DP、美团的 CAT、蚂蚁金服的九色鹿、宜信的 UAVstack、滴滴的 Omega、360 和头条的 Sentry、腾讯的 badjs、阿里云的 arms,以及已经商业化的 Fundbug、听云和神策等,都是很知名的监控系统。每种监控系统都有各自的价值,通常来说,Zabbix 是针对系统层的监控系统,ELK(Elasticsearch+Logstash+Kibana)主要是做日志监控的,而 Prometheus 和 Grafana 可以实现对端、业务层、应用层、中间件、系统层进行监控,因此 Prometheus 是打造一站式通用监控架构的最佳方案之一。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/5c22dee8ce35a6acfbeaf8d63】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论