微服务监控之一:Metrics让微服务运行更透明
摘要
让微服务运行状态清晰可见。
嘉宾演讲视频回顾及PPT:http://t.cn/R8b6i85
Metrics是什么
直译是“度量”,不同的领域定义有所区别,在微服务领域中的定义:
“对微服务的某个指标给予一个可量化程度的测量”
Metrics应该具备的特性:
Comparative(可对比):指标能够在不同的微服务或同一个微服务的多个实例之间比较;
Understandable(易理解):指标所衡量的对象、计算方法和输出的结果值都是容易理解的;
Ratio(理想的比例):理想结果可预见,可以立即用于比较。
如何判定Metrics实现的优劣?
衡量Metrics实现优劣的标准有:
1、关键指标覆盖全,这是能够快速定位问题的基础;
2、计量准确,错误的计量和算法只会帮倒忙;
3、高性能低资源占用,毕竟Metrics是可选模块,要保证资源占用不超过10%;
4、无侵入或低侵入,同样,由于Metrics是可选模块,让用户修改代码是不可取的。
Metrics的分类
Metrics有很多种分类方式,在技术实现上我们偏向以取值方式区分为两种。
1、直接取值。任何时候都能够立刻获取到最新值,例如资源使用率,包括CPU使用率,线程数,Heap使用数据等等,还有调用累加次数,当前队列长度等等。
2、统计取值。经过一个特定的时间周期才能够统计出值,这个时间间隔我们可以称为窗口周期(Window Time)或统计周期,例如:
a) 多值取其一的,比如Max、Min、Median(中位值);
b) 与时间相关的,比如TPS(transaction per second);
c) 与个数相关的,比如累加平均值、方差等等;
获取此类Metrics的值,返回的是上一个周期的统计结果,具有一定的延后性。
为什么需要Metrics

上图是传统的单体应用,多模块紧耦合,Client Application调用API,然后模块在内部相互调用,还会涉及操作数据库的一大堆逻辑,随着功能的不断增加,它的体积会越来越大,这样的系统开发人员维护起来会头晕脑胀,到某个阶段重构几乎是不可避免的。
但是这种单体应用却很受系统运维人员欢迎,维护它的工作很简单。

进入微服务时代之后,我们会将单体应用切分成很多微服务,还会使用负载均衡,这样一个单体应用最终可能转化为成百上千的微服务实例。
所以微服务化后,问题没有消失,只是转移了,开发人员把这个“锅”甩给了运维人员。因此微服务平台化或上云成为趋势,通过自动化程度很高的平台工具降低运维人员的负担。要使这些平台工具发挥作用,例如制定报警策略、弹性伸缩策略等等,必须提供丰富的Metrics数据作为支撑。
开源领域的Metrics比较
由于Metrics的重要性日渐凸显,开源领域已有较多实现,热门的包括Netflix Servo、Dropwizard Metrics和Spring Boot Actuator等,比较如下:

我们结合ServiceComb Java Chassis的优势,更进一步开发了包含关键指标无侵入自动打点,丰富的统计维度和极低的资源占用等诸多优点的Metrics系统。
ServiceComb Java Chassis中的Metrics
ServiceCombJava Chassis是一个包含了服务注册,服务发现,服务配置以及管理功能的微服务框架,因此我们决定提供内置的更强大的Metrics功能:
1、开箱即用,不写一行代码输出关键Metrics,全面覆盖调用数、TPS、Latency等;
2、基于Netflix Servo,使用固定统计周期(稍后会详细介绍);
3、多维度统计,帮助用户抽丝剥茧快速定位问题,支持的维度包括:
a) 微服务实例(Instance)级和操作(Operation)级;
b) 操作结果成功(Success)和失败(Failed)(开发中);
c) Transport区分Rest和Highway(评估中)。
依赖关系

Metrics-Core是我们的核心功能模块,之上的Metrics-Extension模块用于扩展。在Metrics Extension里面,我们实现了Prometheus的集成,它依赖于Prometheus Java Client和Metrics-Core。
Metrics默认输出列表

其中对于时延类的Metrics,都包含max、min、average三个指标。
使用多周期适应不同的场景需求
为了具备高性能的同时又能保持极低的开销,我们使用固定周期的方式实现Metrics统计,同时支持多周期以适应不同的场景需求,多周期的原理可以看下面的例子:

例如统计报告中的日报、周报、月报、季报、年报就是使用了多周期满足不同的统计需求。
支持Health Check
微服务很可能依赖数据库、其它微服务或中间件,这些组件状态正常是微服务能够正常提供服务的前提,通过Health Check使得微服务支持检查依赖组件的状态并返回,可以用于制定策略,也可以用于Dashboard展现。
相比使用Metrics返回一个状态值,Health Check的返回更丰富,可以附带额外信息,例如详细的错误Trace。
未来的开发计划
未来Java Chassis Metrics将强化如下几个方面的内容:
1、我们需要实现或对接一个更优秀的可视化界面用于展示Metrics的更多特性,仅仅是集成Prometheus是不够的(SCB-252);
2、我们将研究如何与主流的监控系统例如Zabbix、Nagios、Cacti等更简单高效的集成,以及提出通用的集成第三方监控系统的方案;
3、我们将强化Metrics作为数据源,如何更好的支持在监控系统中制定报警、弹性伸缩等策略,降低运维人员的工作量,提升运维效率。
微服务监控之一:Metrics让微服务运行更透明的更多相关文章
- 深入详解美团点评CAT跨语言服务监控(二) CAT服务端初始化
Cat模块 Cat-client : cat客户端,编译后生成 cat-client-2.0.0.jar ,用户可以通过它来向cat-home上报统一格式的日志信息,可以集成到 mybatis.spr ...
- NOS服务监控实践
本文来自网易云社区 作者:王健 一. 背景 此处所说的服务监控程序,是通过模拟用户的请求,对一个系统的服务质量进行监控的程序.服务监控程序的主要目的是,从用户的角度出发,通过发送端到端的请求,确认系 ...
- 第七模块 :微服务监控告警Prometheus架构和实践
119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...
- 带你十天轻松搞定 Go 微服务系列(八、服务监控)
序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator.提到Actuator,又不得不提Micrometer ...
- 微服务监控zipkin+asp.net core
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...
- spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin
参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...
- 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)
背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...
- 使用 Spring Cloud Sleuth、Elastic Stack 和 Zipkin 做微服务监控
关于迁移微服务架构,最常被提及的挑战莫过于监控.每个微服务应独立于其他服务的运行环境,所以他们之间不会共享如数据源.日志文件等资源. 然而,较容易的查看服务的调用历史,并且能够查看多个微服务的请求传播 ...
随机推荐
- 利用paramiko获取上传下载远程服务器的资源信息
# -*- coding: utf-8 -*- import paramikohostname='192.168.76.10'username='root'password='123456'param ...
- Android中设置自己软件的铃声+震动
有时候一些通讯软件需要这些个功能,比如说收到短信,通知等,要求手机发出铃声,或震动,或发光以提示用户知晓. 往往手机都是有默认设置的,比如说用户开启了铃声+震动:只铃声不震动:完全静音等等... 这个 ...
- 多校HDU5723 最小生成树+dfs回溯
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Netsh 命令详解
1. help帮助指南 2. 常用命令介绍netsh interface ip show addressnetsh interface ip dumpnetsh interface ip dump & ...
- android、ipone在文本框中输入文字的不同
1.android机会输入时会在键盘上先显示,你确定后再填充如文本框 2.ipone机是你输入时就直接填充到文本框,当你选择输入信息时,就会先把文本框的内容清空,在填充选择的文字,这时就会有个问题,如 ...
- DB2导入导出方法总结
1.导出 DEL 文本文件 export to D:\T_TESTTABLE20121220.del of del select * from T_TESTTABLE 2.导出 ixf 文本文件.i ...
- javascript删除JSON元素
首先要搞清JSON的数据格式,我这里所说的JSON都是指javascript中的. JSON数据是由对象和数组数据结构组成,我们只要学会javascript中对对象和数组的删除方法即可对JSON项进行 ...
- Spring Boot入门——JPA
JPA最大的特点就是可以根据@Entity自动创建你数据库表,用户只需要声明持久层的接口,不需要实现该接口 1.JPA概念 JPA全称Java Persistence API,JPA通过JDK5.0注 ...
- dede数据库表结构和dedecms数据库字段说明
表名:dede_addonarticle (ENGINE=MyISAM/CHARSET=gbk) 说明:Top 字段名 说明描述 具体参数 aid 文章ID mediumint(8) unsigned ...
- JAVA动态代理的全面深层理解
Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过 ...