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

顶部动图.gif

在正式的生产环境中,数据库的性能和延迟对于确保系统的稳定和高效运行至关重要。特别是在与 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 = 2
  max_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

image.png

跟踪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;"

使用仪表盘进行分析

image.png
  1. 记录 Span:

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

  1. 选择 Service:

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

  1. 查找 Traces:

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

  1. 分析 Trace 详情:

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

  1. 优化查询和系统:

利用详细的时间记录,你可以精确地分析查询语句的性能。在正式的生产环境中,这将成为优化查询语句和改进系统性能的宝贵工具。通过分析每个 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"}}]'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容