译者注

Peter Bourgon原作: Metrics, tracing, and logging

译者:吴晟

原作发表时间: 2017年2月21日

这是在OpenTracing和分布式追踪领域内广受欢迎的一篇博客文章。在构建监控系统时,大家往往在这几个名词和方式之间纠结。 通过这篇文章,作者很好的阐述了分布式追踪、统计指标与日志之间的区别和关系。

正文

今天,我很荣幸的参加了2017分布式追踪峰会(2017 Distributed Tracing Summit), 并和来自AWS/X-Ray, OpenZipkin, OpenTracing, Instana, Datadog, Librato,以及其他更多组织的同仁进行了愉快的沟通和讨论。 其中一个重要的论点,是针对监控项目的范围和定义的。作为一个分布式追踪系统,应该管理日志么?从不同角度看来,到底什么是日志?如何通过一张图形象的定位这些形形色色的系统?

总体说来,我觉得我们是在一些通用的名词间纠结。我想我们可以通过图表来定义监控的作用域,使各名词的作用范围更明确。 我们使用维恩图(Venn diagram)来描述Metrics, tracing, logging三个概念的定义。他们三者在某些情况下是重叠的,但是我尽量尝试定义他们的不同。如下图所示:

Metric的特点是,它是可累加的:他们具有原子性,每个都是一个逻辑计量单元,或者一个时间段内的柱状图。 例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统计; 输入HTTP请求的数量可以被定义为一个计数器,用于简单累加; 请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。

logging的特点是,它描述一些离散的(不连续的)事件。 例如:应用通过一个滚动的文件输出debug或error信息,并通过日志收集系统,存储到Elasticsearch中; 审批明细信息通过Kafka,存储到数据库(BigTable)中; 又或者,特定请求的元数据信息,从服务请求中剥离出来,发送给一个异常收集服务,如NewRelic。

tracing的最大特点就是,它在单次请求的范围内,处理信息。 任何的数据、元数据信息都被绑定到系统中的单个事务上。 例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;一次HTTP请求的业务性ID。

根据上述的定义,我们可以标记上图的重叠部分。

当然,大量的被监控的应用是具有分布式能力(Cloud-native)的应用,逻辑处理在单次请求的范围内完成。因此,讨论追踪的上下文是有意义的。 但是,我们注意到,并不是所有的监控系统都绑定在请求的生命周期上的。他们可能是逻辑组件诊断信息、处理过程的生命周期明细信息,这些信息和任何离散的请求时正交关系。 所以,不是所有的metric和log都可以被塞进追踪系统的概念中,至少在不经过数据加工处理是不行的。又或者,我们可能发觉使用metric统计数据,对应用监控有很大帮助,例如prometheus生态,可以量化的实时展现应用视图;相应的,如果我们将metric统计数据强行使用针对log的管道来处理,将使我们丢失很多特性。

那么,在这里,我们可以开始对已知的系统进行分类。如:Prometheus, 专一的metric统计系统,随着时间推移,也许会进化为追踪系统,进而进行请求内的指标统计,但不太可能深入到log处理领域。ELK生态提供log的记录,滚动和聚合,并在其他领域不停的积累更多的特性,并集成进来。

另外,我发现通过维恩图的方式展现三者关系时,会正巧展现出一个附加效应。在这三个功能域中,metric倾向于更节省资源,因为他会“天然的”压缩数据。相反,日志倾向于无限增加的,会频繁的超出预期的容量。(有另一篇我写的关于这方面的文章,查看,译者注:未翻译)。所以,我们可以在图上,绘制出容量的需求趋势,metrics低到logging高, 而trace可能处于他们两的中间位置

也许,这不是最完美的方式描述这三者的管理,但我从会议现场收到的反馈来看,这个分类还是相当不错的:随着三者的关系越清晰,我们越容易建设性的讨论其他问题。如果你尝试对产品的功能进行定位,你可能也需要这张图,在讨论中,澄清产品的位置。

Metrics, tracing 和 logging 的关系相关推荐

  1. Golang 微服务系列 go-kit(Log,Metrics,Tracing)

    go-kit Log & Metrics & Tracing 微服务监控3大核心 Log & Metrics & Tracing Log Log 模块源码有待分析(分析 ...

  2. 代码视角深入浅出理解 DevOps | 原力计划

    作者 | 倚天码农 责编 | 唐小引 头图 | 下载自东方 IC 出品 | CSDN 博客 对于 DevOps 的理解大家众说纷纭,就连维基百科(Wikipedia)都没有给出一个统一的定义.一般的解 ...

  3. 笔记:腾讯CodeReview规范

    原文章地址:https://mp.weixin.qq.com/s/MzozROQY9szDF1GCOFrUuw 为什么要做code review 同学们可以在 review 过程中做到落地沟通,不再是 ...

  4. ajax请求必须打断点才能成功,Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)...

    以前写过一个程序,发现用断点调试的时候,一步步的运行,程序是可以的,但是去了断点程序就出现了问题. $(document).ready(function(){ var arra=new Array() ...

  5. 监控、链路追踪、日志这三者有何区别?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/mFJ6 1. 监控.链路追踪.日志 ...

  6. 快速搞懂监控、链路追踪、日志三者的区别

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Xenojoshua 来源 | https:/ ...

  7. 开放分布式追踪(OpenTracing)入门与 Jaeger 实现

    摘要: 分布式系统的运维挑战 容器.Serverless 编程方式的诞生极大提升了软件交付与部署的效率.在架构的演化过程中,可以看到两个变化: 应用架构开始从单体系统逐步转变为微服务,其中的业务逻辑随 ...

  8. 监控、链路追踪、日志的区别

    作者:xenojoshua xenojoshua.com/2019/04/monitoring-tracing-logging 1. 监控.链路追踪.日志 对于一个系统来说,监控.链路追踪.日志的这三 ...

  9. OpenTracing 详解

    OpenTracing 于 2016 年 10 月加入 CNCF 基金会,是继 Kubernetes 和 Prometheus 之后,第三个加入 CNCF 的开源项目.它是一个中立的(厂商无关.平台无 ...

最新文章

  1. linux cpu漏洞,【图片】为什么linux mint上cpu漏洞直到现在也没完全修复?_linux吧_百度贴吧...
  2. Apache TinkerPop毕业成为顶级项目
  3. TCL with SNPS - get_object_namesizeof_collectionstring
  4. Tkinter中常用的函数
  5. Tensorflow源码解析1 -- 内核架构和源码结构
  6. 应用指定显示到副屏_LED灯杆屏广泛应用逐渐成为智慧城市信息化的重要窗口
  7. 开启mongodb数据库命令行_【赵强老师】使用MongoDB的命令行工具:mongoshell
  8. ansible 使用主机IP批量修改机器名
  9. Guitar Pro8(简称GTP8)正式版吉他谱神器
  10. 二值图像游程matlab,二值图像游程编码matlab代码.doc
  11. 从qire123上抓取bdhd下载地址的firefox extension
  12. 对电话号码进行格式校验、脱密、加密、解密、掩码等的操作介绍
  13. js将数组对象中属性值相同的对象合并成一个children
  14. 脏写、脏读、不可重复读、幻读的区别
  15. 汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)
  16. 绝代芳华!AI复原90年前梅兰芳:眉目传情,栩栩如生
  17. 深圳/河南/天津/山东产品经理国际认证NPDP招生简章
  18. Windows下的Socket编程——基本步骤
  19. 深入浅出Dcoker学习摘要
  20. 九.外包/采购/合同

热门文章

  1. 如何成为有效学习的高手(许岑)——思维导图
  2. 前端几个笔试题及答案(bd)
  3. 个人项目耗时对比记录表
  4. 二维数组foreach嵌套遍历,判断连续3天以上的算有效数据
  5. 《C语言及程序设计》实践参考——当年第几天(数组方案)
  6. ArcGISServer10安装与地图发布
  7. 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
  8. linux 批量替换
  9. 介绍一款受欢迎的.NET 开源UI库
  10. 自己搭建一个k8s环境