监控是互联网软件不可缺少的一部分,当系统出现问题时立即获得通知,然后快速进行响应。
微服务场景下,因为服务的粒度更小,服务之间访问的链路也更多,服务运行在容器云平台上,并且,可以执行快速的,动态的扩缩容,所以,微服务的监控一般需要更多的手段:服务健康监控,服务调用监控,服务调用链路监控,日志统一收集与监控,自定义业务监控等。
监控
监控要能第一时间发现异常,然后告知异常,和帮助边界定位
监控内容与范围
分类 | 监控对象 | 监控方式 | 开源软件 |
---|---|---|---|
基础设施 | 硬件、操作系统,网络等 | 独立应用agent | Zabbix,Nagios ,Prometheus-NodeExporter |
中间件监控 | 关注基础服务(nginx,mysql,redis,mongoDB等) | 独立应用exporter | Prometheus |
端上监控(监控网络和业务) | 手机端或PC端真实请求情况 | 嵌入网络SDK,埋点SDK,JS SDK | 无 |
网络主动探测 | 网络在不同区域的情况,探测(ping,curl)不同层次(cdn,负载均衡,应用:域名,VIP,check.do等);好处是主动发现 | 独立应用/探针 | 开源无,商业有 |
服务健康指标监控 | 健康的指标:CPU,内存,健康(包括应用内所有组件的情况),运行,环境,线程等指标 | 嵌入SDK,提供endpoint服务或主动上报 | Spring Boot Actuator指标服务,Spring Boot Admin 指标展示 |
服务调用指标监控 | 调用的指标:调用成功,失败,超时和线程拒绝,熔断等的次数,还包括QPS、RT等指标 | 嵌入SDK&中间件 | hystrix-dashboard turbine ,dubbo/hsf 的监控 |
服务调用链路监控 | 关注服务全链路追踪与服务性能RT监控 | SDK&调用链中间件 | SpringCloud Sleuth+Zipkin,Pinpoint,Skywalking,CAT,EgleEye |
服务日志收集监控 | 关注应用服务(容器)日志收集 | 埋点或独立应用采集 | Fluentd和Logstash ELK STACK |
业务监控 | 制定具体业务检查规则,利用指标结果数据进行异常检测监控,如,阀值,同/环比,突升突降等 | 一体化监控平台 | 无 |
监控数据
数据格式化标准
标准化数据格式和监控平台对接,对数据进行计算,检测和保存。
数据上报方式
- 主动上报:监控组件通过消息中间件,Rpc主动发送数据
- 被动上报:监控组件通过暴漏endpoint接口,或日志采集
监控平台
上面包括了从前端到后台微服务,再到底层主机网络的整个监控内容,要构建这样一套监控体系,还需要有一整套海量数据实时监控和告警的平台,形成一体化的监控产品/平台:
监控平台需要打造一个中间层,统一由它来接入各种类型的监控数据源,进行预计算,还有对存储和查询的优化,例如,索引的创建清理和提前sampler,以及各种存储的优势组合等。可以减轻spark/flink实时处理负担,也屏蔽掉底层TSDB复杂的读写使用细节。还包括统一指标的查询展示和告警。
这个中间件/平台的好处和要求:
- 以通用一致的方式接入各种监控数据源
- 公共的通用层,可以沉淀实时监控技术,和对TSDB的读写等优化
- 需要有横向扩展的能力,通过扩容可以实现均衡负载和高可用
- 提供统一的自定义查询展示,及异常检测功能。
数据实时处理
海量数据实时接收,计算,存储,检索的解决方案
- 接收 用于各种监控数据的标准化接入或采集,数据的预计算,利用中间层agent-server,控制实时计算的量,并优化存储和查询等
- 计算 数据的采样,汇聚等,实时计算需要的监控指标结果 ,一般用flink , spark
- 存储 计算后数据的存储,常用的有:ES , TSDB(druid, OpenTSDB),Hbase等
监控配置和查询
监控配置
各业务的原始指标,纬度等配置,用于接入实时计算,保存,查询指标的元数据
查询展示
指标统一查询展示,支持自定义metric视图
业务监控
自定义业务检查的规则,利用计算后的指标结果进行异常检查
监控大盘/大图
定制的业务监控大图,如某业务在全国各省市的实时请求,交易数量和状态
告警平台
异常时消息的统一接入和发送,可以设置业务每天发送的数量限制,和告警收敛等功能;
发送方式一般有:邮件,短信,微信/钉钉等。
其它
APM
APM (Application Performance Management) 应用性能管理,狭义上的APM单指分布式服务调用链路监控,广义上指端到端的每一个层次的全范围监控。
微服务的限流监控
限流是针对微服务接入流量的一种保护,熔断是对调用服务不可用时的保护。通过对流量监控,qps,RT,以及限流的qps等,就可以知道当前的服务流量情况,以及是否需要做出扩容调整。
压测
类似网络探针服务(网络探测监控),可以在边缘计算节点上部署压测流量来模拟用户真实流量,对线上系统进行压力性能测试。
总结
监控,包括提供端到端的各种服务运行时指标的收集,计算,查询展示,异常检测与告警,以及通过云平台来对服务做出可能的修复,如流量的异常指标做出服务扩容。帮助企业快速的发现,定位,分析,解决问题,以及为系统的可用率提供有效保障。
所以,在微服务的体系下,监控不仅是其能否落地的关键部分,而且发挥着重要的位置。