Elasticsearch 模板变量
您可以使用变量,而无需在指标查询中硬编码服务器、应用程序和传感器名称等详细信息。Grafana 在仪表盘顶部的下拉选择框中列出这些变量,以帮助您更改仪表盘中显示的数据。Grafana 将此类变量称为模板变量。
选择变量语法
Elasticsearch 数据源支持两种可在查询(Query)字段中使用的变量语法
$varname
,例如hostname:$hostname
,易于读写,但无法在单词中间使用变量。[[varname]]
,例如hostname:[[hostname]]
启用多值(Multi-value)或包含所有值(Include all value)选项时,Grafana 会将标签从纯文本转换为 Lucene 兼容的条件。有关详细信息,请参阅多值变量文档。
在查询中使用变量
您可以在查询内部使用其他变量。此示例用于定义名为 $host
的变量
{"find": "terms", "field": "hostname", "query": "source:$source"}
这在查询定义内部使用了另一个名为 $source
的变量。每当您通过下拉菜单更改 $source
变量的值时,Grafana 会触发 $host
变量的更新,使其仅包含按此处 source
文档属性过滤的主机名。
这些查询默认按词项顺序返回结果(然后可以按字母或数字排序,与任何变量一样)。要生成按文档计数排序的词项列表(前 N 个值列表),请添加一个值为“doc_count”的 orderBy
属性。这会自动选择降序排序。
注意
要将升序排序 (
asc
) 与 doc_count(后 N 个列表)一起使用,请设置order: "asc"
。然而,Elasticsearch 不建议这样做,因为按升序文档计数排序可能会返回不准确的结果。
要保持词项按文档计数顺序排列,请将变量的排序(Sort)下拉菜单设置为 禁用(Disabled)。您也可以使用其他排序标准,例如字母顺序(Alphabetical),重新排序。
{"find": "terms", "field": "hostname", "orderBy": "doc_count"}
模板变量示例

在上面的示例中,Lucene 查询使用名为 $hostname
的变量根据 hostname
属性过滤文档。该示例还在词项(Terms)分组字段输入框中使用了变量,您可以使用它快速更改数据的分组方式。
要在 Grafana Play 上查看示例仪表盘,请参阅Elasticsearch 模板化仪表盘。
创建查询
使用自定义 JSON 字符串编写查询,字段在 Elasticsearch 索引映射中被映射为关键词(keyword)。
如果查询是具有 text
和 keyword
类型的多字段查询,请使用 "field":"fieldname.keyword"
(有时是 fieldname.raw
)在查询中指定关键词字段。
查询 | 描述 |
---|---|
{"find": "fields", "type": "keyword"} | 返回索引类型为 keyword 的字段名称列表。 |
{"find": "terms", "field": "hostname.keyword", "size": 1000} | 使用词项聚合返回关键词的值列表。查询将使用当前仪表盘时间范围作为时间范围查询。 |
{"find": "terms", "field": "hostname", "query": '<Lucene query>'} | 使用词项聚合和指定的 Lucene 查询过滤器返回关键词字段的值列表。查询将使用当前仪表盘时间范围作为查询的时间范围。 |
terms
查询默认有 500 个结果的限制。要设置自定义限制,请在查询中设置 size
属性。