腾讯mini项目-【指标监控服务重构】2023-07-19
今日已办
OpenTelemetry Logs
通过日志记录 API 支持日志收集
集成现有的日志记录库和日志收集工具
Overview
- 日志记录 API -
Logging API,允许您检测应用程序并生成结构化日志 - 旨在与其他 telemerty data(例如metric和trace)配合使用,以提供统一的可观测性解决方案
- 结构化日志记录,允许
attributes或metadata附加上下文信息到日志条目。包含相关详细信息,例如时间戳、请求 ID、用户 ID、相关 ID 以及其他有助于日志分析和故障排除的自定义上下文

Different types of logs
OpenTelemetry 支持从应用程序或系统内的各种来源捕获日志。根据日志的生成和收集方式,日志可以分为 3 类。
System and infrastructure logs
-
System logs提供有关系统操作、性能和安全性的宝贵信息。 -
通常由系统内的各个组件生成,包括操作系统、应用程序、网络设备和服务器。
-
是在主机级别写入的,具有预定义的格式和内容,无法轻易更改。
-
不包含有关 Trace 上下文的信息。
Legacy first-party logs
-
First-party logs由内部应用程序生成,记录特定的应用程序事件、错误和用户活动,助于应用程序调试和故障排除。 -
更改日志的写入方式以及包含的信息。例如,要将日志与Trace关联起来,手动将 Trace Context 添加到每个日志语句中,或者使用日志库的插件自动执行此操作。 例如,要传播上下文并将日志记录与Trace关联,可以在日志消息中使用以下属性
-
trace_idfor TraceId, hex-encoded. -
span_idfor SpanId, hex-encoded. -
trace_flagsfor trace flags, formatted according to W3C traceflags format.
-
For example:
request failed trace_id=958180131ddde684c1dbda1aeacf51d3 span_id=0cf859e4f7510204
New first-party logs
- 附加上下文信息到日志条目,例如标签、属性或元数据。
- 记录不同级别的事件或消息,例如调试、信息、警告、错误等。
- 标准化跨分布式系统传播日志中的上下文。
OpenTelemetry Collector
- 灵活且可扩展的代理,
收集、处理和导出telemetry data,简化从多个来源接收和管理 telemetry data ,导出到多个后端或可观测系统。 - 支持多种日志源,包括应用程序日志、日志文件、日志库和第三方日志系统。集成流行的日志框架和库,从而实现日志数据的无缝摄取。
- 提供转换和丰富日志数据的能力。可以修改日志属性、添加元数据或使用其他上下文信息丰富日志,以增强分析和故障排除的价值。
- 收集和处理后,将日志数据导出到各种日志记录后端或系统。支持将日志导出到流行的日志平台、存储系统或日志管理 用于长期存储、分析和可视化的工具
OpenTelemetry Backend
将日志数据导出到日志后端后,可以使用平台的功能处理和分析日志。包括过滤、搜索、聚合和可视化日志,以深入了解应用程序的行为并解决问题。
Sampling and rate-limiting
采样 Sampling 通过减少创建(sampled)Span 的数量来降低 Trace 的成本和冗长性。在性能方面,采样可以节省收集、处理和导出 Span 所需的 CPU 周期和内存
Sampling: when and where
采样可能发生在处理 Span 的不同阶段:
- When a trace is created - head-based sampling;
- When a trace is received by a backend - rate-limiting sampling;
- When a complete trace is available - tail-based sampling.
Sampling probability
采样提供了采样概率,可以仅使用采样范围的一部分对所有范围进行准确的统计计数。例如,如果采样概率为 50%,采样的 Span 数为 10,则调整后的(总) Span 数为 10 / 50% = 20 ; 以局部计算的概率来推算、估计整体。
| Name | Side | Adjusted count | Accuracy |
|---|---|---|---|
| Head-based sampling | Client-side | Yes | 100% |
| Rate-limiting sampling | Server-side | Yes | <90% |
| Tail-based sampling | Server-side | Yes | <90% |
Head-based sampling
- 尽早做出采样决策,并使用上下文将其传播给其他参与者。这样可以通过不收集已删除Span(操作)的任何
telemetry data来节省 CPU 和内存资源。 - 最简单、最准确、最可靠的采样方法。
- 缺点是无法对有错误的 Span 进行采样,因为创建 Span 时该信息不可用。为了解决这个问题,可以使用基于尾部的采样 - tail-based sampling。
- 不考虑流量峰值,并且可能收集比预期更多的数据。这就是速率限制 rate-limiting 采样变得方便的地方
OpenTelemetry head-based sampling
OpenTelemetry 有 2 个 Span 属性负责客户端采样
IsRecording- whenfalse, span discards 丢弃 attributes, events, links etc.Sampled- whenfalse, OpenTelemetry drops 删除the span.
防止收集昂贵的数据
if span.IsRecording() {// collect expensive data
}
Sampler 是一个接受即将创建的根 Span 的函数。该函数返回一个采样决策:
- Drop - trace is dropped.
IsRecording = false,Sampled = false. - RecordOnly - trace is recorded but not sampled.
IsRecording = true,Sampled = false. - RecordAndSample - trace is recorded and sampled.
IsRecording = true,Sampled = true.
默认情况下,OpenTelemetry 对所有 Trace 进行采样,可以修改配置为对部分 Trace 进行采样。在这种情况下,后端使用采样概率 sampling probability 来调整 Span 的数量
OpenTelemetry samplers
AlwaysOn对每个 Trace 进行采样,例如,将为每个请求启动并导出新的 Trace。AlwaysOff采样器不采样任何 Traces,或者换句话说,丢弃所有 Traces。可以用于执行负载测试或暂时禁用 Tracing。TraceIDRatioBased采样器使用Trace ID对一小部分 Traces 进行采样,例如 20% 的Tracing 。Parent-based是一个复合采样器,其行为根据 Span 的父级而有所不同。当开始新的 Trace 时,采样器会决定是否对其进行采样并将该决定传播到其他服务
Rate-limiting sampling
- 发生在服务器端,并确保不会超出某些限制,例如,它允许每秒采样 10 条或更少的Traces。
- 支持调整计数 adjusted counts ,但精度较低。为了获得更好的结果并提高性能,应该将限速采样与基于头的采样- head-based sampling 结合使用,后者更加高效和准确。
- 大多数后端(包括 Uptrace)会在必要时自动应用速率限制采样
Tail-based sampling
- head-based sampling 采样决策是预先做出的,并且通常是随机的。无法对失败或异常长的操作进行采样,因为该信息仅在 Trace 结束时可用。
tail-based sampling,延迟采样决策,直到 Trace 的所有 Span 都可用,可以根据 Trace 中的所有数据做出更好的采样决策。例如,可以对失败或异常长的 Trace 进行采样。- 大多数后端(包括 Uptrace)必要时自动应用,可以 OpenTelemetry Collector with tailsamplingprocessoropen in new window根据需要配置采样。
Uptrace
- 一个 OpenTelemetry 后端,具有直观的查询生成器、丰富的仪表板、警报规则以及大多数语言和框架的集成。可以在单个服务器上处理数十亿个 Span 和 Metric ,并允许以低 10 倍的成本监控应用程序。
- 使用
ClickHouse数据库来存储 Trace 、Metric 和 Log 。监控应用程序并设置自动警报以通过电子邮件、Slack、Telegram 等接收通知。
明日待办
- 组会汇总进度和问题
- 继续学习文档
相关文章:
腾讯mini项目-【指标监控服务重构】2023-07-19
今日已办 OpenTelemetry Logs 通过日志记录 API 支持日志收集 集成现有的日志记录库和日志收集工具 Overview 日志记录 API - Logging API,允许您检测应用程序并生成结构化日志旨在与其他 telemerty data(例如metric和trace)配合使用&am…...
抖音矩阵系统源代码开发部署--SaaS开源技术开发文档
一、概述 抖音SEO矩阵系统源代码是一套针对抖音平台的搜索引擎优化工具,它可以帮助用户提高抖音视频在搜索结果中的排名,增加曝光率和流量。本开发文档旨在提供系统的功能框架、技术要求和开发示例,以便开发者进行二次开发和优化。 二、功能…...
CLIP模型资料学习
clip资料 links https://blog.csdn.net/wzk4869/article/details/129680734?ops_request_misc&request_id&biz_id102&utm_termCLIP&utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-129680734.142v94insert_down1&spm10…...
【c语言】贪吃蛇
当我们不想学习新知识的时候,并且特别无聊,就会突然先看看别人怎么写游戏的,今天给大家分享的是贪吃蛇,所需要的知识有结构体,枚举,以及easy-x图形库的一些基本函数就完全够用了,本来我想插入游…...
【Node.js】定时任务cron:
文章目录 一、文档:【Nodejs 插件】 二、安装与使用【1】安装【2】使用 三、cron表达式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}四、案例: 一、文档: 【说明文档】https://www.npmjs.com/package/cron 【Cron表…...
vue3 引入element-plus
1.首先安装element-plus npm install element-plus 2.main.js配置 ... import ElementPlus from element-plus import element-plus/theme-chalk/index.css; //导入图标 import * as ELementPlusIconsVue from "element-plus/icons-vue" ... app.use(ElementPlus) /…...
数据通信——传输层TCP(超时时间选择)
引言 TCP每一次发送报文段,就会对这个报文段设置一次计时器。如果时间到了却没有收到确认报文,那么就要重传该报文。 这个之前在TCP传输的机制中提到过,这个章节就来研究一下超时时间问题。 关于加权的概念 有必要提及一下加权的概念&#x…...
【数据库索引优化】
文章目录 数据库索引优化1. 选择合适的字段创建索引2. 限值每张表上的索引数量3. 被频繁更新的字段应该慎重建立索引4. 尽可能考虑简历联合索引而不是单列索引5. 避免冗余索引6. 字符串类型的字段使用前缀索引代替普通索引7. 避免索引失效8. 删除长期未使用的索引 数据库索引优…...
WebGL 选中物体
目录 前言 如何实现选中物体 示例程序(PickObject.js) 代码详解 gl.readPixels()函数规范 示例效果 前言 有些三维应用程序需要允许用户能够交互地操纵三维物体,要这样做首先就得允许用户选中某个物体。对物体…...
科目二倒车入库
调整座位和后视镜 离合踩到底大腿小腿成130-140 上半身90-100 座椅高度能看到前方全部情况 后视镜调节到能看到后门把手,且后门把手刚好在后视镜上方边缘、离车1/3处。 保持直线: 前进: 车仪表盘中央的原点和地面上的黄线擦边ÿ…...
PostgreSQL如何支持PL/Python过程语言
瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:10.4 文档用途 本文档主要介绍PostgreSQL如何支持PL/Python过程语言,如何创建plpython扩展。 详细信息 一、PostgreSQL支持python语言…...
【C++】STL之适配器---用deque实现栈和队列
目录 前言 一、deque 1、deque 的原理介绍 2、deque 的底层结构 3、deque 的迭代器 4、deque 的优缺点 4.1、优点 4.2、缺点 二、stack 的介绍和使用 1、stack 的介绍 2、stack 的使用 3、stack 的模拟实现 三、queue 的介绍和使用 1、queue 的介绍 2、queue 的使用 3、qu…...
PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC
高性价比的低功耗高性能蓝牙5.2系统级芯片,适用多种PC/手机外设连接场景。 高性能多模射频收发机: 通过硬件模块的充分复用实现高性能多模数字收发机。发射机,最大发射功率10dBm;BLE 1Mbps速率接收机灵敏度达到-96dBm࿱…...
OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持
9 月 14 日,亚运火炬传递到了浙江台州,OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年,杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑,国产数据库 OceanBase 交出了一张优秀的成绩单&a…...
分布式锁实现方法
分布式锁 什么时候需要加锁 有并发,多线程有写操作有竞争关系 场景: 电商系统,下单流程:用户下单–>秒杀系统检查redis商品库存信息–>用户锁定并更新库存(mysql)—>秒杀系统更新redis 问题&…...
软件测试缺陷报告详解
【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】 缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report(SBR)或软件问题报告Software Pr…...
pytorch冻结参数训练的坑
由于项目需要训练一个主干网络接多个分支的模型,所以先训练一个主干网络加第一个分支,再用另外的数据训练第二个分支,训练的过程中需要冻结主干网络部分,后面的分支训练过程也一样需要冻结主干网络部分。 冻结模型的方式 for nam…...
P1827 [USACO3.4] 美国血统 American Heritage(前序 + 中序 生成后序)
P1827 [USACO3.4] 美国血统 American Heritage(前序 中序 生成后序) 一、前言 二叉树入门题。涉及到树的基本知识、树的结构、树的生成。 本文从会从结构,到完成到,优化。 二、基础知识 Ⅰ、二叉树的遍历 前序遍历ÿ…...
【四、centOS安装docker】
安装docker sudo yum install -y yum-utils device-mapper-persistent-data lvm2 如果以上报错 备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup进入 /etc/yum.repos.d cd /etc/yum.repos.d删除文件 rm -f *.r…...
想学嵌入式开发,薪资怎么样?
想学嵌入式开发,薪资怎么样? 对于嵌入式工程师来说呢,它重点学习内容就是首先一定要打好基础,如果从编程语言角度来讲,那么可以在语言上选C或者C,你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
