毫无疑问,在过去几年里,你可能已经多次听到过可观测性这个词。对于很多人来说,很难理解这个词的真正含义。对许多人来说,他们错误地将其等同于"监控"。虽然可观测性的根本定义以及它所包含的一切都不在本系列博文的讨论范围之内,但我强烈建议您购买一本由 Charity Majors (twitter)、Liz Fong-Jones (twitter) 和 George Miranda (twitter) 合著的《可观测性工程》(Observability Engineering)一书。

不过,本系列博文将介绍使用 OpenTelemetry 实现可观测性的完整示例和说明,OpenTelemetry 是 CNCF 的一个项目,致力于让可观测性变得更简单。

什么是 OpenTelemetry?

OpenTelemetry 是几年前 OpenCensus 和 OpenTracing 合并的产物。从那时起,OpenTelemetry(也简称为 "OTel")就很好地将自己定位为在现代软件世界中获取遥测数据且厂商中立的方法。很多人会说 OpenTelemetry 是可观测性的未来,根据我的经验和接触,我倾向于同意这种说法。

OTel 组件

在 OpenTelemetry 中典型的OTel方案可以被细分为几个逻辑组件,他们包括APIs, SDKs,收集器.

APIs and SDKs

在开始使用 OpenTelemetry 时,首先要了解的重要事项之一是该项目如何区分 API 和 SDK。简而言之,API 负责收集遥测数据及其中的所有数据,而 SDK 则负责将这些数据从当前被观测的进程中提取出来,转给另一个实体进行分析。随着我们对这个示例的深入研究,这一点将变得更有意义,但值得理解的是 API 和 SDK 之间的职责分离。

由于它们是关注点分离的,通过什么是观测(API)与如何处理(SDK)来区分它们。它们支持多种编程语言,包括(但不限于):Go、Python、Java、Ruby、JavaScript、.NET 等!有关语言支持的更多信息,请查看埋点文档。我们将在稍后的博文中介绍埋点知识。

Collector

SDK 的职责之一就是从正在被观测的进程中获取数据,但是需要一个地方来汇总接收这些数据。我们将这个独立的进程称为收集器。

收集器的整个工作可分为三个不同阶段:

  • 接收遥测数据
  • 处理遥测数据
  • 导出遥测数据

收集器是一个处理遥测数据的 ETL(Extract, Transform, Load)管道。虽然不一定要使用 OTel 解决方案,不过想要找个一个常用且好用的收集器例子,推荐用 OpenTelemetry Collector,它将是本系列的重点,并将在后面的博文中详细介绍。

Traces, metrics, and logs

在链路追踪和可观测性中,有三方面信息:链路追踪,指标数据和服务日志。虽然我们长期以来一直使用服务日志和指标数据,但是许多人认为链路追踪才是真正解锁可观测性能力的关键。

通过收集具备高基数(基数是指某个属性或维度的唯一值的数量,高基数数据可以认为是提供更全面和详尽的上下文信息)特点的链路追踪数据,我们就具备了不用修改代码也能够快速解答部分问题的能力。分析数据是可以有多种手段,例如说我们可以对比异常数据和常规数据等。

本系列博文将会专注于讲解链路追踪,如果你想进一步了解可观测性,以及三种信息之间差异可以参阅前文提到的《可观测性工程》一书。

示例应用

本系列博文的主要任务是介绍如何使用 OpenTelemetry 来让软件系统具备可观测性。为此,我创建了一个示例应用程序,并在后续文章中说明在应用过程中的一些要点。该应用程序的设计可参见下图:

这是一个购物车应用程序示例,按功能模块分成了不同的web服务:

  • 购物车 - 处理用户购物车数据请求的服务(用 Go 语言编写)
  • 用户服务 - 处理来自购物车服务的用户验证和查询请求(用 Go 语言编写)
  • 定价服务 - 为产品提供更新定价信息服务(用 Python 编写)

后端依赖MySQL对数据进行持久化存储。

使用 OpenTelemetry 的 API 和 SDK 进行埋点。遥测数据是通过 OpenTelemetry Collector 向 Jaeger 发送数据来实现的。

下面是使用 OpenTelemetry 采集并展示分布式链路跟踪数据在 Jaeger 中的示例:

所有代码和构建运行说明都可以在 GitHub 上找到:trstringer/otel-shopping-cart

总结

希望通过上面介绍让您现在对 OpenTelemetry 已经有所了解,知道它由哪些组件构成,以及我们将如何在本系列的其余部分深入实施。这仅仅是个开始!请继续关注本系列博文的其余部分,了解如何使用 OpenTelemetry 来让应用程序具备可观测性。

本文翻译自:https://trstringer.com/otel-part1-intro/

扩展阅读:

使用 OpenTelemetry 构建可观测性 01 - 介绍的更多相关文章

  1. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  2. Redis学习01——介绍与搭建环境

    Redis学习01介绍与搭建环境一简介二yum配置已经配置了的可以跳过三安装gcc四安装redis1 上传Redis到linux中2 解压到usrlocal下3 编译redis4 安装redis5 拷 ...

  3. 前端构建工具gulp介绍

    2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...

  4. java编程--01介绍日期的比较

    引子:平时开发常常需要对时间进行格式化,进行比较,进行加减计算.最常用的类不外乎:SimpleDateFormat,Calendar,Date,DateTimeStamp等.下面想对java中的日期编 ...

  5. Mongo --01 介绍、安装、优化报警

    目录 一 . NoSQL 介绍 二.MongoDB简介 三.MongoDB特点 四. mongo应用场景 五. 安装配置mongodb 六.优化报警 一 . NoSQL 介绍 NoSQL,指的是非关系 ...

  6. 基于 abp vNext 微服务开发的敏捷应用构建平台 - 项目介绍

    缘起 目前使用ABP框架已经将近3年了,大大小小的项目也陆陆续续做了很多.由于现有信息系统的架构模式是在底层的技术平台上直接构建信息系统并采用技术主导,使用业务无关的编程工具来开发信息系统的缺陷使得系 ...

  7. Gradle实战(01)--介绍与安装

    前言 本章你将学习到 Gradle的介绍 Gradle的安装 Gradle的hello world 1 Gradle的介绍 Gradle是专注于灵活性和性能的开源构建自动化工具 Gradle构建脚本是 ...

  8. 第15.7节 PyQt入门学习:PyQt5应用构建详细过程介绍

    一. 引言 在上节<第15.6节 PyQt5安装与配置>结束了PyQt5的安装和配置过程,本节将编写一个简单的PyQt5应用,介绍基本的PyQt5应用的文件组成及相关工具的使用. 本节的应 ...

  9. 戴文的Linux内核专题:01介绍

    转自Linux中国 译者按:本文作者戴文.科利尔.约翰逊(Devyn Collier Johnson)今年才19岁,但是他在Linux内核.人工智能.编程语言方面拥有丰富的经验,本文是其在linux. ...

  10. Spring Boot中使用Swagger2构建RESTful APIs介绍

    1.添加相关依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <depen ...

随机推荐

  1. 【pytorch学习】之自动微分

    5 自动微分 求导是几乎所有深度学习优化算法的关键步骤.虽然求导的计算很简单,只需要一些基本的微积分.但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错).深度学习框架通过自动计算导数 ...

  2. 暑期集训 Day11 —— 模拟赛复盘

    ${\color{Green} \mathrm{Problem\ 1 :Subarray }} $ 签到失败... 直接二进制分组,找出所有二进制位=0 的方法. 死因: 二进制分组没想出来... $ ...

  3. 千万商家的智能决策引擎--AnalyticDB如何助力生意参谋双十一

    作者:算法&健兮,阿里巴巴数据技术及产品部技术专家 生意参谋介绍 生意参谋是阿里官方打造的全渠道.全链路.一站式数据平台,致力于为用户提供经营分析.市场洞察.客群洞察等多样化数据服务,帮助用户 ...

  4. SQL server 游标使用实例

    --创建一个游标 DECLARE my_cursor CURSOR FOR SELECT id, Bran_number, Bran_taxis FROM dbo.Base_Branch; --打开游 ...

  5. OSI模型之数据链路层

    一.简介 数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层的数据可靠地传输到相邻节点的目标机网络层.其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的 ...

  6. 最好用的AI换脸软件,rope下载介绍(支持cpu)

    随着AI技术的广泛运用,市面上的换脸软件也多了起来,今天给各位介绍其中的王者Rope! 先上两个动图,给大伙看看效果 rope是如何实现这种自然的效果呢?这得益于机器学习技术的不断发展,rope经过深 ...

  7. Linux 开启防火墙端口策略

    1. 安装防火墙 yum install firewalld systemd -y 2. 手动开放防火墙端口 查看防火墙全部设置 firewall-cmd --list-all 若防火墙服务未启动可执 ...

  8. python教程3.1:数据类型:字符串+列表list

    一.字符串 字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息  常用方法--str.fun() 全局函数 二.列表list []内以逗号分隔,按照索引,存放各种数据类型,每个位置代表⼀个 ...

  9. UE4 绘制Gizmo

    Unity的Gizmos可以很方便的在编辑器下进行调试,Unreal中也有一些办法可以达到效果. 本文主要参考:https://zhuanlan.zhihu.com/p/363625037,进行了一些 ...

  10. AI 一键生成高清短视频,视频 UP 主们卷起来...

    现在短视频越来越火,据统计,2023年全球短视频用户数量已达 10 亿,预计到2027年将突破 24 亿.对于产品展示和用户营销来说,短视频已经成为重要阵地,不管你喜不喜欢它,你都得面对它,学会使用它 ...