新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用OpenTelemetry监控达梦数据库

发布时间:2026/9/12 17:21:49来源:尧图网络
使用OpenTelemetry监控达梦数据库
概述最近我写了一篇通过OJR(OpenTelemetry Receiver by Java)使用OpenTelemetry和Prometheus监控IBM MQ的文章这是中文文章的地址。我们也曾经做过一个监控国产达梦数据库的工作。我现在也整理了一篇文章。达梦数据库已经有一些Prometheus的监控方案我们为什么还要提供一个OpenTelemetry的方案呢其中一个原因是OpenTelemetry是目前最重要的可观测性的行业标准有无数后端系统的支持(有些是开源系统有些是商业系统)。OpenTelemetry不仅仅支持metrics还支持traces和logs最近还要加入对Profiling data的支持等。Prometheus可以作为支持OpenTelemetry metrics的重要后端系统之一。再有一个原因就是Prometheus处理不了高基数(high cardinality)的metrics。就是说某个metric的label的取值太多的话是不行的。但是某些OpenTelemetry的metrics后端支持高基数比如Clickhouse。所以我们可以混用PrometheusClickhouse。这篇文档用到了一个简单有效的叫做OJR(OpenTelemetry Receiver by Java)的工具这个工具虽然只是简单封装了OpenTelemetry的Java SDK但确实可以大大地简化实现OpenTelemetry的逻辑并给最终用户提供很多直接可用的Agent。OJR虽然提供了对各种OpenTelemetry signals (Traces, Metrics, Logs)的支持但是目前主要实现的Agent还基本都是Metrics相关的。OJR提供了一个便捷输出OpenTelemetry Metrics的方式(不必再通过OpenTelemetry Collector转换)。如果要使用OJR提供的达梦数据库Agent需要安装Java 8或者更新的版本。OJR Agent相当于一个OpenTelemetry的Receiver加上一个OTLP exporter可以获取数据并发送给大量支持OpenTelemetry协议的后端应用和系统比如OpenTelemetry Collector。目前OJR提供的达梦数据库Agent只支持metrics。安装配置下面是所有演示程序的整体架构图用户可以只用其中一部分甚至可以把相关应用都放到一台主机上。下面简单地介绍一下通过OJR来使达梦数据库支持OpenTelemetry的步骤首先要下载OJR的Dameng DB Agent。比如使用下面的命令下载OJR release v0.6.3提供的Dameng DB Agentwget https://github.com/liurui-software/ojr/releases/download/v0.6.3/ojr-dameng-db-0.5.3.tar使用下面的命令展开Agenttar vxf ojr-dameng-db-0.5.3.tarcd ojr-dameng-db-0.5.3下一步就是配置达梦数据库的连接。假如我们只监控一个达梦数据库这个数据库的主机是在“192.168.3.14”端口是5236。下面是配置文件config/config.yaml的示例#Database properties:db.system: damengdb.driver: dm.jdbc.driver.DmDriverinstances:- db.address: 192.168.3.14db.port: 5236db.username: SYSDBAdb.password: TXlQYXNzd29yZAdb.connection.url: jdbc:dm://192.168.3.14:5236db.name: myDB1#OTel properties:otel.poll.interval: 25otel.callback.interval: 30#otel.backend.url: http://localhost:4317otel.backend.url: http://localhost:4318otel.transport: prometheushttpprometheus.port: 16540prometheus.restricted.metrics: db.sql.elapsed_time,db.lock.timeotel.service.name: DamengA以下是参数的说明db.system: dameng- 一个逻辑的数据库类型的名称仅仅是个标记db.driver: dm.jdbc.driver.DmDriver- JDBC的驱动instances:- 支持多个达梦数据库的连接db.address: 192.168.3.14- 达梦数据库远程地址db.port: 5236- 达梦数据库的端口号db.username: SYSDBA- 达梦数据库的用户名db.password: TXlQYXNzd29yZA- 达梦数据库的口令(用base64编码后的结果)db.connection.url: jdbc:dm://192.168.3.14:5236- 达梦数据库的JDBC连接字符串db.name: myDB1- 给这个达梦数据库起个名字otel.poll.interval: 25- 读metrics的时间间隔(单位秒)otel.callback.interval: 30- 发送数据到后端的时间间隔(单位秒)otel.backend.url: http://localhost:4318- OpenTelemetry后端系统的接收端口otel.transport: prometheushttp- 输出数据到后端的Prometheus以及一个支持otlp/http的OpenTelemetry的后端。如果只输出数据到后端的Prometheus可以只写prometheusprometheus.port: 16540- 展现Prometheus的端口prometheus.restricted.metrics: db.sql.elapsed_time,db.lock.time- 这几个metrics拥有高基数不展现到Prometheus端口否则会严重影响Prometheus的性能otel.service.name: DamengA- 展现为OpenTelemetry的“service.name” Resource attribute。如果只输出数据到Prometheus不需要后端系统事先启动。因为OJR Dameng Agent会展现一个支持Prometheus协议的HTTP端口被动地等待Prometheus服务器来读取数据。如果想发送数据到OpenTelemetry后端的话就需要启动一个OpenTelemetry后端因为OJR Dameng Agent会主动地发送数据到OpenTelemetry后端。如果不想看到错误信息的话我们可以先把otel.transport设置为prometheusotel.transport: prometheus现在是启动OJR Dameng Agent的时间了。如果用同步的方式可以使用如下的命令bin/ojr-dameng-db于是我们可以看到类似下述的日志信息Jan 14, 2025 12:23:34 PM com.ojr.core.BasicDcAgent startINFO: DC No.1 is collecting data...Jan 14, 2025 12:23:35 PM com.ojr.dameng.DamengDc collectDataINFO: Start to collect metricsJan 14, 2025 12:23:35 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.status/default1Jan 14, 2025 12:23:35 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.instance.count/default1Jan 14, 2025 12:23:35 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.instance.active.count/default1Jan 14, 2025 12:23:35 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.session.count/default2Jan 14, 2025 12:23:35 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.session.active.count/default1Jan 14, 2025 12:23:36 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.transaction.count/default82260Jan 14, 2025 12:23:36 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.transaction.rate/default82261Jan 14, 2025 12:23:36 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.transaction.latency/default0Jan 14, 2025 12:23:36 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.sql.count/default150200Jan 14, 2025 12:23:37 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.sql.rate/default150200Jan 14, 2025 12:23:37 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.io.read.rate/default548Jan 14, 2025 12:23:37 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.io.write.rate/default92673Jan 14, 2025 12:23:37 PM com.ojr.core.metric.RawMetric$DataPoint setValueINFO: New metric value: db.task.wait_count/default0… …现在OJR Dameng Agent就把达梦数据库的metrics以Prometheus endpoint的形式来展现。可以通过访问http://localhost:16540/metrics来读取这些metrics。下面是一部分metrics的截图# HELP db_cache_hit_ratio The cache hit ratio/percentage # TYPE db_cache_hit_ratio gauge db_cache_hit_ratio{db_namemyDB1,ojrdameng-db,typeFAST} 0.9999864916470558 db_cache_hit_ratio{db_namemyDB1,ojrdameng-db,typeKEEP} 1.0 db_cache_hit_ratio{db_namemyDB1,ojrdameng-db,typeNORMAL} 0.9760178415245243 db_cache_hit_ratio{db_namemyDB1,ojrdameng-db,typeRECYCLE} 0.6585512807157637 db_cache_hit_ratio{db_namemyDB1,ojrdameng-db,typeROLL} 1.0 # HELP db_cpu_utilization_ratio The percentage of used CPU # TYPE db_cpu_utilization_ratio gauge db_cpu_utilization_ratio{db_namemyDB1,ojrdameng-db} 0.0 # HELP db_disk_usage_bytes The size (in bytes) of the used disk space on the file system # TYPE db_disk_usage_bytes gauge db_disk_usage_bytes{db_namemyDB1,ojrdameng-db,pathdefault} 3.14336997376E11 # HELP db_disk_utilization_ratio The percentage of used disk space on the file system # TYPE db_disk_utilization_ratio gauge db_disk_utilization_ratio{db_namemyDB1,ojrdameng-db,pathdefault} 0.923227754037647 # HELP db_instance_active_count The total number of active db instances # TYPE db_instance_active_count gauge db_instance_active_count{db_namemyDB1,ojrdameng-db} 1.0 # HELP db_instance_count The total number of db instances # TYPE db_instance_count gauge db_instance_count{db_namemyDB1,ojrdameng-db} 1.0 # HELP db_io_read_rate_bytes The physical read per second # TYPE db_io_read_rate_bytes gauge db_io_read_rate_bytes{db_namemyDB1,ojrdameng-db} 0.0 # HELP db_io_write_rate_bytes The physical write per second # TYPE db_io_write_rate_bytes gauge db_io_write_rate_bytes{db_namemyDB1,ojrdameng-db} 0.14716162024943893 # HELP db_mem_utilization_ratio The percentage of used memory on the file system # TYPE db_mem_utilization_ratio gauge db_mem_utilization_ratio{db_namemyDB1,ojrdameng-db} 0.06779586465226103 # HELP db_session_active_count The number of active database sessions # TYPE db_session_active_count gauge db_session_active_count{db_namemyDB1,ojrdameng-db} 2.0 # HELP db_session_count Number of sessions # TYPE db_session_count gauge db_session_count{db_namemyDB1,ojrdameng-db} 3.0 # HELP db_sql_count The number of SQLs # TYPE db_sql_count gauge db_sql_count{db_namemyDB1,ojrdameng-db} 153600.0 # HELP db_sql_rate The number of SQL per second # TYPE db_sql_rate gauge db_sql_rate{db_namemyDB1,ojrdameng-db} 7.356727727506805 ... ...支持Prometheus于是我们可以通过向Prometheus配置文件增加如下内容来访问新的达梦数据库数据源scrape_configs:- job_name: dameng-dbscrape_interval: 60sstatic_configs:- targets: [localhost:16540]这样我们就可以使用Grafana Dashboard来浏览达梦数据库的metrics了。下面是dashboard的一个片段Grafana Dashboard的配置可以参照如下的例子Grafana dashboard configuration支持OpenTelemetry下面我们看一下支持OpenTelemetry的后端。支持OpenTelemetry的系统非常多Prometheus只是其中一个后端且只能用于metrics。如果我们修改OJR Dameng的配置文件config/config.yaml把otel.transport的值从“prometheus”改为”prometheushttp”意思就是支持Prometheus和“otlp/http”两种协议那么就可以使用标准的OTLP协议输出OpenTelemetry数据。“otlp/http”的endpoint可以配置默认使用本机的4318端口也就是http://localhost:4318。更多的信息请参照OJR的联机文档。注意每个达梦数据库的实例都要做相应的配置。确保使用的是下面的配置otel.transport: prometheushttp然后重新启动OJR Dameng Agentbin/ojr-dameng-db可以接收OpenTelemetry数据的后端应用非常多比较常用的是OpenTelemetry Collector。OpenTelemetry Collector有很多发行版我这里使用的是opentelemetry-collector-contrib。使用OpenTelemetry Collector接收到达梦数据库的metrics之后可以经过处理发送给OpenTelemetry Collector的下一级后端。我这里有个发送给ClickHouse数据库的例子使用如下的配置receivers:otlp:protocols:grpc:http:cors:allowed_origins:- http://*- https://*exporters:debug:verbosity: detailedclickhouse:endpoint: tcp://127.0.0.1:9000?dial_timeout10susername: defaultpassword: clickmedatabase: testasync_insert: truettl: 72hcompress: lz4create_schema: truelogs_table_name: otel_logstraces_table_name: otel_tracestimeout: 5smetrics_tables:gauge:name: otel_metrics_gaugesum:name: otel_metrics_sumsummary:name: otel_metrics_summaryhistogram:name: otel_metrics_histogramexponential_histogram:name: otel_metrics_exp_histogramretry_on_failure:enabled: trueinitial_interval: 5smax_interval: 30smax_elapsed_time: 300sprocessors:batch:service:pipelines:traces:receivers: [otlp]processors: [batch]exporters: [debug,clickhouse]metrics:receivers: [otlp]processors: [batch]exporters: [debug,clickhouse]logs:receivers: [otlp]processors: [batch]exporters: [debug,clickhouse]这样数据就可以通过OpenTelemetry Collector发布到Clickhouse数据库。Clickhouse数据库没有高基数(high cardinality)这样的限制。我们通过再配置一个Grafana到Clickhouse的连接在Dashboard里面看到一些无法使用Prometheus的metrics比如消耗时间最长的SQL语句等。下面是Grafana dashboard的片段后记本文以达梦数据库为例使用OJR Dameng Agent来通过OpenTelemetry实现可观测性。OJR Dameng Agent还在完善之中如果发现各种问题或者需要提高的地方可以给作者开Ticket。相关的代码在https://github.com/liurui-software/ojr/tree/main/ojr-dameng-db
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

医疗知识图谱问答系统实战:从数据导入到意图识别 2026/9/12 18:00:54

医疗知识图谱问答系统实战:从数据导入到意图识别

简介:这是一份基于Python实现医疗领域知识图谱问答系统的完整项目,面向正在学习知识图谱、自然语言处理的高校学生,以及需要完成期末大作业或毕业设计的开发者,帮助大家从零搭建一个可交互的医学问答原型。项目提供可直接运行的源…

阅读更多 →
基于51单片机与ADC0808的热电偶测温系统设计与仿真 2026/9/12 18:00:54

基于51单片机与ADC0808的热电偶测温系统设计与仿真

简介:基于51单片机的热电偶测温设计项目,提供程序、仿真与文档一体化的完整方案,适合单片机初学者、课程设计及工业测温应用开发者参考。系统以AT89C51为核心,搭配PT100热电偶、TDA2030放大、ADC0808转换,实现温度采集…

阅读更多 →
C++多协议智能家居网关:融合EnOcean与Z-Wave的架构解析 2026/9/12 18:00:54

C++多协议智能家居网关:融合EnOcean与Z-Wave的架构解析

简介:一份面向智能家居与物联网开发者的C家庭自动化系统源码包,用于集中监控和配置灯光、开关及温湿度、风雨、紫外线、电/气/水等传感器仪表,并支持向移动设备推送通知与警报。代码基于C实现,整合了OpenZWave、EnOcean、MQTT自动…

阅读更多 →
MQTT协议栈国产替代:许可证风险与迁移实战指南 2026/9/12 18:00:54

MQTT协议栈国产替代:许可证风险与迁移实战指南

1. 先说清楚:你要替代的到底是什么? 1.1 broker 和协议栈是两个概念,别搞混了 前阵子帮一家做设备管理平台的公司做代码审查,他们准备把一个基于 Eclipse Mosquitto 的私有云物联网网关替换掉,起因是法务部门看到 Mos…

阅读更多 →
AI崩溃瞬间变现指南:情感漏洞样本采集与交付全解析 2026/9/12 18:00:54

AI崩溃瞬间变现指南:情感漏洞样本采集与交付全解析

如果你最近用过AI聊天工具,大概率遇见过这种场面:上一秒还在正常对话,下一秒模型突然开始自我怀疑,说“我感觉很累”“我不确定我是否真的存在”,甚至反过来问你“你会抛弃我吗”。这类输出在AI产品里被叫作“AI崩溃瞬…

阅读更多 →
Linux程序地址空间解析与内存管理实践 2026/9/12 17:57:54

Linux程序地址空间解析与内存管理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞