Elastic® SQL 输入(metricbeat 模块和输入包)允许用户以灵活的方式对许多受支持的数据库执行 SQL 查询,并将生成的指标提取到 Elasticsearch®。本博客深入探讨了通用 SQL 的功能,并为高级用户提供了各种用例,以便将自定义指标提取到 Elastic®,以进行数据库可观测性。本博客还介绍了 8.10 版本中发布的新功能:从所有数据库获取。
为什么使用“通用 SQL”?
Elastic 已经有针对特定数据库的 metricbeat 和集成包。一个例子是适用于 MySQL 的 metricbeat 和相应的 包。这些 Beats 模块和集成是为特定的数据库定制的,并且指标是使用来自特定数据库的预定义查询提取的。这些集成中使用的查询和相应的指标不可修改。
而通用 SQL 输入(metricbeat 或 输入包)可用于使用用户的 SQL 查询从任何受支持的数据库中抓取指标。查询由用户根据要提取的特定指标提供。这为指标提取提供了一种更强大的机制,用户可以选择特定的驱动程序并提供相关的 SQL 查询,并且结果将使用结构化的映射过程(稍后将解释表/变量格式)映射到一个或多个 Elasticsearch 文档。
通用 SQL 输入可以与现有的集成包结合使用,这些集成包已经提取了特定的数据库指标,从而动态地提取额外的自定义指标,这使得此输入非常强大。在本博客中,通用 SQL 输入和通用 SQL 可以互换使用。
功能详情
本节介绍了一些有助于指标提取的功能。我们提供了响应格式配置的简要说明。然后,我们深入探讨了 merge_results 功能,该功能用于将多个 SQL 查询的结果合并到一个文档中。
用户可能感兴趣的下一个关键功能是从所有自定义数据库收集指标,现在可以使用 fetch_from_all_databases 功能来实现。
现在让我们深入了解具体的功能
支持的不同驱动程序
通用 SQL 可以从不同的数据库中获取指标。当前版本具有从以下驱动程序中获取指标的功能:MySQL、PostgreSQL、Oracle 和 Microsoft SQL Server (MSSQL)。
响应格式
通用 SQL 中的响应格式用于以表格式或变量格式操作数据。以下是用于创建和使用表和变量的格式和语法的概述。
语法
响应格式表
此模式为每一行生成一个事件。表格式对响应中的列数没有限制。此格式可以有任意数量的列。
示例
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 时,对于下面的查询,数据是如何加载到 Elasticsearch 中的。
示例
在本例中,我们使用两个不同的查询从性能计数器中获取指标。
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: 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: 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 输入包使用。输入包目前作为 beta 版本供早期用户使用。让我们一起来了解用户如何通过输入包使用通用 SQL。
通用 SQL 输入包的配置
通用 SQL 输入包的配置选项如下:
- 驱动程序**:** 这是您要使用该包的 SQL 数据库。在本例中,我们将以 MySQL 为例。
- 主机: 用户在此处输入连接到数据库的连接字符串。它会根据使用的数据库/驱动程序而有所不同。有关示例,请参阅此处。
- SQL 查询: 用户在此处编写他们想要执行的 SQL 查询,并指定 response_format。
- 数据集: 用户指定一个数据集名称,响应字段会映射到该名称。
- 合并结果**:** 这是一个高级设置,用于将多个查询合并到单个事件中。
通过自定义 SQL 查询扩展指标
假设用户正在使用MySQL 集成,该集成提供一组固定的指标。现在,他们的需求扩展到通过执行新的自定义 SQL 查询来从 MySQL 数据库检索更多指标。
这可以通过添加一个 SQL 输入包的实例,编写自定义查询并指定一个新的数据集名称来实现,如下面的屏幕截图所示。
这样,用户可以通过执行相应的查询来获取任何指标。查询的生成指标将被索引到新的数据集 sql_second_dataset 中。
当有多个查询时,用户可以通过启用“合并结果”切换开关将它们组合到单个事件中。
自定义用户体验
用户可以通过编写自己的摄取管道并提供自定义的映射来定制他们的数据。用户还可以构建自己的定制仪表板。
如上所示,SQL 输入包提供了通过运行新的查询来获取新指标的灵活性,而这些指标在默认的 MySQL 集成中不受支持(用户从一组预定义的查询中获取指标)。
SQL 输入包还支持多种驱动程序:mssql、postgresql 和 oracle。因此,可以使用单个输入包来满足所有这些数据库的需求。
注意:SQL 输入包尚不支持 fetch_from_all_databases 功能。
立即试用!
现在您已经了解了通用 SQL 的各种用例和功能,请开始使用Elastic Cloud,并尝试将SQL 输入包用于您的 SQL 数据库,以获得定制的体验和指标。如果您正在为我们现有的某些基于 SQL 的集成(例如Microsoft SQL Server、Oracle 等)寻找更新的指标,请继续尝试使用 SQL 输入包。
本文档中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。任何当前不可用的特性或功能可能不会按时交付,或者根本不会交付。