InfluxDB template variables
Instead of hard-coding details such as server, application, and sensor names in metric queries, you can use variables. Grafana lists these variables in dropdown select boxes at the top of the dashboard to help you change the data displayed in your dashboard. Grafana refers to such variables as template variables.
For an introduction to templating and template variables, refer to the Templating and Add and manage variables documentation.
Use query variables
If you add a query template variable, you can write an InfluxDB exploration (metadata) query. These queries can return results like measurement names, key names, or key values.
For more information, refer to Add query variable.
For example, to create a variable that contains all values for tag hostname
, specify a query like this in the query variable Query:
SHOW TAG VALUES WITH KEY = "hostname"
Chain or nest variables
You can also create nested variables, sometimes called chained variables.
For example, if you had a variable called region
, you could have the hosts
variable show only hosts from the selected region with a query like:
SHOW TAG VALUES WITH KEY = "hostname" WHERE region = '$region'
You can fetch key names for a given measurement:
SHOW TAG KEYS [FROM <measurement_name>]
If you have a variable with key names, you can use this variable in a group-by clause. This helps you change group-by using the variable list at the top of the dashboard.
Use ad hoc filters
InfluxDB supports the special Ad hoc filters variable type. You can use this variable type to specify any number of key/value filters, and Grafana applies them automatically to all of your InfluxDB queries.
For more information, refer to Add ad hoc filters.
Choose a variable syntax
The InfluxDB data source supports two variable syntaxes for use in the Query field:
$<varname>
, which is easier to read and write but does not allow you to use a variable in the middle of a word.sqlSELECT mean("value") FROM "logins" WHERE "hostname" =~ /^$host$/ AND $timeFilter GROUP BY time($__interval), "hostname"
${varname}
sqlSELECT mean("value") FROM "logins" WHERE "hostname" =~ /^[[host]]$/ AND $timeFilter GROUP BY time($__interval), "hostname"
When you enable the Multi-value or Include all value options, Grafana converts the labels from plain text to a regex-compatible string, so you must use =~
instead of =
.
Templated dashboard example
To view an example templated dashboard, refer to this InfluxDB templated dashboard.
Was this page helpful?
Related resources from Grafana Labs
![Getting started with the Grafana LGTM Stack](/static/assets/featured/getting-started-with-grafana-lgtm-stack-amer_featured.png?w=200 200w, /static/assets/featured/getting-started-with-grafana-lgtm-stack-amer_featured.png?w=400 400w)
![Intro to Kubernetes monitoring in Grafana Cloud](/media/webinar/Screenshot-2024-02-12-at-4.09.30-PM.png?w=200 200w, /media/webinar/Screenshot-2024-02-12-at-4.09.30-PM.png?w=400 400w)
![Building advanced Grafana dashboards](/media/webinar/AMER_buildadv_notxt.png?w=200 200w, /media/webinar/AMER_buildadv_notxt.png?w=400 400w)