OpenTelemetry - 云原生下可观测性的新标准

CNCF 简介

CNCF(Cloud Native Computing Foundation),中文为“云原生计算基金会”,CNCF是Linux基金会旗下的基金会,可以理解为一个非盈利组织。

当年谷歌内部一直用于编排容器的Borg项目开源了,为了该项目更好的发展,谷歌与Linux基金会一起创办了CNCF。同时,谷歌把Borg用Go语言重写,更名为Kubernetes并捐赠到CNCF。

成立这个组织的初衷或者愿景,简单说:

•推动云原生计算可持续发展;•帮助云原生技术开发人员快速地构建出色的产品;•CNCF通过建立社区、管理众多开源项目等手段来推广技术和生态系统发展。

APM

大家应该都听说过APM(Application Performance Monitoring),也应该听说过Distributed Tracing(分布式跟踪),其中后者是前者的子集。分布式跟踪该名词是随着微服务的流行而兴起的,主要是为了解决微服务架构中请求链路过长导致的定位和监控难问题。目前该领域有名的产品有:Jaeger、Pinpoint、Zipkin等等,可以说是竞争异常激烈,但是由此带来一个问题:每一家都有自己的一套数据采集标准和SDK,虽然几乎都是基于谷歌Dapper协议,但是彼此的实现是大相径庭的。为了解决这个问题,国外的大神们在之前创建了OpenTracing和OpenCensus,我们先来分别看看这两个产品。

OpenTracing

OpenTracing制定了一套平台无关、厂商无关的协议标准,使得开发人员能够方便的添加或更换底层APM的实现。

在2016年11月的时候发生了一件里程碑事件,CNCF.io接受OpenTracing,同时这也是CNCF的第三个项目,前两个都已经鼎鼎大名了:Kubernetes,和Prometheus,由此可见开源世界对APM的重视,对统一标准的重视和渴望。

遵循OpenTracing协议的产品有Jaeger、Zipkin等等。

OpenCensus

中国有句老话,既生瑜何生亮,OpenTracing本身出现的更早且更流行,为什么要有OpenCensus这个项目?

这里先补充一下背景知识,前面提到了分布式追踪,其实在APM领域,还有一个极其重要的监控子类:Metrics指标监控,例如cpu、内存、硬盘、网络等机器指标,grpc的请求延迟、错误率等网络协议指标,用户数、访问数、订单数等业务指标,都可以涵盖在内。

首先,该项目有个非常牛逼的亲爹:Google,要知道就连分布式跟踪的基础论文就是谷歌提出的,可以说谷歌就是亲爹无疑了。

其次,OpenCensus的最初目标并不是抢OpenTracing的饭碗,而是为了把Go语言的Metrics采集、链路跟踪与Go语言自带的profile工具打通,统一用户的使用方式。随着项目的进展,野心也膨胀了,这个时候开始幻想为什么不把其它各种语言的相关采集都统一呢?然后项目组发现了OpenTracing,突然发现,我K,作为谷歌,我们都没玩标准,你们竟然敢玩标准敢想着统一全世界?(此处乃作者的疯人疯语) 于是乎,OpenCensus的场景进一步扩大了,不仅做了Metrics基础指标监控,还做了OpenTracing的老本行:分布式跟踪。

有个谷歌做亲爹已经够牛了,那再加入一个微软做干爹呢?是不是要起飞了?所以,对于OpenCensus的发展而言,微软的直接加入可以说是打破了之前的竞争平衡,间接导致了后面OpenTelemetry项目的诞生。

OpenTracing vs OpenCensus

这里直接把 Steve Flanders的对比图拿了过来

功能特性

可以看到,OpenTracing和OpenCensus从功能和特性上来看,各有优缺点。OpenTracing支持的语言更多、相对对其他系统的耦合性要更低;OpenCensus支持Metrics、分布式跟踪,同时从API层一直到基础设施层都进行了支持。

开源社区

难分胜负?再来对比下社区活跃,我去,好像还是半斤八两,你有更广的使用群众基础,我有谷歌和微软就足矣。

所以,从上面可以看出,两个产品真的是各红遍半边天,但是作为开源项目,这种竞争未免太消耗资源了,对用户也十分不友好,咋么办?

OpenTelemetry

正所谓是:天下合久必分、分久必合,在此之时,必有枭雄出现:OpenTelemetry横空出世。

两个产品合并,首先要考虑的是什么?有过经验的同学都知道:如何让两边的用户能够继续使用。因此新项目首要核心目标就是兼容OpenTracing和OpenCensus。

OpenTelemetry的核心工作目前主要集中在3个部分:

1.规范的制定和协议的统一,规范包含数据传输、API的规范,协议的统一包含:HTTP W3C的标准支持及GRPC等框架的协议标准2.多语言SDK的实现和集成,用户可以使用SDK进行代码自动注入和手动埋点,同时对其他三方库(Log4j、LogBack等)进行集成支持;3.数据收集系统的实现,当前是基于OpenCensus Service的收集系统,包括Agent和Collector。

由此可见,OpenTelemetry的自身定位很明确:数据采集和标准规范的统一,对于数据如何去使用、存储、展示、告警,官方是不涉及的,我们目前推荐使用Prometheus + Grafana做Metrics存储、展示,使用Jaeger做分布式跟踪的存储和展示。

首先,再补充一下背景知识,之前提到了APM的两种监控子类:分布式跟踪和Metrics,其实还有第三种,就是Logging日志,目前常见的日志收集平台有EFK、Fluentd.

上图中可以看到,缺失了Logging,主要有以下原因:

1.优先级是在上面提到的三个核心工作上,Logging目前优先级相对较低(P2)2.Logging一般是通过三方平台完成收集,目前如何与分布式跟踪、Metrics的数据进行整合,官方还没有给出设计方案

大一统

有了以上的背景知识,我们就可以顶一下OpenTelemetry的终极目标了:实现Metrics、Tracing、Logging的融合及大一统,作为APM的数据采集终极解决方案。

•Tracing:提供了一个请求从接收到处理完成整个生命周期的跟踪路径,一次请求通常过经过N个系统,因此也被称为分布式链路追踪•Metrics:例如cpu、请求延迟、用户访问数等Counter、Gauge、Histogram指标•Logging:传统的日志,提供精确的系统记录

这三者的组合可以形成大一统的APM解决方案:

1.基于Metrics告警发现异常2.通过Tracing定位到具体的系统和方法3.根据模块的日志最终定位到错误详情和根源4.调整Metrics等设置,更精确的告警/发现问题

该如何融合?

在以往对APM的理解中,这三者都是完全独立的,但是随着时间的推移,人们逐步发现了三者之间的关联,例如我们可以把Tracing的TraceID打到Logging的日志中,这样可以把分布式链路跟踪和日志关联到一起,彼此数据互通,但是还存在以下问题:

1.如何把Metrics和其他两者关联起来2.如何提供更多维度的关联,例如请求的方法名、URL、用户类型、设备类型、地理位置等3.关联关系如何一致,且能够在分布式系统下传播

在OpenTelemetry中试图使用Context为Metrics、Logging、Tracing提供统一的上下文,三者均可以访问到这些信息,同时Context可以随着请求链路的深入,不断往下传播

•Context数据在Task/Request的执行周期中都可以被访问到•提供统一的存储层,用于保存Context信息,并保证在各种语言和处理模型下都可以工作(例如单线程模型、线程池模型、CallBack模型、Go Routine模型等)•多种维度的关联基于元信息(标签)实现,元信息由业务确定,例如:通过Env来区别是测试还是生产环境等•提供分布式的Context传播方式,例如通过W3C的traceparent/tracestate头、GRPC协议等

总结

从谷歌Dapper协议提出到现在已经很多年了,江湖也已经乱战了很多年,这次谷歌和微软下定决心结束江湖之乱,对于未来分布式系统的监控真的是非常巨大的利好消息,我们也有理由相信在这两家巨头的主导,该项目会越发展越好,未来会有越来越多的开源项目、框架、平台,原生的使用OpenTelemetry,最终实现监控数据标准的大一统。

引用

https://github.com/SpringLeee/docs-cn/blob/master/OT.md

最后

欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计——第三章 开发方法及系统实现(5)

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份…

说说 RabbiMQ 的应答模式

RabbiMQ 我们都很熟悉了,是很常用的一个开源消息队列。搞懂 RabbiMQ 的应答模式对我们排查错误很有帮助,也能避免一些坑。本文说说 RabbiMQ 的应答模式。生产者发出一条消息给 RabbiMQ ,RabbiMQ 将消息推送给消费者,消费者处理完消…

微软2020开源回顾:止不住的挨骂,停不下的贡献

喜欢就关注我们吧!2020年,Linus Torvalds 开启“飚骚话”模式,言语不再激烈。看到“大喷子” Linus 都有机会变慈祥,料想微软近年来主动拥抱开源并示好的行为应该能改变他人的看法。然而事实并非如此,虽然微软积极投身…

每日一题——LeetCode859

方法一 个人方法: 首先s和goal要是长度不一样或者就只有一个字符这两种情况可以直接排除剩下的情况s和goal的长度都是一样的,s的长度为2也是特殊情况,只有s的第一位等于goal的第二位,s的第二位等于goal的第一位才能满足剩下的我们…

4倍速!ML.NET Model Builder GPU 与 CPU 对比测试

当我们使用 Visual Studio 进行机器学习开发时,一般都会推荐安装 ML.NET Model Builder ,这让我们的开发更加可视化,并且按照步骤载入相关的训练集,选择好模型就够了,一切就是如此朴实无华。说到 ML.NET Model Builder…

ML.NET 推荐引擎中一类矩阵因子分解的缺陷

ML.NET 作为 .NET 跨平台的机器学习套件,在回归、预测、分类甚至是图像识别、异常检测都展现出简洁快速的优势,以往的文章已介绍过不再赘述。其实机器学习场景中还有一类非常常见的,就是推荐,特别是在线购物、文娱产品为了提升用户…

晋升新一线的合肥,跨平台的.NET氛围究竟如何?

大伙可能不知道,2020年合肥已经成功晋升为新一线城市了。本文通过对目前合肥.NET招聘信息以及公众号的相关数据的分析来看下目前合肥.NET的大环境。就着2020中国.NET开发者峰会顺利举行的东风,同时为进一步提升合肥地区的.NET技术氛围,一些合…

开源项目barcodelib-C#条形码图像生成库

介绍该库旨在为开发人员提供一个简单的类,以便他们在需要根据数据字符串生成条形码图像时使用。用法该库包含一个名为BarcodeLib的类,其中包含三个构造函数:Barcode(); Barcode(string); Barcode(string, BarcodeLib.TYPE);如果决定使用参数创…

ctf php 读取flag,BugkuCTF flag.php(反序列化)

进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数&#xff0c…

2021技术人新展望

一、前言各位小伙伴们还有几天新的一年即将来临,这篇文章作为今年的结束吧。不知道大家对自己每一年的技术发展规划是什么,我在这里分享一下我2021年的新的规划,这里非常感谢各位小伙伴对我的关注。二、内容概要2021的布局客户端技术分享服务…

在 ASP.NET 中实现会话状态的基础

简介 在 Web 应用程序这样的无状态环境中,了解会话状态的概念并没有实际的意义。尽管如此,有效的状态管理对于大多数 Web 应用程序来说都是一个必备的功能。Microsoft ASP.NET 以及许多其他服务器端编程环境都提供了一个抽象层,允许应用程序基…

【One by One系列】IdentityServer4(三)使用用户名和密码

继续介绍IdentityServer4,我们上篇介绍了IdentityServer4实现OAuth2.0的授权方式之一的客户端凭证,接下来我们继续介绍OAuth2.0的另外一种授权方式密码式,Resource Owner Password Credentials。post请求token?grant_typepassword&usernameUSERNAME…

【One by One系列】IdentityServer4(二)使用Client Credentials保护API资源

书接上回,我们将会正式开始介绍IdentityServer4。IdentityServer4是实现了OAuth2.0OpenId Connect两种协议的优秀第三方库,属于.net生态中的优秀成员。可以很容易集成至ASP.NET Core,颁发token。使用Id4基本步骤如下:**1.**在Startup.Configu…

使用 Avalonia 开发 UOS 原生应用

最近很火的是国产的操作系统 UOS 系统,这个系统现在存在的问题就是生态没搭建起来。作为 dotnet 开发者,可以通过很多不同方向的技术为 UOS 系统生态贡献应用,如 Xamarin 和 GTK# 或 wine 和 win32 应用,或 mono 和 WinForms 应用…

云原生那些顶级开源项目,你都用过哪些?

CNCF,英文全称为Cloud Native Computing Foundation,中文译为“云原生计算基金会”, 构建可持续生态系统,并围绕一系列高质量开源项目促进社区的发展,本文大概介绍下几个主要的项目。???? Kubernetes⭐ Star: 73.5k https://g…

2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai

.NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会。2021年上海第一场线下活动就要来了,快来加入我们一起学习.NET 吧!活动时间:2021年1月23日 13:00-18:0…

跟我一起学Redis之加个哨兵让主从复制更加高可用

前言主从复制的实现在上一篇已经分享过,虽然主从复制本身的确让读写分离更加高效,但是对于整体高可用存在很大的劣势:当主节点宕机了之后还需要人为重新进行主从关系配置;这不是开玩笑嘛,这样人为干预,故障…

智能实验室-全能优化(Guardio) 4.0.0.670 beta 8

怎样获取最新版本?□全新下载:全能优化(Guardio):http://files.cnblogs.com/unruledboy/Guardio.Release.zip智能实验室- 全能优化(Guardio) 4.0.0.670 beta 8 更新记录: 1.添加:系统加速 之 系统速度&…

如何在 ASP.Net Core 中实现 健康检查

健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态。ASP.Net Core 中的 健康检查 落地做法是暴露一个可配置的 Http 端口,你可以使用 健康检查 去做一个最简单的活性检…