Nun fand ich heraus, wie es funktioniert, aber ich muss sagen, es wierd ist, dass es nicht überall dokumentiert ist und es sich um eine kleine Änderung am Quellcode ...
ein wenig Kontext ersten
ich habe eine influxdb Datenbank namens „Nagios“. In dieser Datenbank habe ich mehrere Serien. eine Show-Serie in influxdb zeigt die folgende
> 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
Die Struktur der Daten in Serie CPULoad wie diese zu scripted.js
> select * from "nagios.CPULoad" limit 1
name: nagios.CPULoad
time hostname load1 load15 load5 state
---- -------- ----- ------ ----- -----
1487867813000000000 cbba.storage 0 0 0 OK
Meine URL
ist wie folgt:
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
Die SQL, die ich mit grafana scripted.js erstellen möchte, lautet wie folgt
SELECT mean("load1") FROM "nagios.CPULoad" WHERE "hostname" = 'ussd3' AND $timeFilter GROUP BY time($interval) fill(null)
Der Code innerhalb scripted.js beinhaltet Modifizieren der „Ziele“ Parameter in dashboard.rows Struktur zu bauen, und es stellt sich heraus, so zu sein (ich fand dieses heraus, nachdem sie durch den Code gehen)
targets: [
{
"measurement": "nagios." + ARGS.name,
"metric": ARGS.name,
"tags": {
"hostname": {
operator: "=" ,
value: ARGS.hostname
}
},
"select": [[{
type: "field",
params: [ARGS.field]
}, {
type: "mean",
params: []
}]],
},
],
Jetzt Ich weiß nicht warum, aber ich musste den Code ändern, damit der Schlüssel "hostname" berücksichtigt wird. In Funktion renderTagCondition, die für I Bequemlichkeit hier kopieren
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
}
der zurückgegebene Wert
d + '"' + a.key + '" ' + e + " " + f
scheint falsch zu sein ... Es sollte
d + '"' + b + '" ' + e + " " + f
sein, da b trägt "Hostnamen"
Nach all dem, der Aufruf der URL, die ich am Anfang erwähnt hat alles gut geklappt l