美文网首页
服务治理 - 生成metrics metricsmiddlewa

服务治理 - 生成metrics metricsmiddlewa

作者: 赤子心_d709 | 来源:发表于2019-03-07 11:32 被阅读0次

背景

rpc请求的时候,上游调用下游,希望能记录每次调用标识以及结果,以后看服务稳定性相关报表的时候方便直接可视化,比如耗时,调用方名字,被调用方名字,集群名等,如果每个业务代码都自己写一遍调用不同下游的代码,过于繁琐
需要有一个记录metrics的组件,封装所有上游调用下游的请求

metrics说明

metrics是用来显示整体调用情况的,可tsdb和grafana配合使用,这里不展开可以参照refer
metric核心函数

emit_counter(key,n,tagkv):代表某个key计数+n,tagkv表示附带信息map,可用来记录成功失败次数
emit_timer(key,time,tagkv):记录某个key花费时间,可用来记录一次请求耗时

实现

定义key

调用成功计数SUC_COUNTER_KEY:
${from}.call.success.throughput

调用失败计数FAIL__COUNTER_KEY:
${from}.call.fail.throughput

调用成功耗时:SUC_TIMER_KEY
${from}.call.success.latency.us

调用失败耗时:FAILE_TIMER_KEY
${from}.call.fail.latency.us

定义tagkv

可以作为后续按tagkv分类查询,包含

from_method:调用方名字
called:被调用方服务标志
method:被调用方的方法名
to_cluster:被调用方的集群名
from_cluster:调用方集群名称
from:被调用方名字
status_code:调用结果码(成功,失败,异常等)
cost:此次rpc请求耗时

记录metrics实现

框架上用middleware,切面等方式(我是以py的django框架为基础,其他语言也有自己的框架),该中间件的处理在upstream调用下游的时候
除了cost和status_code之外,在rpc调用前就能获取到
cost和status_code则在请求处理时记录

成功,则

emit_counter(SUC_COUNTER_KEY, 1, tagkv)
emit_timer(SUC_TIMER_KEY, cost, tagkv)

失败,则

emit_counter(FAIL_COUNTER_KEY, 1, tagkv)
emit_timer(FAIL_TIMER_KEY, cost, tagkv)

思考

cost是哪里获取的

是真正调用rpc前后的时间之差,在该middle更下层

治理metrics的意义

方便可视化查看各个rpc调用的成功失败率,以及成功失败的耗时
并且可以根据metrics发出的结果,计算出pct99,avg等值,由metrics agent发出

refer

http://docs.grafana.org/features/panels/graph/

相关文章

网友评论

      本文标题:服务治理 - 生成metrics metricsmiddlewa

      本文链接:https://www.haomeiwen.com/subject/toaxpqtx.html