如何快速优化 CnosDB 数据库性能与延迟:使用 Jaeger 分布式追踪系统

在正式的生产环境中,数据库的性能和延迟对于确保系统的稳定和高效运行至关重要。特别是在与 CnosDB 数据库进行交互时,更深入地了解其表现变得尤为重要。这时Jaeger 分布式追踪系统发挥了巨大的作用。在本篇博客中,我们将深入探讨如何通过使用 Jaeger 追踪和监控 CnosDB 数据库,以便更全面地了解其性能、延迟以及潜在的问题。

了解 Jaeger 和 CnosDB

Jaeger:Jaeger 是一款强大的开源分布式追踪系统,兼容 OpenTracing API,专为监控和调试软件服务架构中的请求流程而设计。通过捕获请求在不同微服务之间的流动,Jaeger 帮助开发人员识别性能瓶颈和潜在问题。

CnosDB:CnosDB 是一款高性能的开源数据库,常用于存储和管理大量时序数据。在微服务架构中,CnosDB 通常充当数据存储和检索的后端。

在CnosDB中启用Jaeger支持

取消 [trace][https://docs.cnosdb.com/zh/latest/reference/config.html#trace]配置注释开启 Jaeger 跟踪功能。

| 提示:如需使配置生效需要重启服务。

[trace]auto_generate_span = false
[trace.log]path = '/tmp/cnosdb'
[trace.jaeger]jaeger_agent_endpoint = 'http://127.0.0.1:14268/api/traces'max_concurrent_exports = 2max_queue_size = 4096

安装并启动Jaeger

| 其他部署方式,请参考 Jaeger Deployment[https://www.jaegertracing.io/docs/deployment/]

docker run -d --name jaeger \-p 6831:6831/udp \-p 6832:6832/udp \-p 16686:16686 \-p 14268:14268 \jaegertracing/all-in-one:latest

成功启动后,使用浏览器访问 http://127.0.0.1:16686

跟踪CnosDB中的事件

1.在请求中添加 span context。

| 可以设置配置文件中的 auto_generate_span = true 自动生成,如果需要分析特定的语句,请在请求中自定义 uber-trace-id 值,格式如下所示(详细格式说明请参考:Propagation Format[https://www.jaegertracing.io/docs/1.46/client-libraries/#propagation-format])

uber-trace-id: 3a3a43:432e345:0:1

示例:

| 示例中的数据来源请参考:
https://docs.cnosdb.com/zh/latest/start/quick_start.html

查询数据库 oceanic_station 中 air 表中的数据,并且按时间倒序排序,返回前 5 条数据 。

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=oceanic_station&pretty=true" -d "select * from air order by time desc limit 5;"

使用仪表盘进行分析

 

1.记录 Span:

当客户端应用程序发送查询或写入请求到 CnosDB 数据库时,CnosDB 会将产生的 Span 记录发送给Jaeger 。每个 span 表示了请求的一个阶段,包括了处理时间、操作名称和其他相关信息。

2.选择 Service:

在 Jaeger 用户界面的 Service 下拉框中,选择与 CnosDB 相关的服务(例如:cnosdb_singleton_1001)。

3.查找 Traces:

在界面上,点击 "Find Traces" 按钮,系统将检索与选择的服务相关的所有 traces(追踪)。这将显示一系列的请求和对应的 spans。

4.分析 Trace 详情:

点击所感兴趣的 trace,进入详细视图。在这个视图中,你将看到整个请求的流程,以及每个 span 执行的时间。这些时间信息将帮助你了解查询的每个步骤在处理时所花费的时间。

5.优化查询和系统:

利用详细的时间记录,你可以精确地分析查询语句的性能。在正式的生产环境中,这将成为优化查询语句和改进系统性能的宝贵工具。通过分析每个 span 的执行时间,你可以找到可能导致延迟的步骤,从而采取针对性的优化措施。

除此之外,Jaeger 还可以跟踪 CnosDB 的其他事件,具体如下:

  1. Query 组件
  2. REST API
  3. Arrow Flight SQL API

结语

通过使用 Jaeger 来跟踪 CnosDB 数据库的性能和延迟,我们可以更全面地了解数据库的表现。通过在关键代码段中插入适当的仪器化代码,我们可以捕获请求的流动和数据库交互,轻松识别性能瓶颈,并及时解决潜在问题。集成 Jaeger 和 CnosDB,让我们能够从中获得更深入的洞察,提升整体性能和可靠性。

拓展示例

REST API请求

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=usage_schema&pretty=true" -d "select * from user_queries order by time desc limit 5;"

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=usage_schema&pretty=true" -d "CREATE TABLE air (visibility DOUBLE,temperature DOUBLE,presssure DOUBLE,TAGS(station));"

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1"  -XPOST "http://127.0.0.1:8902/api/v1/write?db=public&pretty=true" -d "ma,station=XiaoMaiDao visibility=50,temperature=63,pressure=52"

使用 Prometheus 进行远程读写

remote_write:
- url: "http://127.0.0.1:8902/api/v1/prom/write?db=prometheus"headers:uber-trace-id: '3a3a43:432e345:0:1'basic_auth:username: 'root'password: ''
remote_read cnosdb
remote_read:
- url: "http://127.0.0.1:8902/api/v1/prom/read?db=prometheus"
headers:uber-trace-id: '3a3a43:432e345:0:1'
basic_auth:username: 'root'password:

使用 OpenTSDB 写入

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/opentsdb/write?db=public" -d 'opentsdb 1689054412124000000 1 tag1=t1 field1="f1" value1=1'

curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/opentsdb/put?db=public" -d '[{"metric":"tsdbput","timestamp": 1689069407572000000,"value": 9,"tags":{"tag1":"t1","tag2":"t2"}}]'

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

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

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

相关文章

探索网络架构的关键角色:六种常用的服务器类型

在今天的数字时代,服务器是支撑各种在线服务和应用的基石。不同类型的服务器在网络架构中扮演着不同的角色,从网页传输到电子邮件交换,再到文件传输和内容分发。本文将深入探讨六种最常用的服务器类型,解释它们的功能和重要性&…

在 OpenCV 中使用深度学习进行年龄检测-附源码

文末附完整源码和模型文件下载链接 在本教程中,我们将了解使用 OpenCV 创建年龄预测器和性别分类器项目的整个过程。 年龄检测 我们的目标是创建一个程序,使用图像来预测人的性别和年龄。但预测年龄可能并不像你想象的那么简单,为什么呢?您可能会认为年龄预测是一个回归问…

【【萌新的STM32学习-8】】

萌新的STM32学习-8 STM32CubeMX 是由 ST 公司开发的图形化代码自动生成工具,能够快速生成初始化代码, 如配置 GPIO,时钟树,中间件等,使用户专注于业务代码的开发。现在 ST 主推 HAL 库代码, 经典的标准外设…

数据治理有哪些产品

数据治理是现代企业管理中至关重要的一个环节。随着企业的数据量不断增长,如何有效地管理和利用数据成为了一个亟待解决的问题。幸运的是,市场上已经涌现出了许多优秀的数据治理产品,下面就来介绍一些常见的数据治理产品。 首先,我…

配置使用Gitee账号认证登录Grafana

三方社会化身份源 集成gitee第三方登录 第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。 举例来…

Redis中的Key是否在过期时间到达后立即被删除?详解Redis的过期策略

AIGC最全资料包 https://zkk-1300025204.cos.ap-nanjing.myqcloud.com/%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%85%A8StableDiffusion%E8%B5%84%E6%96%99%E5%8C%85.csv作者:zhaokk 在现代软件开发中,性能和数据存储是至关重要的。为了在高并发环境下提供快速的…

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于CNN-GRU卷积…

qrcode.react生成二维码

qrcode.react 是一个**用于生成二维码(QR 码)的 React 组件库。**它提供了一个 React 组件,可以轻松地在 React 应用程序中生成和显示 QR 码。 使用 qrcode.react,可以以声明式的方式在 React 组件中定义 QR 码的内容、尺寸、颜色…

分布式 - 消息队列Kafka:Kafka 消费者的消费位移

文章目录 01. Kafka 分区位移02. Kafka 消费位移03. kafka 消费位移的作用04. Kafka 消费位移的提交05. kafka 消费位移的存储位置06. Kafka 消费位移与消费者提交的位移07. kafka 消费位移的提交时机08. Kafka 维护消费状态跟踪的方法 01. Kafka 分区位移 对于Kafka中的分区而…

sql server 存储过程 set ansi_nulls set quoted_identifier,out 、output

SQL-92 标准要求在对空值(NULL) 进行等于 () 或不等于 (<>) 比较时取值为 FALSE。 当 SET ANSI_NULLS 为 ON 时&#xff0c;即使 column_name 中包含空值&#xff0c;使用 WHERE column_name NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值&#xff0c…

5G无人露天矿山解决方案

1、5G无人露天矿山解决方案背景 ①2010.10&#xff0c;国家安监总局《金属非金属地下矿山安全避险“六大系统”安装使用和监督检查暂行规定》 ②2016.03&#xff0c;国家发改委《能源技术革命创新行动计划&#xff08;2016-2030&#xff09;》&#xff0c;2025 年重点煤矿区采…

每天一道leetcode:1192. 查找集群内的关键连接(图论困难tarjan算法)

今日份题目&#xff1a; 力扣数据中心有 n 台服务器&#xff0c;分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群&#xff0c;连接是无向的。用 connections 表示集群网络&#xff0c;connections[i] [a, b] 表示服务器 a …

Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)

一、前言 自从大模型被炒的越来越火之后&#xff0c;似乎国内涌现出很多希望基于大模型构建本地知识库的需求&#xff0c;大概在5月底的时候&#xff0c;当时Quivr发布了第一个0.0.1版本&#xff0c;第一个版本仅仅只是使用LangChain技术结合OpenAI的GPT模型实现了一个最基本的…

升级STM32电机PID速度闭环编程:从F1到F4的移植技巧与实例解析

引言&#xff1a; 在嵌入式系统开发中&#xff0c;STM32系列微控制器广泛应用于各种应用领域。而对于直流有刷电机的控制&#xff0c;PID速度闭环是一种常用的控制方式。本文将以此为例&#xff0c;探讨如何从STM32F1系列移植到STM32F4系列&#xff0c;并详细介绍HAL库在不同型…

Python学习笔记_基础篇(十)_socket编程

本章内容 1、socket 2、IO多路复用 3、socketserver Socket socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&#xff0c;对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现&#xff0c;socket即是一种特殊的文件&…

spring boot 简单整合 Redis

1.添加依赖<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- commons-pool2 --><dependency><groupId>org.ap…

Linux安装Docker

一、Docker系统版本介绍 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 或 Windows 操作系统的机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&#xff0c;相…

诚迈科技荣膺小米“最佳供应商奖”

近日&#xff0c;诚迈科技受邀参加小米战略合作伙伴HBR总结会。诚迈科技以尽职尽责的合作态度、精益求精的交付质量荣膺小米公司颁发的最佳供应商奖&#xff0c;其性能测试团队荣获优秀团队奖。 诚迈科技与小米在手机终端方向一直保持着密切的合作关系&#xff0c;涉及系统框架…

centOS 快速安装和配置 NVIDIA docker Container Toolkit

要在 CentOS 上正确安装和配置 NVIDIA Container Toolkit&#xff0c;您可以按照以下步骤进行操作&#xff0c;如果1和2都已经完成&#xff0c;可以直接进行第3步NVIDIA Container Toolkit安装配置。 1. 安装 NVIDIA GPU 驱动程序&#xff1a; 您可以从 NVIDIA 官方网站下载适…

【Java基础】Java对象的生命周期

【Java基础】Java对象的生命周期 一、概述 一个类通过编译器将一个Java文件编译为Class字节码文件&#xff0c;然后通过JVM中的解释器编译成不同操作系统的机器码。虽然操作系统不同&#xff0c;但是基于解释器的虚拟机是相同的。java类的生命周期就是指一个class文件加载到类…