将单独的 RRD 文件合并为一个图形

Combine separate RRD files to a single graph

使用 rrd4j,如何将多个 .rrd 文件组合成一个 .rrd 或(理想情况下)一个图形?

更多详情:

我有好几本基本一样.rrd。每个文件记录了几个传感器数据读数,所有文件的名称都是sensor-1sensor-2。所以data1.rrddata2.rrd都会包含sensor-1

的数据源

DS定义如下

DS:sensor-1:GAUGE:35:U:U DS:sensor-2:GAUGE:35:U:U DS:sensor-3:GAUGE:35:U:U

我可以通过将数据源添加到这样的图表来为每个单独生成图表;

val graph = new RrdGraphDef()
graph.datasource("sensor-1", data1.rrd", "sensor-1", AVERAGE)
graph.datasource("sensor-2", data1.rrd", "sensor-1", AVERAGE)
graph.line("sensor-1", green)
graph.line("sensor-2", red)

但是如果我做同样的事情但是 data2.rrd(将另一个数据源添加到同一个 graph 实例),它似乎只是丢失了文件数据之一的前面的数据和图表。

我怀疑每个 DS 在文件中具有相同的名称可能是个问题。

有关如何使用常规 RRD 工具实现相同目的的建议也可能会有所帮助,因为我可能能够转换为 rrd4j

这条声明: graph.datasource("varname", "filename.rrd", "dsname", AVERAGE) 定义一个名为 varname 的新变量,它对应于文件 filename.rrd 中的 DS dsname,使用 AVERAGE 合并函数进行合并。

显然,同一个图中不能有两个同名的变量;但是,没有什么可以阻止您从多个不同的 RRD 文件中提取数据,也没有什么可以阻止您对 DS 名称使用不同的 varname。

但是,您应该只在变量名中使用字母数字——特别是避免使用“-”,即使它应该有效。下划线可以。

所以,这是完全有效的: graph.datasource("sensora", "sitea.rrd", "sensor", AVERAGE) graph.datasource("sensorb", "siteb.rrd", "sensor", AVERAGE) 并将定义两个变量,sensorasensorb 对应于两个不同 RRD 文件中的同名 DS。

不要使用 sensor-1 作为变量名,因为它包含一个“-”符号。

没有看到失败的 RRD4j 代码我不能肯定地说,但我怀疑这是因为您没有重命名 varname,使两个变量共享相同的名称并相互覆盖,或者因为变量名中的“-”。