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

Peter Bourgon 原作: Metrics, tracing, and logging

译者:吴晟

正文

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

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

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

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

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

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

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

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

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

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

OneAPM Li 智能日志分析平台可以实时收集数据中心基础架构及应用的海量日志,实时搜索,实时分析,洞悉日志价值。想阅读更多技术文章,请访问 OneAPM 官方技术博客

来源:

OneAPM大讲堂 | Metrics, Tracing 和 Logging 的关系的更多相关文章

  1. 图解Metrics, tracing, and logging

    Logging,Metrics 和 Tracing   最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过, ...

  2. Metrics、Tracing、Logging的融合

    终极目标 OpenTelemetry的终态就是实现Metrics.Tracing.Logging的融合,作为CNCF可观察性的终极解决方案. Tracing:提供了一个请求从接收到处理完毕整个生命周期 ...

  3. OneAPM大讲堂 | Java 异常日志记录最佳实践

    [编者按]本文作者是 Casey Dunham.Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全问题而闻名.本文系国内 ITOM 管理平台 OneAPM 工程师编译 ...

  4. OneAPM大讲堂 | 基于图像质量分析的摄像头监控系统的实现

    今天咱们要介绍的技术很简单,请看场景: 你在家里安装了几个摄像头想监视你家喵星人的一举一动,然而,就在喵星人准备对你的新包发动攻击的时候,图像突然模糊了.毕竟图像模糊了以后你就没法截图回家和喵当面对质 ...

  5. OneAPM大讲堂 | 提高JavaScript性能的30个技巧

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 您是网站管理员还是网页开发人员?想创建超快速的网站吗? 今天我们来看看 JavaScript,这项神奇而又复杂的技术.它使网站内容 ...

  6. OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...

  7. OneAPM大讲堂 | 监控数据的可视化分析神器 Grafana 的告警实践

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 概览 Grafana 是一个开源的监控数据分析和可视化套件.最常用于对基础设施和应用数据分析的时间序列数据进行可视化分析,也可以用 ...

  8. 从代码的视角深入浅出理解DevOps

    对于DevOps的理解大家众说纷纭,就连维基百科(Wikipedia)都没有给出一个统一的定义.一般的解释都是从字面上来理解,就是把开发(Development)和运维(Operations)整合到一 ...

  9. Build Telemetry for Distributed Services之OpenTracing项目

    中文文档地址:https://wu-sheng.gitbooks.io/opentracing-io/content/pages/quick-start.html 中文github地址:https:/ ...

随机推荐

  1. 同时使用 Ant Design of React 中 Mention 和 Form

    使用场景,在一个列表中,点击每一行会弹出一个表单,通过修改表单数据并提交来修改这一行的数据,其中某个数据的填写需要通过Mention实现动态提示及自动补全的功能. 具体效果为: 遇到的问题: 1.希望 ...

  2. 21天打造分布式爬虫-urllib库(一)

    1.1.urlopen函数的用法 #encoding:utf-8 from urllib import request res = request.urlopen("https://www. ...

  3. Spring Boot+redis存储session,满足集群部署、分布式系统的session共享

    本文讲述spring-boot工程中使用spring-session机制进行安全认证,并且通过redis存储session,满足集群部署.分布式系统的session共享. 原文链接:https://w ...

  4. ACM学习<3>

    排序算法:      基本:冒泡,快速,选择,堆,插入,shell      多路并归: 1.冒泡排序:      思想:交换排序,通过相邻的交换来达到排序的目的.      流程:         ...

  5. linux centos7 root密码重置

    转:http://blog.chinaunix.net/uid-21209618-id-4738916.html 分类: LINUX 三年左右没接触linux技术工作,忘记的有很多.不知该怎么去运用. ...

  6. idea集成uglifyjs2

    项目中可能会多次修改某些*.js文件,但是引用的是*.min.js, 所以需要再改完源码后生成压缩的min.js uglifyjs是个不错的工具,但是单独用略显麻烦,如果能整合到idea就好了.正好i ...

  7. python的Web框架,Django模型系统二,模型属性,及数据库进阶查询

    原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...

  8. [POI2004] SZN

    Description 给定\(N(N\leq 10000)\)个点的树,要求用最少的路径覆盖树边.路径之间可以有交点,不能有交边.问最少需要几条路径以及在第一问的基础上最长的路径最短是多少? Sol ...

  9. stark组件之多级过滤

    一.引子 在我们浏览很多页面时,会发现一般情况下都有一个分类的功能,而且还是多个类别同时控制,这就是多级过滤.如下图: 一行代表一个类别,第一行就是展示了所有的出版社,选中后就会以出版社分类,第二行就 ...

  10. spring cloud zuul 传递 header

    最近在做一个项目时,发现在网关中调用和在子系统中调用request.getRequestURL()所得到的请求url是不一样的,在网关中得到的是通过域名访问的地址,而在子系统中得到的是网关发起的子系统 ...