RRD工具结构和理解


RRD Tool Structure and understanding

我目前正在监测5栋不同的建筑,每栋建筑大约有300个房间。每个房间有4个传感器,其中三个传感器监测房间不同点的温度,一个传感器用于监测房间消耗的电量(基洛瓦特)。

我目前每15分钟对每个传感器进行一次轮询,每天产生576000个条目,我监测的建筑数量很快就会增加。

我目前将所有信息存储在MySQL中,我为每种传感器类型都有一个MySQL表,因此这些表分别命名为"power"、"temp1"、"temp2"answers"temp3"。这些表中的列为"id"、"building_id"、"epoch"、"value"。

然后,我使用Chart.js库和统计数据(如某个时间段内每栋建筑的用电量等)使用这些数据生成图形,我使用PHP完成所有这些工作。

我不相信我的MySQL数据库能够在没有大规模和集群的情况下处理这个问题

我需要能够查看5年的历史数据,尽管在一段时间后可能会丢失一些粒度。

我被告知RRD可能能够解决我的问题,并对此进行了一些研究,但仍有一些问题。

它还允许我使用Chart.js库创建自己的图形吗?如果我能从RRD获得时间/值JSON数据,这应该没问题

我还需要创建多少个不同的RRD文件?我需要每栋楼一个吗?每个房间?每个传感器?它仍然很容易管理吗。

我有PHP脚本,每隔15分钟运行一次,使用SNMP从传感器中提取数据,然后将数据插入MySQL。如果我可以使用相同的脚本也插入RRD,那也很棒,根据我所看到的,你可以使用PHP插入RRD中,所以这应该没问题。

编辑:我目前正在阅读http://michael.bouvy.net/blog/en/2013/04/28/graph-data-rrdtool-sensors-arduino/它已经开始回答我的一些问题。

是否有一个包含6000个度量的RRD文件,或5个包含1200个度量的文件等,取决于您如何管理数据。

首先,您不应该将样本在不同时间点到达的度量组合在一起。因此,如果您一次采样一个房间,那么每个房间可能应该有一个RRD文件(其中有4个度量)。这将取决于管理传感器的内容;如果每个房间或每栋楼都有一台设备。无论您有一个文件还是一千个文件,检索数据并绘制图形都可以工作(尽管"一千"场景在最新版本的RRDTool中效果要好得多)。

其次,您是否可能添加新的数据点(IE、建筑物或房间)?您无法(轻松)将新指标添加到现有的RRD文件中。因此,如果你希望在未来添加一栋新建筑,或者添加或删除一个房间,那么也许每栋建筑或每个房间一个RRD会更好。

在没有更多信息的情况下,我想你最好每个房间有一个RRD(包含4个指标),并分别更新它们。根据建筑和房间ID命名文件,它们可以根据Epoch保存功率和3个温度值。

对于绘图,RRDTool当然能够通过直接访问数据来创建自己的图形。然而,如果你想自己提取数据并将其放入图表中,这是可能的;Xport函数将允许您提取必要的数据点(可能来自多个RRD文件并具有聚合),然后您可以将这些数据点传递给您选择的图形库。如果您想要原始数据,还有Fetch函数。

如果数据采样间隔15分钟,请确保正确设置RRD间隔、心跳和RRA。特别是,RRA将指定执行什么聚合,以及数据在较高粒度下保持多长时间。RRA通常应与您期望绘制数据的分辨率相对应(这就是为什么人们通常使用5min/30min/2h/1d,因为这些分辨率与400像素宽度的每日、每周、每月和年度图表相对应)

您可能需要查看时间序列数据库,并测试一些具有内置可视化功能的系统,这是一个允许您执行聚合和PHP包装的API。时间序列数据库经过优化,可有效存储带时间戳的数据,并具有用于时间序列转换的内置功能。

https://en.wikipedia.org/wiki/Time_series_database