腾讯mini项目-【指标监控服务重构】2023-07-17

news2024/11/20 4:43:42

今日已办

根据导师的指导意见

  1. 修改了otelclient相关配置的代码

  2. 认真学习uptrace的文档,会比otel、signoz的好理解:
    什么是OpenTelemetry

    • https://uptrace.dev/opentelemetry/architecture.html#opentelemetry-sdk
      trace部分介绍

    • https://uptrace.dev/opentelemetry/distributed-tracing.html
      trace的otel SDK api,是通用的

    • https://uptrace.dev/opentelemetry/go-tracing.html
      metrics部分介绍

    • https://uptrace.dev/opentelemetry/metrics.html
      metrics的otel SDK api,是通用的

    • https://uptrace.dev/opentelemetry/go-metrics.html
      logs部分介绍

    • https://uptrace.dev/opentelemetry/logs.html
      collector介绍

    • https://uptrace.dev/opentelemetry/collector.html

OpenTelemetry

Start

What is OpenTelemetry?

  • 开源可观测框架

  • 为所有类型的可观测信号(如trace、metric、log)提供统一标准

  • 指定如何收集,提供通用数据格式和API,共享和重用数据,集成各种可观测工具和平台

  • 灵活性、互操作性和可扩展性

Telemetry data types

  • Trace追踪,跨多个组件和服务的请求或操作的执行路径。提供详细的计时和上下文信息(trace IDs, span IDs, and other metadata
  • Metric指标,系统行为或资源利用率的定量度量。监视和分析一段时间的性能,可用与警报、容量规划和趋势分析,例如CPU使用率、内存消耗或请求延迟;允许自定义和记录指标
  • Log,事件、错误和活动的结构化或非结构化文本信息,助于调试、审核和故障排除

Architecture

image-20230717204656463

Glossary

  • OpenTelemetry API :收集数据
  • OpenTelemetry SDK : 官方接口实现,有各种编程语言的实现;检测应用程序并收集数据,导出数据到后端,
  • OpenTelemetry Collector :应用程序与后端之间的代理。灵活、可扩展的方式来接收数据,处理,导出数据到存储后端,集成不同后端和系统
  • OTLP :SDK与收集器用于数据导出到后端或其他收集器的协议,指定数据编码格式。(OTLP/grpc)或(OLTP/HTTP)
  • OpenTelemetry backend :接收、存储、分析数据。聚合、查询、可视化
  • OpenTelemetry Jaeger :存储、分析、可视化数据的默认OTEL后端
  • Rescoure :提供受监视实体(服务、进程、容器)的元数据,标识、筛选、分组

Distributed tracing

Introduce

  • 查看一个跨不同服务、系统的请求过程每个操作的时机,日志和错误
  • 提供系统行为的可见性,帮助识别性能问题,协助调试,并帮助确保分布式应用程序的可靠性和可扩展性
  • 跟踪微服务架构上下文

image-20230717213006532

Spans

一个trace的一个操作(工作单元)。可以是RPC、db query、内部函数调用

trace 是个 span 树

image-20230717213524583

Span names

后端工具名称和相似的属性分组

以下名称很好,因为它们简短、独特,并且有助于将相似的跨度组合在一起:

跨度名称评论
GET /projects/:id好。带有参数名称的路由名称。
select_project好。不带参数的函数名称。
SELECT * FROM projects WHERE id = ?好。带有占位符的数据库查询。

Span kind

跨度类型必须具有以下值之一:

  • server操作,例如 HTTP 服务器处理程序。
  • 客户端操作的client,例如 HTTP 客户端请求。
  • 消息生产者的生产者,例如,Kafka producer
  • 消费者一般用于消息consumer异步处理,例如 Kafka 消费者。
  • internal用于内部操作。

Satus Code

状态代码指示操作是成功还是失败。它必须具有以下值之一:

  • ok - 成功。
  • error - 失败。
  • unset - 允许后端分配状态的默认值。

Attributes

记录上下文信息,描述跨度。如HTTP endpoint 可能具有http.method = GET /http.route = /projects/:id 等属性

Events

具有开始时间和任意数量的属性的事件来注释跨度。事件和跨度之间的主要区别在于事件没有结束时间(因此没有持续时间)

事件通常表示异常、错误、日志和消息(例如在 RPC 中),支持自定义事件

Context

Span Context 在 Span 通过不同的组件和服务传播时携带有关该 Span 的信息。

Trace/Span Context 是请求范围的数据,例如:

  • Trace ID。表示整个Trace的全局唯一标识符。Trace中的所有Span都具有相同的 TraceID。
  • Span ID。Trace中特定范围的唯一标识符。Trace中的每个Span都有不同的 SpanID。
  • Trace flags。指示Trace的各种属性(如是否对其进行采样)的标志。采样是指确定应记录哪些Span并将其报告给可观测性后端的过程。
  • Trace State。一个可选字段,其中包含与Trace相关的其他供应商或应用程序特定的数据。

Span Context 对于维护分布式系统中Span的连续性和相关性非常重要。它允许不同的服务和组件将其Span与正确的Trace相关联,并提供对请求或事务流的端到端可见性。

Span Context 通常使用服务之间通信协议的标头或元数据进行传播,类似于baggage 数据的传播方式。这可确保当服务收到请求时,它可以提取Span Context并将传入 Span 与正确的 Trace 相关联。

使用上下文中的数据进行 Span 关联或采样,例如使用 Trace ID 来了解哪些Span属于哪些 Trace

Context propagation

上下文传播可确保相关的上下文数据( trace IDs, span IDs, and other metadata )在应用程序的不同服务和组件之间一致地传播。

  • 进程内传播

    • 显式传播,将Context以函数参数传递
    • 隐式传播,将Context存储到线程局部变量
  • 分布式传播

    • W3C Trace Context in traceparent header ,traceparent=00-84b54e9330faae5350f0dd8673c98146-279fa73bc935cc05-01
    • B3 Zipkin start with x-b3-, for example, X-B3-TraceId

Baggage

工作原理与Span Context 类似,自定义键值对属性在服务间传播,类似grpc的metadata

属性可以与请求或事物处理相关的上下文信息,userId、sessionId、metadata

跨分布式系统维护和关联上下文信息,提供了一阵个系统中传递相关数据的标准话方法

Instrumentations

OpenTelemetry instrumentations 是流行框架和库的插件,它们使用 OpenTelemetry API 来记录重要操作,例如 HTTP 请求、数据库查询、日志、错误等

What to instrument?

无需检测每个操作即可充分利用跟踪。考虑一下操作的优先级:

  • 网络操作,例如 HTTP 请求或 RPC 调用。
  • 文件系统操作,例如,读取/写入文件。
  • 结合网络和文件系统操作的数据库查询
  • 错误和日志,例如,使用结构化日志记录

Timeseries metrics

Introduce

如何收集,聚合,发送 metrics 到 Otel APM 工具的标准

与现有的 metrics instrumentation protocols 配合使用

What are metrics?

标识系统运行情况和性能的数字化数据, 如 CPU utilization, network traffic, and database connections.

使用metrics 来衡量、监控和比较性能, server response time, memory utilization, error rate, and more.

Instruments

创建以下Instruments来捕获测量值:

  • 唯一名称, http.server.duration.
  • instrument 类型, Histogram.
  • 可选的度量单位, milliseconds or bytes.
  • 可选说明.
Timeseries

单个 instrument 可以生成多个 timeseries. timeseries 是具有一组唯一属性的衡量指标,例如,每个主机都有用于同一衡量指标名称的单独时间序列。

Additive instruments

Additive or summable instruments 产生时间序列,当这些时间序列加在一起时,会产生另一个有意义且准确的时间序列。测量非递减数的加法仪器也称为单调(monotonic).

例如,http.server.requests 是一个 additive timeseries ,因为您可以将来自不同主机的请求数相加以得到请求总数。

但是 system.memory.utilization利用率(百分比)不是累加的,因为来自不同主机的内存利用率总和没有意义 (90% + 90% = 180%)

Synchronous instruments

Synchronous instruments 与测量操作一起调用,例如,测量请求数,有新请求来调用 counter.Add(ctx, 1),可以具有相关联的 Trace Context

对于同步仪器,加法仪器和分组仪器之间的区别在于,加法仪器产生可求和的时间序列,而分组仪器产生直方图

InstrumentPropertiesAggregationExample
Countermonotonic【递增】sum -> deltanumber of requests, request size、disk reads
UpDownCounteradditivelast value -> sumnumber of connections、active requests、open connections、memory in use(megabytes)
Histogramgroupinghistogramrequest duration, request size
Asynchronous instruments

Asynchronous instruments(observers)定期调用回调函数来收集测量结果,例如测量CPU使用率,不能具有相关联的 Trace Context

Instrument NamePropertiesAggregationExample
CounterObservermonotonicsum -> deltaCPU time
UpDownCounterObserveradditivelast value -> sumMemory usage (bytes)
GaugeObservergroupinglast value -> none/avgMemory utilization (%percents)、error rate、cache hit rate

Choosing instruments

  1. 如果您需要直方图、热图或百分位数,请使用Histogram.

  2. 如果要通过记录增量值来计算某些内容:

    • 如果值是单调的,请使用Counter.
    • 否则,请使用UpDownCounter.
  3. 如果要通过记录绝对值来测量某些内容:

    • 如果值是可加法/求和的:
      • 如果值是单调的,请使用CounterObserver.
      • 否则,请使用UpDownCounterObserver.
    • 如果该值不是可加/求和的,请使用GaugeObserver
  4. Counter

    • synchronus、monotonic
    • the total number of processed requests、received bytes、disk reads
    • 对于Counter timeseries,后端通常计算增量并显示速率值,例如,per_min(http.server.requests) 返回每分钟处理的请求数
  5. CounterObserver

    • asychronous、monotonic
  6. UpDownCounter

    • sychronous、additive
    • the number of acitive requests、open connections、memory in use(megabytes)
    • 对于UpDownCounter timeseries,后端通常展示最后的值,但是不同timeseries可以累加在一起,例如,go.sql.connections_open返回打开连接的总数,go.sql.connections_open{service.name = myservice} 返回一项服务的打开连接数
  7. UpDownCounterObserver

    • asychronous、additive
  8. Histogram

    • sychronous、grouping
    • request latency、request size
    • 对于Histogram timeseries,后端展示百分位数、直方图或热图
  9. GaugeObserver

    • asychronous、grouping
    • 非相加值,其和没有意义,error rate、memory utilization、cache hit rate
    • 对于GaugeObserver timeseries,后端暂时最后的值不允许不同timeseries求和

Metrics examples

明日待办

  1. 继续学习Uptrace文档

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

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

相关文章

Vue3上 使用腾讯地图 基础展示

一,注册账号 申请key值 第one步 先注册 腾讯位置服务 - 立足生态,连接未来 (qq.com) 第two步 注册key!!!!! 并选择开发参考的开发文档 选择类型 添加成功后会在我的应用里看到你的key值 第三步 (因为我这里是在pc端使用 就直接只用Web端文档了) 二,加载地图 …

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)

前言 书接上文【FPGA项目】沙盘演练——基础版报文收发_子墨祭的博客-CSDN博客,前面我们做了基础版的报文收发,相信对逻辑设计有了一定的认知,在此基础上,继续完善一个实际报文收发可能会遇到的一些处理: 报文处理握手…

布隆过滤器 python3 pybloom_live使用例子 存储开销

1. 安装pybloom_live from pybloom_live import BloomFilter# 创建一个Bloom过滤器对象 # 错误率(False Positive Rate)在布隆过滤器中指的是,不存在的元素被错误地认为存在于集合中的概率 bf BloomFilter(capacity10000, error_rate0.001)#…

IntelliJ IDEA使用_常规设置

文章目录 版本说明主题设置取消检查更新依赖自动导入禁止import xxx.*、允许import内部类显示行号、方法分割线、空格代码提示(匹配所有字母)自定义注释颜色添加头部注释自定义字体设置字符编码关联本地GitJDK编译版本Maven配置Tomcat配置代码注释设置头…

iPhone 15秋季发布会召开,媒介盒子多家媒体持续报道

现如今互联网引流成本越来越高不说,难度越来越大,大多数都是投入巨大,收效甚微。因此,用有限的成本带来高回报的效果成为企业共同的追求。 当然,企业想要产品服务引流绝非易事。 为什么你的品牌营销不见效?新产品上市要怎么做宣传?盒子以新发布的苹果15为例分析,给你一些启…

bootstrap按钮

<!--1、可以转换成按钮的元素--> <!--可能使用 <button> 元素来获得在各个浏览器上获得相匹配的绘制效果--> <a class"btn btn-default">按钮a标签</a> <button class"btn btn-default">按钮button标…

scrapy框架学习笔记-1

前言 在现代互联网时代&#xff0c;网页数据获取和处理已经成为了重要的技能之一。无论是为了获取信息、做市场研究&#xff0c;还是进行数据分析&#xff0c;掌握网页爬取和数据处理技术都是非常有用的。本文将介绍从网页加载到数据存储的完整过程&#xff0c;包括网络请求、…

macOS Big Sur:探索新设计,聚焦新体验

自苹果公司推出macOS Big Sur以来&#xff0c;这一新版操作系统以其突破性的设计刷新了我们对Mac的认知。本文将详细介绍macOS Big Sur的各项新功能及其为用户带来的卓越体验。 安装&#xff1a;macOS Big Sur(macos11)v11.7.10正式版 一、全新设计&#xff1a;导览更轻松&am…

mysql MVCC多版本并发控制

mvcc的概念 mvcc 的实现依赖于&#xff1a; 隐藏字段 行格式&#xff08;row_id,trx_id,roll_ponter&#xff09;UndologRead view innodb 存储引擎的表来说&#xff0c;聚集索引记录中都包含两个必要的隐藏字段&#xff0c;row_id(如果没有聚集索引&#xff0c;才会创建的) …

Kubernetes入门 十七、Helm 包管理器

目录 概述Helm 的三大概念Helm 的安装仓库管理Helm 的常用命令 chart详解目录结构Redis chart 实践升级回滚 概述 Kubernetes 上的应用对象&#xff0c;都是由特定的资源描述组成&#xff0c;包括 Deployment、Service 等&#xff0c;都保存在各自的文件中或者集中写在一个配置…

(2023 最新版)IntelliJ IDEA 下载安装及配置教程

IntelliJ IDEA下载安装教程&#xff08;图解&#xff09; IntelliJ IDEA 简称 IDEA&#xff0c;由 JetBrains 公司开发&#xff0c;是 Java 编程语言开发的集成环境&#xff0c;具有美观&#xff0c;高效等众多特点。在智能代码助手、代码自动提示、重构、J2EE 支持、各类版本…

企业架构LNMP学习笔记40

框架配置实现读写分离&#xff1a; 1&#xff09;修改项目配置文件&#xff1a; return [// 数据库类型type > mysql,// 服务器地址// 1、主从数据库的连接地址 主在前 从在后hostname > 192.168.17.100,192.168.17.105,// 2、主从数据库的名称、用…

C语言再学习 -- C语言实现 sin 和 cos 功能

之前在 C语言再学习 – C 标准库 - math.h 里有介绍 sin 和 cos 函数。但是这两个函数C语言该怎么实现呢&#xff1f; 首先看一下这两个函数的介绍&#xff1a; 函数介绍 C 库函数 - sin() C 标准库 - <math.h> 描述 C 库函数 double sin(double x) 返回弧度角 x 的正…

亚马逊云科技面向游戏运营活动的AI生图解决方案

随着Stable Diffusion等AI生图方案逐步普及&#xff0c;越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证&#xff1a;在某个游戏社区中&#xff0c;玩家一键从手机上传一张照片&#xff0c;AI会将自动识别该照片中的元素并替换成游戏中相应…

4-2 张量的数据运算

张量数学运算主要有&#xff1a;标量运算&#xff0c;向量运算&#xff0c;矩阵运算&#xff0c;以及使用非常强大而灵活的爱因斯坦求和函数torch.einsum&#xff08;重难点&#xff09;进行任意维的张量运算。此外还会介绍张量运算的广播机制。 一&#xff0c;标量运算 (操作…

Vue3高频面试题+八股文

Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点&#xff0c;那么为什么要推出Compos1t1on Api,解决了什么问趣&#xff1f; 通常使用Vue2开发的项目&#xff0c;普遍会存在以下问题&#xff1a; 代码的可读性随着组件变大而变差每一种代码复用的…

【JavaScript内置对象】Date对象,从零开始

【JavaScript内置对象】Date对象&#xff0c;从零开始 时间的表示方式 时间表示的基本概念 最初&#xff0c;人们是通过观察太阳的位置来决定时间的&#xff0c;但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的。 相互之间没有办法通过一个统一的时间…

15W SIP木质网络音箱

SV-7041VP15W SIP木质网络音箱 一、描述 SV-7041VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源副音箱&#xff0c…

LeetCode每日一题:1222. 可以攻击国王的皇后(2023.9.14 C++)

目录 1222. 可以攻击国王的皇后 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 原理思路&#xff1a; 1222. 可以攻击国王的皇后 题目描述&#xff1a; 在一个 8x8 的棋盘上&#xff0c;放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 …

Flutter与Native通信原理剖析与实践

通信原理 我们分几种场景来介绍Flutter和Native之间的通信。 Native发送数据给FlutterFlutter发送数据给NativeFlutter发送数据给Native&#xff0c;然后Native回传数据给Flutter Flutter与Native通信机制 在讲解Flutter与Native之间是如何传递数据之前&#xff0c;我们先了…