文档章节

Metrics, tracing 和 logging 的关系

foodon
 foodon
发布于 2017/10/20 13:52
字数 1293
阅读 82
收藏 1

今天,我很荣幸的参加了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可能处于他们两的中间位置

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

本文转载自:https://github.com/wu-sheng/me/blob/master/articles/metrics-tracing-and-logging.md

foodon
粉丝 61
博文 56
码字总数 27005
作品 0
海淀
技术主管
私信 提问
Spring Cloud Brixton.RC1 发布

Spring Cloud Brixton.RC1 发布了。更新内容有: Spring Boot 1.3.x and Spring 4.2.x support Cluster Leadership election and locks via Spring Cloud Cluster Hashicorp Consul support......

oschina
2016/03/25
1K
6
[转][转]go-kit 入门

[转][转]go-kit 入门 heiyeluren的blog(黑夜路人的开源世界)2017-10-01243 阅读 go-kit 入门 1. microservice Go-Kit go kit 是一个分布式的开发工具集,在大型的组织(业务)中可以用来构...

heiyeluren的blog(黑夜路人的开源世界)
2017/10/01
0
0
利用Slf4j的MDC跟踪方法调用链

why? 一个web项目通常提供很多URL访问地址, 项目一般都是分层处理,例如Controller——>Service——>DAO。 如果想根据日志查看用户一次请求都走了哪些方法(多数是查错误)。 如果系统是多人...

杨春炼
2018/08/18
0
0
Neo4j 3.4.0-alpha02 发布,高性能图数据库

Neo4j 3.4.0-alpha02 发布了,Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存...

达尔文
2017/11/28
754
1
Spring Metrics 0.4.0 发布,用于应用监控

Spring Metrics 0.4.0 发布了,Spring Metrics 使用 metrics 汇集那些和流行的第三方监控系统进行交互的应用。主要更新内容如下: Add support for quantiles and histograms for timers an...

淡漠悠然
2017/06/08
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

基础服务系列-Centos7 安装Node.js10

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. 简介 以官方centos镜像为基础,安装Node.js 10。 Unix prerequisites: gcc and g++ >= 6.3 or newer, or GNU ......

wuxinshui
46分钟前
1
0
Canonical修复了内核安全更新引入的回归问题

导读 Canonical今天发布了所有支持Ubuntu操作系统版本的新Linux内核版本,以解决最新内核安全更新引入的回归问题。 上周,Canonical发布了所有支持Ubuntu版本的Linux内核更新,以解决Jonatha...

问题终结者
今天
3
0
elasticSearch(四)——javaApi

一、

ittzg
今天
2
0
elasticseach 数据的导出与导出工具elasticdump使用

Centos下安装elasticdump yum install elasticdump 安装完成后 [root@i-vvxxxxswtw5ne ~]# elasticdump --helpelasticdump: Import and export tools for elasticsearchversion: 2.2.0......

scgaopan
今天
5
0
DNS域名解析命令 —— nslookup

命令nslookup 名称: name server lookup 用途: 查询域名的DNS信息 语法: ]# nslookup [选项] [域名] 模式: 交互式、非交互式 交互式选项: 实例: 交互式: 非交互式: 查询域名 ]# nsl...

迷失De挣扎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部