Skip to main content

Grafana Reference

Macro

  • Grafana 内置变量通常在前端插值;Infinity datasource 的宏会在后端插值,更适合 URL、请求体和外部 API 参数。
  • Infinity macro 可用位置:URL、Request body、GraphQL query、URL parameters、Inline data、UQL、GROQ、Computed column selectors、Filter expressions。
Macro场景Output说明
${__from}全局1594671549254Dashboard 开始时间,默认毫秒时间戳
${__to}全局1594675149254Dashboard 结束时间,默认毫秒时间戳
${__from:date}全局2020-07-13T20:19:09.254ZDashboard 开始时间,ISO/RFC3339 格式
${__to:date}全局2020-07-13T21:19:09.254ZDashboard 结束时间,ISO/RFC3339 格式
${__from:date:YYYY-MM}全局2020-07Dashboard 开始时间,自定义日期格式
${__to:date:YYYY-MM}全局2020-07Dashboard 结束时间,自定义日期格式
$__dashboard全局Node Overview当前 Dashboard 名称
$__interval全局2mGrafana 自动计算的分组间隔
$__interval_ms全局120000$__interval 的毫秒数
$__name全局 / 旧面板series alias旧 Singlestat 的序列名称
${__timeFrom}Infinity1594671549254Dashboard 开始时间,后端插值,常用于 API 调用
${__timeTo}Infinity1594675149254Dashboard 结束时间,后端插值,常用于 API 调用
${__org.id}全局 / Infinity1当前 Grafana 组织 ID
${__org.name}全局Main Org.当前 Grafana 组织名称
${__plugin.id}Infinityyesoreyeram-infinity-datasource当前插件 ID
${__plugin.version}Infinity3.0.0当前插件版本
${__ds.uid}Infinityc8f2...当前数据源 UID
${__ds.name}InfinityInfinity当前数据源名称
${__ds.id}全局 / 旧字段12当前数据源 ID,已废弃
${__user.id}全局42当前用户 ID
${__user.login}全局 / Infinitywener当前用户登录名
${__user.email}全局 / Infinity[email protected]当前用户邮箱
${__user.name}全局 / InfinityWener当前用户显示名称
$__rangePrometheus / Loki1h当前 Dashboard 时间范围
$__range_msPrometheus / Loki3600000当前时间范围毫秒数
$__range_sPrometheus / Loki3600当前时间范围秒数
$__rate_intervalPrometheus1mPrometheus rate() 推荐间隔
$__rate_interval_msPrometheus60000$__rate_interval 的毫秒数
$timeFilter / $__timeFilter数据源time > now() - 7d当前时间范围过滤表达式
$__timezone全局Asia/Shanghai当前 Dashboard 时区
$__url_time_rangeLinkfrom=1594671549254&to=1594672349254当前时间范围 URL 参数
$__customInterval()Infinity1d按 Dashboard 时间范围返回不同值
$__combineValues()Infinityfoo:a OR foo:b给多个值加前缀、后缀,并用分隔符拼接
SQL time macroSQLWHERE $__timeFilter(ts)SQL 时间过滤、分组、epoch 范围宏,详见下方 SQL section
SQL variable formatSQL${host:sqlstring}SQL 查询里的模板变量转义与拼接,详见下方 SQL section

Global Variable

  • ${__from} / ${__to} 默认输出 Unix milliseconds,可用 :date 控制格式。
  • ${__from:date} / ${__to:date} 默认输出 ISO/RFC3339;:date:seconds 输出 Unix seconds。
  • 自定义日期格式不能包含 :,例如 ${__from:date:YYYY-MM};不带 :iso 时使用浏览器时间。
  • $__interval 由 Grafana 根据时间范围和图表宽度自动估算,近似 (to - from) / resolution
  • $__interval_ms$__interval 的毫秒数;InfluxDB 旧变量 $interval 等价但建议用 $__interval
  • $__range / $__range_ms / $__range_s 目前主要用于 Prometheus 和 Loki。
  • $__rate_interval / $__rate_interval_ms 主要用于 Prometheus rate(),避免窗口太小导致 rate 不稳定。
  • $timeFilter / $__timeFilter 会展开成数据源自己的时间过滤表达式,常见于 InfluxDB、Azure Monitor、MySQL、Postgres、MSSQL。
  • $__timezone 返回 utc 或 IANA 时区;如果选择 Browser Time,会尝试解析浏览器时区。
  • $__url_time_range 只适合 data link / panel link,需要自己加 ?&
  • $__name 只适用于旧 Singlestat,Grafana 8.0 后 Singlestat 已移除。
${__from:date:seconds}
${__to:date:iso}
$__interval
$__interval_ms
$__range
$__rate_interval
$__timezone
https://grafana.example/d/target?${__url_time_range}

Infinity Time Macro

  • ${__timeFrom} / ${__timeTo} 返回 Dashboard 时间范围边界。
  • Infinity 会在后端插值,适合外部 API 请求;插件版本要求:2.7.1+
  • ${__timeTo} 支持和 ${__timeFrom} 相同的格式参数。
Macro输出说明
${__timeFrom}1594671549254毫秒时间戳
${__timeFrom:date:seconds}1594671549秒级时间戳
${__timeFrom:date}2020-07-13T20:19:09.254ZISO/RFC3339 时间
${__timeFrom:date:iso}2020-07-13T20:19:09.254ZISO/RFC3339 时间
${__timeFrom:date:YYYY-MM-DD}2020-07-13自定义日期格式
${__timeFrom:date:YYYY:MM:DD:hh:mm}2020:07:13:08:19自定义日期时间格式
${__from:date:YYYY-MM}
${__to:date:YYYY-MM}

${__timeFrom}
${__timeFrom:date:seconds}
${__timeFrom:date:YYYY-MM-DD}
${__timeTo:date:iso}

$__customInterval()

  • 用途:根据 Dashboard 时间范围返回不同值,常用于动态调整查询粒度、step、bucket、API 参数。
  • 语法:$__customInterval(duration1,value1,duration2,value2,...,defaultValue)
  • 参数必须是奇数个:3579 ...。
  • 按顺序判断:时间范围小于等于 durationN 时返回 valueN;都不匹配时返回最后的 defaultValue
  • duration 使用 Grafana duration 语法,例如 1m1h1d7d
Dashboard rangeQueryOutput
24h$__customInterval(1m,1 MIN,1d)1d
24h$__customInterval(2d,2 DAYS,1d)2 DAYS
24h$__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d)1 DAY
7d$__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d)10 days
30d$__customInterval(5m,5m,1d,1d,10d,10d,30d)30d
http://api.example.com?step=$__customInterval(5m,10s,1d,1m,10d,10m,1h)

$__combineValues()

  • 用途:把多个值分别加上前缀、后缀,再用分隔符拼接,适合多选变量。
  • 语法:$__combineValues(prefix,suffix,separator,value1,value2,value3,...)
  • 每个 value 会变成 prefix + value + suffix,然后用 separator 连接。
  • 当刚好 4 个参数且第 4 个参数是 * 时返回空字符串,用于 multi-value 变量的 All
参数说明
prefix每个值前面加的字符串
suffix每个值后面加的字符串
separator多个值之间的分隔符
value...要拼接的一个或多个值,通常来自 ${var:csv}
Escape字符
__comma,
__space空格
__open(
__close)
QueryOutput
$__combineValues(p,s,i,v)pvs
$__combineValues(p,s,__space,v1,v2)pv1s pv2s
$__combineValues(__open,__close, OR ,foo,bar)(foo) OR (bar)
$__combineValues(,, OR ,foo,bar)foo OR bar
$__combineValues(p,s,i,*)空字符串
$__combineValues(foo:,, OR ,${server:csv})foo:server2 OR foo:server3
$__combineValues(foo:,,__comma,${server:csv})foo:server2,foo:server3
# server 多选: server2, server3
$__combineValues(foo:,, OR ,${server:csv})
# -> foo:server2 OR foo:server3

# server = All 且 Custom all value = *
$__combineValues(foo:,, OR ,${server:csv})
# -> 空字符串

SQL Variable / Macro

  • Grafana SQL datasource macro 会展开成目标 SQL 方言;下表的 Output 以 MySQL 官方文档为例。
  • fill 可选值常见为 0NULLprevious,只对 time series 补点有意义;SQL 表达式本身通常不因 fill 改变。
  • SQL 查询里使用模板变量时优先选择明确 formatter,避免默认格式和 SQL 注入风险。

SQL Variable Output

用法Output场景说明
${ids:csv}1,2,3id IN (${ids:csv})数值列表,不加引号
${names:singlequote}'alice','bob'name IN (${names:singlequote})字符串列表,简单单引号包裹
${names:sqlstring}'alice','bob''s'name IN (${names:sqlstring})SQL 字符串,单引号按 SQL 规则转义,优先用于字符串列表
${clause:raw}status = 'ok'WHERE ${clause:raw}不转义,必须只用于受控变量
${ids:json}[1,2,3]JSON 函数或 JSON 字段查询输出 JSON 数组,不是普通 IN 列表
$__interval5m$__timeGroup(ts,$__interval)SQL macro 的时间分组间隔参数
$__interval_ms300000数值表达式或自定义 bucket$__interval 的毫秒数

SQL Macro Output

Macro参数Output / MySQL 示例说明
$__time(column)columnUNIX_TIMESTAMP(column) AS time_sec把时间列转换为 Grafana 识别的时间列
$__timeEpoch(column)columnUNIX_TIMESTAMP(column) AS time_sec把时间列转换为 Unix epoch 时间
$__timeFilter(column)columncolumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)当前 Dashboard 时间范围过滤条件
$timeFiltertime > now() - 7d当前时间范围表达式,具体输出依赖数据源
$__timeFrom()FROM_UNIXTIME(1494410783)Dashboard 开始时间,SQL 时间表达式
$__timeTo()FROM_UNIXTIME(1494410983)Dashboard 结束时间,SQL 时间表达式
$__timeGroup(column,'5m')column, intervalcast(cast(UNIX_TIMESTAMP(column)/300 as signed)*300 as signed)按时间间隔分组
$__timeGroup(column,'5m',0)column, interval, fill同上,Grafana 补缺失点为 0按时间间隔分组并补点
$__timeGroup(column,'5m',NULL)column, interval, fill同上,Grafana 补缺失点为 NULL按时间间隔分组并补 NULL
$__timeGroup(column,'5m',previous)column, interval, fill同上,Grafana 用前一个值补点按时间间隔分组并延续前值
$__timeGroupAlias(column,'5m')column, interval, fill?$__timeGroup(...) AS time按时间间隔分组,并把结果别名为 time
$__unixEpochFilter(column)columncolumn > 1494410783 AND column < 1494497183Unix 秒级时间范围过滤
$__unixEpochFrom()1494410783Dashboard 开始时间,Unix 秒
$__unixEpochTo()1494497183Dashboard 结束时间,Unix 秒
$__unixEpochNanoFilter(column)columncolumn > 1494410783152415214 AND column < 1494497183142514872Unix 纳秒时间范围过滤
$__unixEpochNanoFrom()1494410783152415214Dashboard 开始时间,Unix 纳秒
$__unixEpochNanoTo()1494497183142514872Dashboard 结束时间,Unix 纳秒
$__unixEpochGroup(column,'5m',fill?)column, interval, fill?类似 $__timeGroup,但输入列是 Unix 秒Unix 秒级时间按间隔分组
$__unixEpochGroupAlias(column,'5m',fill?)column, interval, fill?类似 $__unixEpochGroup(...) AS timeUnix 秒级时间按间隔分组并命名为 time
SELECT
$__timeGroupAlias(created_at, $__interval, 0),
count(*) AS value
FROM audit_logs
WHERE $__timeFilter(created_at)
AND user_id IN (${user_ids:csv})
AND status IN (${status:sqlstring})
GROUP BY 1
ORDER BY 1;

Metadata Macro

Macro说明
${__plugin.id}当前插件 ID
${__plugin.version}当前插件版本
${__ds.uid}当前数据源 UID
${__ds.name}当前数据源名称
${__user.login}当前用户登录名
${__user.email}当前用户邮箱
${__user.name}当前用户显示名称

annotations

SELECT
created_at,
action,
operator,
id,
target,
title ,
text
FROM audit_logs
WHERE $__timeFilter(created_at)
-- WHERE created_at >= FROM_UNIXTIME($__unixEpochFrom()) AND created_at <= FROM_UNIXTIME($__unixEpochTo())
ORDER BY id DESC
LIMIT 50;
  • $__timeFilter(created_at)
    • -> created_at BETWEEN '2023-11-28 10:00:00' AND '2023-11-28 11:00:00'
  • Quota 问题
    • multi value 的时候
    • ${var:raw} 得到原始,然后自己做 quote 处理

Variable Formatting Options

语法:${var_name:format}

格式输出转义 & 结合逻辑常见用途
:regex(a\.b|c)转义 正则特殊字符(. -> \.),外层加 括号{label=~"${var:regex}"}
:pipea.b|c不转义 特殊字符,仅用 | 分隔,无括号自定义正则组合
:rawa.b,c不转义,多选时以 逗号 分隔。别名、防止二次转义
:csva.b,c:raw,逗号分隔。SQL IN 操作 (非字符串)
:json["a.b","c"]转换为 JSON 数组格式。API 请求体
:percentencodea.b%2CcURL 编码(主要针对分隔符)。URL 参数
:singlequote'a.b','c'单引号包裹,逗号分隔。SQL 字符串列表
:doublequote"a.b","c"双引号包裹,逗号分隔。JSON 或某些 SQL
:sqlstring'a.b','c'单引号包裹,并 转义单引号 (' -> '')。安全的 SQL 注入防护
:glob{a.b,c}Glob 格式。Graphite 查询