Elastic SQL 输入:数据库指标可观测性的通用解决方案

作者:Lalit Satapathy, Ishleen Kaur, Muthukumar Paramasivam

Elastic® SQL 输入(metricbeat 模块和输入包)允许用户以灵活的方式对许多支持的数据库执行 SQL 查询,并将结果指标提取到 Elasticsearch®。 本博客深入探讨了通用 SQL 的功能,并为高级用户提供了各种用例,以将自定义指标引入 Elastic®,以实现数据库可观察性。 该博客还介绍了 8.10 中发布的从所有数据库中获取新功能。

为什么是“通用 SQL”?

Elastic 已经拥有针对特定数据库的 metricbeat 和集成包。 一个例子是 MySQL 的 metricbeat — 以及相应的集成包。 这些 beats 模块和集成是针对特定数据库定制的,并且使用预定义的查询从特定数据库中提取指标。 这些集成中使用的查询和相应的指标不可修改。

而通用 SQL 输入(metricbeat 或输入包)可用于使用用户的 SQL 查询从任何支持的数据库中抓取指标。 用户根据要提取的特定指标来提供查询。 这为指标摄取提供了一种更强大的机制,用户可以选择特定的驱动程序并提供相关的 SQL 查询,然后使用结构化映射过程(稍后解释表/变量格式)将结果映射到一个或多个 Elasticsearch 文档。

通用 SQL 输入可以与已提取特定数据库指标的现有集成包结合使用,以动态提取其他自定义指标,从而使此输入非常强大。 在本博客中,通用 SQL 输入 (Generic SQL input) 和通用 SQL (Generic SQL) 可以互换使用。

通用 SQL 数据库指标收集

功能详情

本节介绍一些有助于指标提取的功能。 我们提供响应格式配置的简要说明。 然后我们深入研究 merge_results 功能,该功能用于将多个 SQL 查询的结果合并到单个文档中。

用户可能感兴趣的下一个关键功能是从所有自定义数据库收集指标,现在可以通过 fetch_from_all_databases 功能实现这一点。

现在让我们深入了解具体功能:

支持不同的驱动程序

通用 SQL 可以从不同的数据库获取指标。 当前版本能够从以下驱动程序获取指标:MySQL、PostgreSQL、Oracle 和 Microsoft SQL Server (MSSQL)。

响应格式

通用 SQL 中的响应格式用于操作表或变量格式的数据。 以下概述了创建和使用表和变量的格式和语法。

语法:response_format: table {{or}} variables

响应格式:表

此模式为每一行生成一个事件。 表格式对响应中的列数没有限制。 此格式可以有任意数量的列。

例子:

driver: "mssql"
sql_queries:- query: "SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'"response_format: table

此查询返回类似于以下内容的响应:

"sql":{"metrics":{"counter_name":"User Connections ","cntr_value":7},"driver":"mssql"
}

上面生成的响应将 counter_name 添加为文档中的键。

响应格式:变量

变量格式支持键:值对。 此格式要求在查询中仅获取两列。

例子:

driver: "mssql"
sql_queries:- query: "SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'"response_format: variables

变量格式以上面查询中的第一个变量作为键:

"sql":{"metrics":{"user connections ":7},"driver":"mssql"
}

在上面的响应中,你可以看到 counter_name 的值用于生成可变格式的密钥。

响应优化:merge_results

我们现在支持将多个查询响应合并到一个事件中。 通过启用 merge_results,用户可以显着优化摄取到 Elasticsearch 的指标的存储空间。 此模式可以有效压缩生成的文档,而不是生成多个文档,而是在适用的情况下生成单个合并文档。 从多个查询生成的类似类型的指标被组合到单个事件中。

合并结果的输出

语法:merge_results: true {{or}} false

在下面的示例中,你可以看到当 merge_results 被禁用时,数据如何加载到 Elasticsearch 中以进行以下查询。

例子:

在此示例中,我们使用两个不同的查询从性能 counter 获取指标。

merge_results: false
driver: "mssql"
sql_queries:- query: "SELECT cntr_value As 'user_connections' FROM sys.dm_os_performance_counters WHERE counter_name= 'User Connections'"response_format: table- query: "SELECT cntr_value As 'buffer_cache_hit_ratio' FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio' AND object_name like '%Buffer Manager%'"response_format: table

正如你所看到的,上面示例的响应为每个查询生成一个文档。

第一个查询的结果文档:

"sql":{"metrics":{"user_connections":7},"driver":"mssql"
}

第二个查询生成的文档:

"sql":{"metrics":{"buffer_cache_hit_ratio":87},"driver":"mssql"
}

当我们在查询中启用 merge_results 标志时,上述两个指标将组合在一起,并将数据加载到单个文档中。

你可以在下面的示例中看到合并后的文档:

"sql":{"metrics":{"user connections ":7,“buffer_cache_hit_ratio”:87},"driver":"mssql"
}

然而,只有当表查询被合并并且每个查询生成一行时,这样的合并才是可能的。 对合并变量查询没有限制。

引入新功能:fetch_from_all_databases

这是一项新功能,通过启用 fetch_from_all_databases 标志,自动从 Microsoft SQL Server 的系统和用户数据库中获取所有数据库指标。

请密切关注 8.10 发行版本,你可以在其中开始使用获取所有数据库功能。 在 8.10 版本之前,用户必须手动提供数据库名称才能从自定义/用户数据库中获取指标。

语法: fetch_from_all_databases: true {{or}} false

以下是禁用 fetch_from_all_databases 标记的示例查询:

fetch_from_all_databases: false  
driver: "mssql"
sql_queries:- query: "SELECT @@servername AS server_name, @@servicename AS instance_name, name As 'database_name', database_id FROM sys.databases WHERE name='master';"

上述查询仅获取所提供的数据库名称的指标。 这里的输入数据库是 master,因此仅获取 master 的指标。

以下是启用了 fetch_from_all_databases 标志的示例查询:

fetch_from_all_databases: true
driver: "mssql"
sql_queries:- query: SELECT @@servername AS server_name, @@servicename AS instance_name, DB_NAME() AS 'database_name', DB_ID() AS database_id;response_format: table 

上述查询从所有可用数据库中获取指标。 当用户想要从所有数据库获取数据时,这非常有用。

请注意:目前仅 Microsoft SQL Server 支持此功能,并将由 MS SQL 集成在内部使用,以支持默认提取所有用户数据库的指标。

使用通用 SQL:Metricbeat

通用 SQL metricbeat 模块提供了针对不同数据库驱动程序执行查询的灵活性。 metricbeat 输入可作为任何生产用途的 GA。 在这里,你可以找到有关为不同驱动程序配置通用 SQL的更多信息以及各种示例。

使用通用 SQL:输入包

输入包为高级用户提供了灵活的解决方案,用于在 Elastic 中定制他们的摄取体验。 通用 SQL 现在也可作为 SQL 输入包使用。 输入包目前可作为测试版供早期用户使用。 让我们来看看用户如何通过输入包使用通用 SQL。

通用 SQL 输入包的配置:

通用 SQL 输入包的配置选项如下:

  • Driver:这是你要使用该包的 SQL 数据库。 本例中,我们以 mysql 为例。
  • Hosts:用户在此处输入连接字符串以连接到数据库。 它会根据所使用的数据库/驱动程序而有所不同。 请参阅此处的示例。
  • SQL Queries:用户在此处编写他们想要触发的 SQL 查询并指定 response_format。
  • Data set:用户指定响应字段映射到的数据集名称。
  • 合并结果:这是一项高级设置,用于将查询合并到单个事件中。
SQL 输入包的配置参数

指标映射到 “sql_first_dataset” 创建的索引

通过自定义 SQL 查询实现指标可扩展性

假设用户正在使用 MYSQL Integration,它提供了一组固定的指标。 他们的要求现在扩展到通过触发新的自定义 SQL 查询从 MYSQL 数据库检索更多指标。

这可以通过添加 SQL 输入包的实例、编写自定义查询并指定新的 data set 名称来实现,如下面的屏幕截图所示。

 这样用户就可以通过执行相应的查询来获取任何指标。 查询的结果指标将被索引到新数据集 sql_second_dataset。

摄取管道和映射的定制

当存在多个查询时,用户可以通过启用 “Merge Result” 开关将它们组合到单个事件中。

定制用户体验

用户可以通过编写自己的摄取管道并提供自定义映射来自定义数据。 用户还可以构建自己的定制仪表板。

摄取管道和映射的定制

正如我们在上面所看到的,SQL 输入包提供了通过运行新查询来获取新指标的灵活性,这在默认的 MYSQL 集成中是不支持的(用户从一组预定的查询中获取指标)。

SQL 输入包还支持多种驱动程序:mssql、postgresql 和 oracle。 因此,可以使用单个输入包来满足所有这些数据库的需求。

注意:SQL 输入包尚不支持 fetch_from_all_databases 功能。

试试看!

现在你已经了解了通用 SQL 的各种用例和功能,开始使用 Elastic Cloud 并尝试为你的 SQL 数据库使用 SQL 输入包并获得定制的体验和指标。 如果你正在为我们现有的一些基于 SQL 的集成(例如 Microsoft SQL Server、Oracle 等)寻找更新的指标,请继续尝试 SQL 输入包。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

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

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

相关文章

单调队列---数据结构与算法

简介 队列也是一种受限制的线性表和栈相类似,栈是先进后出,而队列是先进先出,就好像一没有底的桶,往里面放东西,如图 在这里也是用数组来实现队列,用数组实现的叫做顺序队列 队列的数组模拟 const int N…

学习笔记|ADC反推电源电压|扫描按键(长按循环触发)|课设级实战练习|STC32G单片机视频开发教程(冲哥)|第十八集:ADC实战

文章目录 1.ADC反推电源电压测出Vref引脚电压的意义?手册示例代码分析复写手册代码Tips:乘除法与移位关系为什么4096后面还有L 2.ADC扫描按键(长按循环触发)长按触发的实现 3.实战小练1.初始状态显示 00 - 00 - 00,分别作为时,分&#xff0c…

buuctf-[GXYCTF2019]禁止套娃 git泄露,无参数rce

用dirsearch扫一下&#xff0c;看到flag.php 访问一下没啥东西&#xff0c;使用githack python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn/.git/查看index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;…

Net相关的各类开源项目

Net相关的各类开源项目 WPFHandyControlLive-ChartsWPFDeveloperswpf-uidesignStylet WebScheduleMasterYiShaAdminBlog.CoreNebula.AdminNewLife.CubeOpenAuth UnityuGUIUnityCsReferenceEpitomeMyUnityFrameWorkKSFrameworkTowerDefense-GameFramework-Demo 通用ClientServer…

数据库安全与保护

数据库安全与保护 文章目录 第一节 数据库完整性一、完整性约束条件的作用对象1.列级约束2.元组约束3.表级约束 二、定义与实现完整性约束1、实体完整性2、参照完整性3、自定义完整性非空约束 三、命名完整性约束四、更新完整性约束1、删除约束2、添加约束 第二节 触发器一、创…

NUWA论文阅读

论文链接&#xff1a;NUWA: Visual Synthesis Pre-training for Neural visUal World creAtion 文章目录 摘要引言相关工作视觉自回归模型视觉稀疏自注意 方法3D数据表征3D Nearby Self-Attention3D编码器-解码器训练目标 实验实现细节与SOTA比较T2I微调T2V微调V2V微调Sketch-t…

获取沪深300的所有个股列表

脚本&#xff1a; import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4444.shtml" response requests.get(url) soup BeautifulSoup(response.text, "html.parser")# 找到包含class为e1的元素 elements soup.find_a…

Leetcode 231.2的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

文件操作 和 IO - 详解

一&#xff0c;认识文件 1.1 树形结构组织和目录 文件是对于"硬盘"数据的一种抽象&#xff0c;在一台计算机上&#xff0c;有非常多的文件&#xff0c;这些文件是通过 "文件系统" 来进行组织的&#xff0c;本质上就是通过 "目录"(文件夹) 这样…

Maven(项目构建管理工具)

为什么要使用Maven&#xff1f; 传统项目管理状态分析&#xff1a; ①jar包不统一&#xff0c;jar包不兼容&#xff1b; ②工程升级维护过程操作繁琐&#xff1b; ........... Maven(JAVA书写)&#xff1a;管理jar包以及jar之间的依赖关系&#xff0c;完成项目编译&#xff0c;…

【Java 进阶篇】JDBC数据库连接池Druid详解

在Java应用程序中&#xff0c;与数据库进行交互是一个常见的任务。为了更有效地管理数据库连接并提高性能&#xff0c;数据库连接池是一种常见的解决方案。Druid是一个流行的JDBC数据库连接池&#xff0c;它具有丰富的功能和高性能。本博客将详细介绍Druid连接池&#xff0c;包…

6.Tensors For Beginners-What are Convector

Covectors &#xff08;协向量&#xff09; What‘s a covector Covectors are “basically” Row Vectors 在一定程度上&#xff0c;可认为 协向量 基本上就像 行向量。 但不能简单地认为 这就是列向量进行转置&#xff01; 行向量 和 列向量 是根本不同类型的对象。 …

【iptables 实战】9 docker网络原理分析

在开始本章阅读之前&#xff0c;需要提前了解以下的知识 阅读本节需要一些docker的基础知识&#xff0c;最好是在linux上安装好docker环境。提前掌握iptables的基础知识&#xff0c;前文参考【iptables 实战】 一、docker网络模型 docker网络模型如下图所示 说明&#xff1…

僵尸进程的产生与处理

僵尸进程是指在进程结束后&#xff0c;其父进程没有及时处理该进程的终止状态信息&#xff0c;导致该进程的进程描述符仍然存在于系统进程表中&#xff0c;但是已经没有实际的执行代码。这样的进程被称为僵尸进程。 僵尸进程的产生是由于父进程没有及时调用wait()或waitpid()等…

RabbitMQ-死信队列

接上文 RabbitMQ-java使用消息队列 1 死信队列简介 死信队列模式实际上本质是一个死信交换机绑定的死信队列&#xff0c;当正常队列的消息被判定为死信时&#xff0c;会被发送到对应的死信交换机&#xff0c;然后再通过交换机发送到死信队列中&#xff0c;死信队列也有对应的消…

基于Matlab求解高教社杯数学建模竞赛(cumcm2010A题)-储油罐的变位识别与罐容表标定(附上源码+数据+题目)

文章目录 题目解题源码数据下载 题目 通常加油站都有若干个储存燃油的地下储油罐&#xff0c;并且一般都有与之配套的“油位计量管理系统”&#xff0c;采用流量计和油位计来测量进/出油量与罐内油位高度等数据&#xff0c;通过预先标定的罐容表&#xff08;即罐内油位高度与储…

【Ubuntu】基于C++实现人脸识别

人脸识别考勤机 文章目录 人脸识别考勤机概述第一章 搭建Ubuntu环境1.1 什么是物联网1.2 物联网应该怎么学1.3 Linux开发环境搭建1.4 Linux基本使用1.5 Ubuntu网络配置 第二章 “hello,world!”程序2.1 什么是程序2.2 “hello,world!”程序2.3 C语法扩展2.4 常见错误调试 第三章…

ELK 处理 Spring Boot 日志

ELK 处理 Spring Boot 日志&#xff0c;妙啊&#xff01; 来源&#xff1a;ibm.com/developerworks/cn/java /build-elk-and-use-it-for-springboot -and-nginx/index.html ELK 简介 Logstash Elasticsearch Kibana ELK 实现方案 ELK 平台搭建 安装 Logstash 安装 Elas…

国庆day5

客户端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);socket new QTcpSocket(this);//此时&#xff0c;已经向服务器发送连接请求了&#xff0c;如果成功连…

图的深度遍历-邻接矩阵实现

description 本题要求实现邻接矩阵存储图的深度优先遍历。 函数接口定义&#xff1a; void DFS(MGraph G,Vertex v); 其中MGraph是邻接矩阵存储的图&#xff0c;定义如下&#xff1a; #define MaxVertexNum 10 /定义最大顶点数/ typedef int Vertex;/* 用顶点下标表示顶点,…