腾讯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_id
for TraceId, hex-encoded. -
span_id
for SpanId, hex-encoded. -
trace_flags
for 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,你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...