grafana 脚本化 influxdb
grafana scripted influxdb
我正在使用 grafana 4 和 influxDB。
我需要通过在 URL 中构建参数来显示特定主机的 CPU 使用情况图
http://my_grafana:3000/dashboard/script/scripted.js?name=CPULoad&host=ussd1
我正尝试为此使用脚本化仪表板,但我不知道如何告诉 scripted.js 在哪里寻找 CPULoad 的数据。
谁能给我一些指点?
问候,
马丁
好吧,我发现了它是如何工作的,但我不得不说它很奇怪,它没有在任何地方记录,它涉及对源代码的一点修改...
先了解一下上下文
我有一个名为 "Nagios" 的 influxdb 数据库。在这个数据库里面,我有几个系列。 influxdb 中的一个节目系列显示如下
> show series
key
---
nagios.CPULoad,hostname=cbba.storage,state=OK
nagios.CPULoad,hostname=ussd1,state=OK
nagios.CPULoad,hostname=ussd2,state=OK
nagios.CPULoad,hostname=ussd3,state=OK
nagios.CPULoad,hostname=ussd4,state=OK
系列CPULoad的数据结构是这样的
> select * from "nagios.CPULoad" limit 1
name: nagios.CPULoad
time hostname load1 load15 load5 state
---- -------- ----- ------ ----- -----
1487867813000000000 cbba.storage 0 0 0 OK
我的URL到scripted.js如下:
http://10.72.6.220:3000/dashboard/script/scripted.js?name=CPULoad&field=load1&hostname=ussd3
name indicates the series in influxDB I want to graph
field indicates which field to use
hostname indicates the host to choose
我要grafanascripted.js搭建的SQL如下
SELECT mean("load1") FROM "nagios.CPULoad" WHERE "hostname" = 'ussd3' AND $timeFilter GROUP BY time($interval) fill(null)
在scripted.js里面构建的代码涉及到修改dashboard.rows结构体中的"targets"参数,结果是这样的(我是看代码才发现的) )
targets: [
{
"measurement": "nagios." + ARGS.name,
"metric": ARGS.name,
"tags": {
"hostname": {
operator: "=" ,
value: ARGS.hostname
}
},
"select": [[{
type: "field",
params: [ARGS.field]
}, {
type: "mean",
params: []
}]],
},
],
现在,我不知道为什么,但我必须修改代码才能考虑到密钥 "hostname"。在函数 renderTagCondition 中,为方便起见,我将其复制到此处
a.prototype.renderTagCondition = function(a, b, c) {
var d = ""
, e = a.operator
, f = a.value;
return b > 0 && (d = (a.condition || "AND") + " "),
e || (e = /^\/.*\/$/.test(f) ? "=~" : "="),
"=~" !== e && "!~" !== e ? (c && (f = this.templateSrv.replace(f, this.scopedVars)),
">" !== e && "<" !== e && (f = "'" + f.replace(/\/g, "\\") + "'")) : c && (f = this.templateSrv.replace(f, this.scopedVars, "regex")),
d + '"' + a.key + '" ' + e + " " + f
}
返回值
d + '"' + a.key + '" ' + e + " " + f
好像写错了...应该是
d + '"' + b + '" ' + e + " " + f
因为 b 携带 "hostname"
在这一切之后,调用我在开始时提到的 URL 一切都很好
添加到上面的@mquevedob 回答,
像这样更改标签对象
"tags":
[
{
key: "jobId",
operator: "=" ,
value: "340"
}
]
当使用 InfluxDB 时,这应该可以在 Grafana 中正常工作。
我正在使用 grafana 4 和 influxDB。
我需要通过在 URL 中构建参数来显示特定主机的 CPU 使用情况图
http://my_grafana:3000/dashboard/script/scripted.js?name=CPULoad&host=ussd1
我正尝试为此使用脚本化仪表板,但我不知道如何告诉 scripted.js 在哪里寻找 CPULoad 的数据。
谁能给我一些指点?
问候,
马丁
好吧,我发现了它是如何工作的,但我不得不说它很奇怪,它没有在任何地方记录,它涉及对源代码的一点修改...
先了解一下上下文
我有一个名为 "Nagios" 的 influxdb 数据库。在这个数据库里面,我有几个系列。 influxdb 中的一个节目系列显示如下
> show series
key
---
nagios.CPULoad,hostname=cbba.storage,state=OK
nagios.CPULoad,hostname=ussd1,state=OK
nagios.CPULoad,hostname=ussd2,state=OK
nagios.CPULoad,hostname=ussd3,state=OK
nagios.CPULoad,hostname=ussd4,state=OK
系列CPULoad的数据结构是这样的
> select * from "nagios.CPULoad" limit 1
name: nagios.CPULoad
time hostname load1 load15 load5 state
---- -------- ----- ------ ----- -----
1487867813000000000 cbba.storage 0 0 0 OK
我的URL到scripted.js如下:
http://10.72.6.220:3000/dashboard/script/scripted.js?name=CPULoad&field=load1&hostname=ussd3
name indicates the series in influxDB I want to graph
field indicates which field to use
hostname indicates the host to choose
我要grafanascripted.js搭建的SQL如下
SELECT mean("load1") FROM "nagios.CPULoad" WHERE "hostname" = 'ussd3' AND $timeFilter GROUP BY time($interval) fill(null)
在scripted.js里面构建的代码涉及到修改dashboard.rows结构体中的"targets"参数,结果是这样的(我是看代码才发现的) )
targets: [
{
"measurement": "nagios." + ARGS.name,
"metric": ARGS.name,
"tags": {
"hostname": {
operator: "=" ,
value: ARGS.hostname
}
},
"select": [[{
type: "field",
params: [ARGS.field]
}, {
type: "mean",
params: []
}]],
},
],
现在,我不知道为什么,但我必须修改代码才能考虑到密钥 "hostname"。在函数 renderTagCondition 中,为方便起见,我将其复制到此处
a.prototype.renderTagCondition = function(a, b, c) {
var d = ""
, e = a.operator
, f = a.value;
return b > 0 && (d = (a.condition || "AND") + " "),
e || (e = /^\/.*\/$/.test(f) ? "=~" : "="),
"=~" !== e && "!~" !== e ? (c && (f = this.templateSrv.replace(f, this.scopedVars)),
">" !== e && "<" !== e && (f = "'" + f.replace(/\/g, "\\") + "'")) : c && (f = this.templateSrv.replace(f, this.scopedVars, "regex")),
d + '"' + a.key + '" ' + e + " " + f
}
返回值
d + '"' + a.key + '" ' + e + " " + f
好像写错了...应该是
d + '"' + b + '" ' + e + " " + f
因为 b 携带 "hostname"
在这一切之后,调用我在开始时提到的 URL 一切都很好
添加到上面的@mquevedob 回答,
像这样更改标签对象
"tags":
[
{
key: "jobId",
operator: "=" ,
value: "340"
}
]
当使用 InfluxDB 时,这应该可以在 Grafana 中正常工作。