监控

监控是互联网软件不可缺少的一部分,当系统出现问题时立即获得通知,然后快速进行响应。

微服务场景下,因为服务的粒度更小,服务之间访问的链路也更多,服务运行在容器云平台上,并且,可以执行快速的,动态的扩缩容,所以,微服务的监控一般需要更多的手段:服务健康监控,服务调用监控,服务调用链路监控,日志统一收集与监控,自定义业务监控等。

监控

监控要能第一时间发现异常,然后告知异常,和帮助边界定位

监控内容与范围

分类 监控对象 监控方式 开源软件
基础设施 硬件、操作系统,网络等 独立应用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复杂的读写使用细节。还包括统一指标的查询展示和告警。

这个中间件/平台的好处和要求:

  1. 以通用一致的方式接入各种监控数据源
  2. 公共的通用层,可以沉淀实时监控技术,和对TSDB的读写等优化
  3. 需要有横向扩展的能力,通过扩容可以实现均衡负载和高可用
  4. 提供统一的自定义查询展示,及异常检测功能。
数据实时处理

海量数据实时接收,计算,存储,检索的解决方案

  • 接收 用于各种监控数据的标准化接入或采集,数据的预计算,利用中间层agent-server,控制实时计算的量,并优化存储和查询等
  • 计算 数据的采样,汇聚等,实时计算需要的监控指标结果 ,一般用flink , spark
  • 存储 计算后数据的存储,常用的有:ES , TSDB(druid, OpenTSDB),Hbase等
监控配置和查询
  • 监控配置

    各业务的原始指标,纬度等配置,用于接入实时计算,保存,查询指标的元数据

  • 查询展示

    指标统一查询展示,支持自定义metric视图

  • 业务监控

    自定义业务检查的规则,利用计算后的指标结果进行异常检查

  • 监控大盘/大图

    定制的业务监控大图,如某业务在全国各省市的实时请求,交易数量和状态

告警平台

异常时消息的统一接入和发送,可以设置业务每天发送的数量限制,和告警收敛等功能;
发送方式一般有:邮件,短信,微信/钉钉等。

其它

APM

APM (Application Performance Management) 应用性能管理,狭义上的APM单指分布式服务调用链路监控,广义上指端到端的每一个层次的全范围监控。

微服务的限流监控

限流是针对微服务接入流量的一种保护,熔断是对调用服务不可用时的保护。通过对流量监控,qps,RT,以及限流的qps等,就可以知道当前的服务流量情况,以及是否需要做出扩容调整。

压测

类似网络探针服务(网络探测监控),可以在边缘计算节点上部署压测流量来模拟用户真实流量,对线上系统进行压力性能测试。

总结

监控,包括提供端到端的各种服务运行时指标的收集,计算,查询展示,异常检测与告警,以及通过云平台来对服务做出可能的修复,如流量的异常指标做出服务扩容。帮助企业快速的发现,定位,分析,解决问题,以及为系统的可用率提供有效保障。

所以,在微服务的体系下,监控不仅是其能否落地的关键部分,而且发挥着重要的位置。