KaiwuDB 监控组件及辅助 SQL 调优介绍

一、介绍

KaiwuDB 具备完善的行为数据采集功能,此功能要求 KaiwuDB 数据库系统 C/E/T 端不同进程的不同维度的指标采集功能十分完善;在不同进程完成指标采集后,会通过 Opentelemetry 和 Collector 将指标存入 Prometheus,以便查找展示。

Opentelemetry 是一个用于跨多个服务和系统进行分布式跟踪和性能监测的工具,可以帮助收集、记录和分析应用程序的各种数据。

Opentelemetry Collector 是其中的一个组件,它提供了一个通用的数据收集器,可以从多个数据源中收集和转换数据,并将其发送到多个目标存储或分析平台。

1. Opentelemetry Collector 的主要功能

  • 数据收集:Opentelemetry Collector 可从多个数据源收集数据,包括 OpenTracing、OpenCensus、Jaeger、Zipkin 和 Prometheus 等数据源;

  • 数据转换:Opentelemetry Collector 可以将从不同来源收集的数据转换为一致的格式,以便于传输、存储和分析;

  • 数据导出:Opentelemetry Collector 可以将已转换的数据导出到多个目标存储或分析平台,包括 Kafka、AWS S3、Google Cloud Storage、Elasticsearch、Prometheus 和 Zipkin 等。

2. Opentelemetry Collector 的获取

Opentelemetry Collector 是一个开源项目,可以在 githhub 中查看并获取到源码及发行版 https://github.com/open-telemetry/opentelemetry-collector


git clone git@github.com:open-telemetry/opentelemetry-collector.git

也可通过 docker 拉取镜像:


docker pull otel/opentelemetry-collector:0.78.0

二、监控使用

Opentelemetry Collector 可以对数据库进行监控,以收集关于数据库性能和行为方面的指标。它可以使用 OpenTelemetry API 或可用的数据库驱动程序进行操作,以收集以下指标:

  • 响应时间:可以测量数据库请求的响应时间,从而确定查询的性能和效率;

  • 错误率:可以识别数据库是否遇到错误,以及有多少请求在请求过程中失败;

  • 连接数:可以测量数据库上打开的连接数量,以确定有多少客户端正在连接;

  • 缓存效率:可以了解数据库是否使用缓存,并确定缓存的命中率;

  • 读写比率:可以了解有多少数据库请求是读操作和写操作。

通过 Opentelemetry Collector 监控数据库,可以及时发现数据库性能方面的问题,如响应时间长、错误率高等,并进行诊断和优化。此外,它还可以与其他组件一起使用,如有些业务数据需要查询数据库,就可以将这些指标集成到整个业务监控体系中,以获取更完整的业务性能指标。

Opentelemetry 中指标采集的流程如下:

MetricReader 会周期性调用 MetricCollector 的 Collect 方法, MetricCollector 的 Collect 方法中会遍历 MeterProvider 中所有指标并将其打包返回给 MetricReader,随后通过 Expor 方法将指标通过 http 协议发送到 OpenTelemetry-Collector。

Opentelemetry Collector 支持从 Prometheus 数据源中收集指标数据,并将其转换为 OpenTelemetry 标准的格式,以便于进行跨平台和跨语言的应用。以下是如何使用 Opentelemetry Collector 收集和处理 Prometheus 数据源的指标数据的步骤:

1. 配置 Opentelemetry Collector

Opentelemetry Collector 的配置可以由以下几个部分组成:

  • Receiver:接收器,即 Collector 接收的数据源的形式;

  • Processor:在 Receiver 和 Exportor 之间执行的类似于处理数据的插件;

  • Exportor:导出器,即 Collector 输出的数据源的形式;

  • Service:部分用于配置 OpenTelemetry Collector 根据上述的配置会启用那些特性。

2. 启动 Opentelemetry Collector

启动 Opentelemetry Collector 时,可以使用命令行或配置文件来指定要收集和导出的数据源和目标存储或分析平台。


# start collector using the configuration file
$ ./otelcol --config collector-config.yaml

也可使用 docker 启动镜像:

ocker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector:0.78.0

在客户端应用程序中生成指标数据为了将指标数据发送到 Opentelemetry Collector,客户端应用程序需要使用适当的 API 和配置来生成指标数据。以下是使用 C++ 应用程序发送指标数据的示例代码:

#include <opentelemetry/sdk/metrics/meter.h>
#include <opentelemetry/exporters/otlp/otlp_http/otlp_http_exporter.h>
#include <opentelemetry/sdk/metrics/controller.h>
#include <opentelemetry/sdk/metrics/processormetrics.h>
#include <iostream>
using namespace opentelemetry::sdk::metrics;
using namespace opentelemetry::exporter::otlphttp;
 int main()
{
  try
  {
    // Create a metric exporter
    OtlpHttpExporterOptions opts;
    opts.url = "http://localhost:4317/v1/metrics";
    auto exporter = std::unique_ptr<OtlpHttpExporter>(new OtlpHttpExporter(opts));
     // Create a processor
    std::unique_ptr<Processor> processor(new Processor());
     // Create a controller
    auto controller = std::make_shared<Controller>(std::move(processor), std::chrono::system_clock::now());
     // Create a meter
    auto meter = controller->provider().GetMeter("example");
     // Define a counter metric
    auto counter = meter->NewIntCounter("example_counter", "counts", "1");
     // Record some data
    for (int i = 0; i < 10; i++)
    {
      counter->Add(i, {{"key", "value"}});
    }
     // Shutdown the controller
    controller->Shutdown().wait();
  }
  catch (const std::exception& e)
  {
    std::cerr << "Exception caught: " << e.what() << std::endl;
    return 1;
  }
   return 0;
}

在此示例中,使用 OpenTelemetry C++ SDK 创建了一个指标 exporter、processor 和 controller,并使用 meter 创建了一个 counter 指标。然后,它使用 Add 方法记录了 10 次计数值,并将指标数据发送到了 OpenTelemetry Collector 中。

3. 分析和可视化数据

通过 Opentelemetry Collector,我们可以将 Prometheus 数据源的指标数据导出到多个目标存储或分析平台。以下是将指标数据导出到 Prometheus 的示例配置:


receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: 'my-service'
          scrape_interval: 30s
          static_configs:
            - targets: ['localhost:9080/metrics'] # replace with your collector's target
processors:
  batch:
exporters:
  prometheus:
    namespace: my-service
    endpoint: '0.0.0.0:8080' # replace with your prometheus server's endpoint
service:
  pipelines:
    metrics:
      receivers: [prometheus]
      processors: [batch]
      exporters: [prometheus]

在此配置文件中,我们定义了一个名为“prometheus”的导出器,并设置了导出命名空间和 Prometheus 服务器的端点地址。通过将指标数据导出到 Prometheus,我们可以使用 Prometheus 的查询语言 PromQL 来进行数据分析和可视化。

在 KaiwuDB 的监控中,使用了 Opentelemetry 的 Metrics API,创建 Gauge 和Counter的方法,并将其注册到 opentelemetry 的 MeterProvider 中。同时,使用 otlp exporter 将指标数据发送到远程的 OTLP 收集器。


opentelemetry::exporter::otlp::OtlpHttpMetricExporterOptions opts;
int interval, timeout;     
ZString ot_url = GetSysConfig("METRICS_PLUGIN", "url");
ZString interval_s = GetSysConfig("METRICS_PLUGIN", "interval");
ZString timeout_s = GetSysConfig("METRICS_PLUGIN", "timeout");
interval = atoi(interval_s.c_str());
timeout = atoi(timeout_s.c_str());
if (ot_url != "")
{
    opts.url = ot_url;
}
else
{
    opts.url = "http://localhost:4318/v1/metrics";
}
// Create OTLP exporter instance
auto exporter = otlp::OtlpHttpMetricExporterFactory::Create(opts);
// Initialize and set the global MeterProvider
metric_sdk::PeriodicExportingMetricReaderOptions options;
options.export_interval_millis = std::chrono::milliseconds(interval);
options.export_timeout_millis = std::chrono::milliseconds(timeout);

// Initialize the reader
std::unique_ptr<metric_sdk::MetricReader> reader{
    new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options)};
// Initialize the provider
auto resource_attributes = opentelemetry::sdk::resource::ResourceAttributes{
    {"service.name", "service"}};
auto resource = opentelemetry::sdk::resource::Resource::Create(resource_attributes);
auto provider = std::shared_ptr<metrics_api::MeterProvider>(new metric_sdk::MeterProvider(std::unique_ptr<opentelemetry::v1::sdk::metrics::ViewRegistry>(new opentelemetry::v1::sdk::metrics::ViewRegistry()), resource));
auto p = std::static_pointer_cast<metric_sdk::MeterProvider>(provider);
p->AddMetricReader(std::move(reader));
metrics_api::Provider::SetMeterProvider(provider);

上述代码在 KaiwuDB 中用于配置和初始化 OpenTelemetry 的 OTLP exporter 来实现将指标数据发送到指定的后端服务。

在启动Opentelemetry Collector后,即可通过定义好的 url-http://localhost:4318/v1/metrics 来查询相关监控数据。KaiwuDB 中获取到的为 Promtheus 数据,其获取示例如下:

# HELP sys_connection_max_count 
# TYPE sys_connection_max_count gauge
sys_connection_max_count{clusterId="60a10600-497b-4186-88d0-bacafe0a1857",job="KWDB",nodeName="e1Primary",nodeType="E:ME"} 100
# HELP sys_connection_used_count 
# TYPE sys_connection_used_count gauge
sys_connection_used_count{clusterId="60a10600-497b-4186-88d0-bacafe0a1857",job="KWDB",nodeName="e1Primary",nodeType="E:AE"} 0

三、监控指标对于 SQL 的调优作用

在 KaiwuDB 中,针对性能的监控有如下指标

在连接 KaiwuDB 后,通过 http://localhost:4318/v1/metrics 获取到相关的监控指标。

使用如下 SQL 进行查询:

再次查询监控指标可以发现 CPU 的使用率明显升高。

因为这个 SQL 语句使用了通配符(%)来模糊匹配列中的字符串,如果该列中的数据量很大,这个查询可能会导致数据库 CPU 使用率升高,因为它需要在整个列中搜索匹配项。

所以我们可以通过使用添加索引或使用前缀通配符来优化 SQL。


ALTER TABLE operation ADD INDEX idx_result (result);

再次使用 SQL 进行查询后可以看到所用时间明显减少,同时,监控数据中的 CPU 使用率也有所下降。

四、总结

Opentelemetry Collector 是一个非常强大的工具,可以帮助用户轻松地收集、转换和导出分布式跟踪和性能监测数据。使用 Opentelemetry Collector,用户可以更好地了解他们的应用程序和系统的性能,并为业务决策提供更好的数据支持。

通过使用 OpenTelemetry 来收集和分析 SQL 指标,可以轻松地监控每个 SQL 查询的执行效率,并识别潜在的性能问题。这有助于优化查询性能并提高应用程序的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单脉冲测角-和差比幅法-方向图传播因子-函数编写

方向图传播因子-函数编写 和差比幅法单脉冲测角原理代码仿真结果参数说明 和差比幅法单脉冲测角原理 有关单脉冲测角和差比幅法的原理已经在博文单脉冲测角-和差比幅法中详细介绍了&#xff0c;我们在实际仿真的时候&#xff0c;往往需要在给定来波方向下方向图转化因子&#…

安防视频监控平台EasyCVR服务器部署后出现报错,导致无法级联到域名服务器,该如何解决?

视频监控平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;安防监控平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能支持视频定时轮播。视频监控…

005 OpenCV直方图

目录 一、环境 二、直方图原理概述 三、代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、直方图原理概述 OpenCV是一个广泛使用的开源计算机视觉库&#xff0c;它提供了许多用于图像处理和分析的函数和算法。其中&#xff…

虚拟机里为什么桥接模式可以广播,NAT模式不能广播?

在虚拟机网络配置中&#xff0c;桥接模式&#xff08;Bridged mode&#xff09;允许虚拟机在与主机相同的网络上作为一个独立的设备出现。这意味着虚拟机可以接收和发送广播消息&#xff0c;就像物理机器一样&#xff0c;因为它们处于同一个物理网络上。 相反&#xff0c;NAT模…

单片非晶磁性测量系统典型磁参数的不确定度与重复性

典型磁参数的不确定度与重复性 典型的测试点 最佳不确定度 ( k 2 ) 最佳重复性 损耗Ps P1.0 ④ 3.0% 1.0% P1.3 3.0% 1.0% P1.4 3.0% 1.0% P1.5 3.0% 1.0% 磁感Bm B25 ⑤ 1.0% 0.3% B50 1.0% 0.3% B80 1.0% 0.3% 单片非晶磁性测量系统测量条件 &…

著名的勃艮第葡萄酒是如何分类的?

勃艮第代表了与他们的地理位置密切相关的所有葡萄酒和葡萄酒风格&#xff0c;1936年法国根据产地对勃艮第葡萄酒进行了分类&#xff0c;勃艮第地区内的100个被批准的葡萄酒种植区被界定&#xff0c;这些地块被分为四个等级&#xff0c;最高等级代表了种植最高品质葡萄酒的最佳土…

亚马逊防关联如何做?看这一篇就够了

我们都知道亚马逊在众多跨境电商平台里属于严格的那个&#xff0c;商家们常常调侃亚马逊死法千万种&#xff0c;但最惨的还是账户被平台关联封号。有的新手刚注册还没开始就被关联封号了&#xff0c;有的业绩不错的店铺操作没注意&#xff0c;在别的地方登录了一下就被封了&…

软件定义卫星:数字卫星实践

随着巨型低轨卫星星座、卫星互联网等计划的推进&#xff0c;近年来全球卫星产业迅速发展&#xff0c;在轨卫星呈现规模化、网络化以及智能化趋势。大规模卫星系统为飞机、船舶、车辆等提供了各种各样的天基服务&#xff0c;对国防、科研、生产生活具有重要意义。 与此同时&…

Python基础:迭代器(Iterators)详解

什么是迭代器&#xff1f; 迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 迭代对象 Python中使用迭代器的地方很多&#xff0c;大多数的容器对象都是可迭代对象&#xff…

Analyzing coredump file by gdb

1 coredump文件简介 在Linux中&#xff0c;当进程崩溃或异常终止时&#xff0c;系统会将进程的内存状态写入一个coredump文件中&#xff0c;这个文件包含了进程崩溃时的内存映像&#xff0c;可以用于分析进程崩溃的原因。 2 coredump文件的存储路径 执行如下指令查询coredum…

猫罐头哪个牌子质量好性价比高?推荐十款猫罐头品牌排行榜!

当前口罩形势严峻&#xff0c;海外罐头的价格飙升&#xff0c;且市场上充斥着难以辨别真伪的产品。除了海外罐头&#xff0c;您是否有其他口碑良好的国产罐头推荐&#xff1f; 作为从事了6年猫咪铲屎官的我来说&#xff0c;对于猫咪的日常饮食来源有一些经验。我也给我家的猫咪…

pikach靶场暴力破解

pikach靶场暴力破解 文章目录 pikach靶场暴力破解安装pikach靶场暴力破解第一关第二关第三关第四关 安装pikach靶场 进入github下载pikach的源码 不是linux推荐下载压缩包 下载完成后放入phpstudy中进行解压放入www网站根目录下 在数据库中新建数据库为pikachu create data…

OpenCV [c++](图像处理基础示例小程序汇总)

OpenCV [c++](图像处理基础示例小程序汇总) 推荐 原创 NCUTer 2023-04-04 14:18:49 文章标签 Image 图像处理 文章分类 计算机视觉 人工智能 在51CTO的第一篇博文 阅读数1467 一、图像读取与显示 #include<opencv2/opencv.hpp> #include<iostream>using…

Vue3 源码解读系列(八)——生命周期

生命周期 正常的生命周期 // 注册钩子函数 const onBeforeMount createHook(bm/* BEFORE_MOUNT */) const onMounted createHook(m/* MOUNTED */) const onBeforeUpdate createHook(bu/* BEFORE_UPDATE */) const onUpdated createHook(u/* UPDATED */) const onBeforeUnm…

【中间件】中间件的宏观探讨漫谈

中间件探讨 内容管理 intro中间件和框架why use常用相关Middleware接入层服务层 本文主要是宏观上再次探讨一下中间件 cfeng之前单纯的分享过缓存、消息队列、还有就是Spring Cloud下面提供的一些中间件的使用&#xff0c;但是整体上就是感觉很松散的&#xff0c;所以cfeng现在…

金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]

文章目录 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金蝶云星空ScpSupRegHandler任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请…

江苏专转本考试时,遇到不会的题目该怎么办呢??

有很多同学最近在问&#xff0c;如果专转本考试时遇到 不会的题目怎么办&#xff1f;&#xff1f; 考场上题目太陌生没见过会不会凉凉 以学姐自身经验分享&#xff0c;其实未必会凉凉&#xff0c;当时我在16届计算机考试时&#xff0c;遇上了填空题新题型&#xff0c;当时在考…

武汉凯迪正大KDHG-220P互感器综合测试仪

主要特点 武汉凯迪正大KDHG-220P互感器综合测试仪&#xff0c;仅需进行简单的数字设定&#xff1a;设定互感器的额定参数。仪器将全过程自动记录数据&#xff0c;并自动将变比极性、伏安特性曲线等计算并显示出来&#xff0c;省去换线、手动调压、人工记录、整理、描曲线等烦琐…

【旅游行业】Axure旅游社交平台APP端原型图,攻略门票酒店民宿实战模板

作品概况 页面数量&#xff1a;共 110 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;旅游平台&#xff0c;酒店住宿 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为「旅游社交平台」移动端…

单链表相关面试题--7.链表的回文结构

/* 解题思路&#xff1a; 此题可以先找到中间节点&#xff0c;然后把后半部分逆置&#xff0c;最近前后两部分一一比对&#xff0c;如果节点的值全部相同&#xff0c;则即为回文。 */ class PalindromeList { public:bool chkPalindrome(ListNode* A) {if (A NULL || A->ne…