监控是微服务治理的一个重要环节,监控系统的完善程度直接影响到咱们微服务质量的好坏,咱们的微服务在线上运行的时候有没有一套完善的监控体系能去了解到它的健康状况,对整个系统的可靠性和稳定性是很是重要。ios
一个比较完善的微服务监控体系须要涉及到哪些层次,以下图,大体能够划分为五个层次的监控spring
通常是由运维人员进行负责,涉及到的方面比较接近硬件体系,例如网络,交换机,路由器等低层设备,这些设备的可靠性稳定性就直接影响到上层服务应用的稳定性,因此须要对网络的流量,丢包状况,错包状况,链接数等等这些基础设施的核心指标进行监控。sql
涵盖了物理机,虚拟机,操做系统这些都是属于系统级别监控的方面,对几个核心指标监控,如cpu使用率,内存占用率,磁盘IO和网络带宽状况数据库
涉及到方面就跟服务紧密相关,例如对url访问的性能,访问的调用数,访问的延迟,还有对服务提供性能进行监控,服务的错误率,对sql也须要进行监控,查看是否有慢sql,对与cache来讲,须要监控缓存的命中率和性能,每一个服务的响应时间和qps等等浏览器
比方说一个典型的交易网站,须要关注它的用户登陆状况,注册状况,下单状况,支付状况,这些直接影响到实际触发的业务交易状况,这个监控能够提供给运营和公司高管他们需须要关注的数据,直接可能对公司战略产生影响。缓存
一个应用程序可能经过app,h5,pc端的方式交付到用户的手上,用户经过浏览器,客户端打开练到到咱们的服务,那么在用户端用户的体验是怎么样,用户端的性能是怎么样,有没有产生错误,这些信息也是须要进行监控并记录下来,若是没有监控,有可能用户的由于某些缘由出错或者性能问题形成体验很是的差,而咱们并无感知,这里面包括了,监控用户端的使用性能,返回码,在哪些城市地区他们的使用状况是怎么样,还有运营商的状况,包括电信,联通用户的链接状况。咱们须要进一步去知道是否有哪些渠道哪些用户接入的时候存在着问题,包括咱们还须要知道客户端使用的操做系统浏览器的版本。springboot
简单来讲,这个就是咱们成体系化的监控分层,每个层次都很是的重要,通常状况下,一个问题发现的状况下,比较大几率会先暴露在用户端或业务层,好比来讲,咱们的订单量降低了,业务人员和开发人员会先从上到下去逐层检查是在哪个层出现了问题,先肯定是否哪一个接口调用比较慢,哪一个服务调用出现延时,再看是否哪一个机器负载太高了,而后再进一步往下一个层去看,是不是网络调用不稳定致使。因此一个好的监控体系,在每个层次都很是的重要。网络
刚说的是从层级方面去进行监控,下面继续来看下,哪一些要点能够进行监控架构
在微服务运行的体系下,咱们通常把监控的agent分散到各个服务身边,agent分别是收集机器和服务的metrics,发送到后台监控系统,通常来讲,咱们的服务量很是大,在收集的过程当中,会加入队列,通常来讲用kafka,用消息队列有个好处就是两边能够进行解耦,还好就是能够起到庞大的日志进行一个缓存的地带,并在mq能够作到高可用,保证消息不会丢失。app
日志收集目前比较流行的是ELK的一套解决方案,(Elasticsearch,Logstash,Kibana),Elasticsearch 分布式搜索引擎,Logstash 是一个日志收集的agent,Kibana 是一个查询的日志界面。
metrice会采用一个时间序列的数据库,influxDB是最近比较主流时间数据库。
微服务的agent例如springboot也提供了健康检查的端点,能够检查cpu使用状况,内存使用状况,jvm使用状况,这些须要一个健康检查机制,可以按期对服务的健康和机器的健康进行check,比较常见的是nagios,zabbix等,这些开源平台可以按期去检查到各个微服务的检查程序并可以进行告警给相关人员,在服务未奔溃以前就能够进行提早的预先接入。
博客地址:「微服务系列 11」微服务系统监控分层