如何快速優化 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.pswp.cn/news/39973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39973.shtml
英文地址,請注明出處:http://en.pswp.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文件加載到類…