繁体   English   中英

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

我的 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

我想让grafana scripted.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: []
                }]],
      },
    ],

现在,我不知道为什么,但我必须修改代码才能将关键的“主机名”考虑在内。 在函数 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 带有“主机名”

毕竟,调用我在开头提到的 URL 一切都很好

添加到上面的@mquevedob 答案,

像这样更改标签对象

"tags": 
[
    {
      key: "jobId",
      operator: "=" ,
      value: "340"          
    }
]

使用 InfluxDB 时,这在 Grafana 中应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM