Grafana 10.0.0嵌套变量解析失败问题求助
解决Grafana嵌套变量解析问题的方案
针对你遇到的Grafana 10.0.0中嵌套变量无法自动解析的问题,以下是几种可行的解决方法:
方法1:调整变量格式触发二次解析
- 修改MySQL表中存储的SQL语句:将嵌套变量从
$var格式改为${var},同时修正clusterID的引号写法(避免重复引号导致语法错误):
SELECT timeStamp AS time,CAST(${best_cell_mro_kpi} AS DECIMAL(20,5))*100 as MRO_KPI FROM lab_mro_aggr_data_new WHERE $__timeFilter(timeStamp) and clusterID='${best_cell_clusterID}' and ${best_cell_ecgiID} is not null and ${best_cell_mro_kpi} is not null ORDER BY timestamp
- 面板查询调用变量时去掉
:raw修饰符:直接使用${best_cell_cdf}。Grafana会先解析best_cell_cdf变量得到SQL字符串,再递归解析字符串内的${xxx}变量,替换为实际值。
方法2:在变量查询阶段提前替换嵌套变量
如果无法修改MySQL中的SQL内容,可在定义best_cell_cdf变量的查询语句中,用MySQL字符串替换函数提前替换嵌套变量占位符:
假设原变量查询为:
SELECT query_content FROM your_template_table WHERE template_name = 'best_cell_cdf'
修改为:
SELECT REPLACE(REPLACE(REPLACE(query_content, '$best_cell_mro_kpi', '${best_cell_mro_kpi}'), '$best_cell_clusterID', '${best_cell_clusterID}'), '$best_cell_ecgiID', '${best_cell_ecgiID}') FROM your_template_table WHERE template_name = 'best_cell_cdf'
之后在面板查询中使用${best_cell_cdf}(不带:raw)即可触发二次解析。
方法3:用JavaScript变量手动解析嵌套内容
适用于复杂场景,需先在grafana.ini中开启allow_scripts = true:
- 新建JavaScript类型变量,命名为
resolved_best_cell_cdf - 编写解析代码:
let rawSql = vars.best_cell_cdf; // 逐个替换嵌套变量 rawSql = rawSql.replace(/\$best_cell_mro_kpi/g, vars.best_cell_mro_kpi); rawSql = rawSql.replace(/\$best_cell_clusterID/g, "'" + vars.best_cell_clusterID + "'"); rawSql = rawSql.replace(/\$best_cell_ecgiID/g, vars.best_cell_ecgiID); return rawSql;
- 在面板查询中调用
${resolved_best_cell_cdf:raw},此时变量已完成嵌套解析,可直接执行。
内容的提问来源于stack exchange,提问作者saiteja_n05
相关产品推荐
相关产品推荐

