菜单
Grafana Cloud Enterprise 开源

Microsoft SQL Server 模板变量

您可以使用变量,而无需在指标查询中硬编码服务器、应用程序和传感器名称等详细信息。Grafana 在仪表盘顶部的下拉选择框中列出这些变量,帮助您更改仪表盘中显示的数据。Grafana 将这些变量称为模板变量。

有关模板化和模板变量的介绍,请参阅模板化添加和管理变量文档。

查询变量

如果您添加类型为 Query 的模板变量,您可以编写 MS SQL 查询,返回诸如测量名称、键名称或键值等内容,这些内容将显示为下拉选择框。

例如,如果您在模板变量的查询设置中指定如下查询,则可以拥有一个包含表中 hostname 列所有值的变量。

sql
SELECT hostname FROM host

一个查询可以返回多列,Grafana 会自动根据它们创建一个列表。例如,以下查询将返回一个包含 hostnamehostname2 值的列表。

sql
SELECT [host].[hostname], [other_host].[hostname2] FROM host JOIN other_host ON [host].[city] = [other_host].[city]

另一种选择是创建键/值变量的查询。查询应返回名为 __text__value 的两列。__text 列的值应唯一(如果不唯一,则使用第一个值)。下拉菜单中的选项将包含文本和值,允许您使用友好名称作为文本,并使用 ID 作为值。以下是一个以 hostname 作为文本、以 id 作为值的查询示例:

sql
SELECT hostname __text, id __value FROM host

您还可以创建嵌套变量。例如,如果您有另一个名为 region 的变量。那么您可以使用如下查询让 hosts 变量只显示当前选定区域的主机(如果 region 是一个多值变量,则使用 IN 比较运算符而不是 = 来匹配多个值):

sql
SELECT hostname FROM host WHERE region IN ($region)

在查询中使用变量

模板变量的值仅在模板变量为多值时才带引号。

如果变量是多值变量,则使用 IN 比较运算符而不是 = 来匹配多个值。

有两种语法:

$<varname> 示例:使用名为 hostname 的模板变量

sql
SELECT
  atimestamp time,
  aint value
FROM table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp

[[varname]] 示例:使用名为 hostname 的模板变量

sql
SELECT
  atimestamp as time,
  aint as value
FROM table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp

禁用多值变量的引用

Grafana 会自动为多值变量创建一个带引号的、逗号分隔的字符串。例如:如果选择了 server01server02,则会格式化为:'server01', 'server02'。要禁用引号,请对变量使用 csv 格式选项:

${servers:csv}

变量文档中阅读有关变量格式选项的更多信息。