2017-03-02 2 views
1

Ich benutze Grafana 4 und InfluxDB.grafana scripted influxdb

Ich muss durch den Aufbau der Parameter in der URL ein Diagramm der sagen CPU-Auslastung für einen bestimmten Host zeigen, wie diese

http://my_grafana:3000/dashboard/script/scripted.js?name=CPULoad&host=ussd1

i scripted Dashboards für diesen Einsatz bin versucht, aber ich kann nicht herausfinden, wie man scripted.js sagt, wo man nach den Daten von CPULoad suchen soll.

Kann mir jemand ein paar Hinweise geben?

Grüßen,

Martin

Antwort

1

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

Verwandte Themen