用于BeerTender啤酒系统的Grafana仪表板

说明。 BeerTender-用于冷却和装瓶Krups和Heineken的啤酒的设备。 根据制造商的说法,在小桶打开后的30天内,它可以保持新鲜啤酒的质量。 当然,对于系统管理员和开发人员而言,使用常规的在线仪表板监视其桶中啤酒的温度和水平很方便。 上一篇文章介绍了如何将BeerTender连接到Warp 10 ,现在我们将设置Grafana仪表板



欧洲最大的托管和云提供商OVHcloud积极使用Warp 10平台,其所有监视数据都流入一个Warp 10集群中。 这些是40万台服务器,27个数据中心,每秒总共有数百万个指标!

他们有许多仪表板,现在OVHcloud是开放源代码插件Warp 10 Grafana的维护者 ,我们在一段时间之前就开始开发它。 我们将谈论他。 如果您想自己尝试,则数据位于公共领域-您可以在下面复制WarpScript。


我们已经讨论了如何将BeerTender连接到Warp 10。

安装方式


首先,安装Grafana。 按照其网站上说明进行操作

我们连接到默认http://localhost:3000/ ,转到默认密码admin / admin,然后更改管理员密码。

对于最新版本的Grafana,必须手动安装该插件。 使用grafana-cli的方法将不起作用。 您只需要将插件存储库克隆到Grafana插件目录中,并在所有位置修复权限。

 sudo systemctl stop grafana-server.service sudo chown -R grafana:mygroup /var/lib/grafana/ sudo chmod g+rw /var/lib/grafana/plugins git clone git@github.com:ovh/ovh-warp10-datasource.git /var/lib/grafana/plugins/ovh-warp10-datasource sudo chown -R grafana:mygroup /var/lib/grafana/plugins sudo systemctl start grafana-server.service 

构型


在Grafana配置中,转到“数据源”部分并添加类型为Warp 10的数据源。确保它指向所需的Warp 10实例。您可以指定与我们相同的设置:



是时候从BeerTender中获取数据了...

温度显示


创建一个新的仪表板,添加一个具有Graph可视化类型的面板,然后进入“查询”模式:


初始温度(传感器的整数值)

  • 在数据源中,选择“ Warp 10”(或默认值)
  • 打开WarpScript编辑器
  • 复制下面的WarpScript
  • 在右上角,选择“过去30天”
  • 保存结果

 "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE [ $rt 'beertender.rawtemperature' {} NOW 30 d ] FETCH 0 GET 

该脚本将显示来自ADC传感器的初始值。 请注意,Grafana中的WarpScript编辑器没有以前强大,这里没有自动补全功能。 您可以在WarpStudio或VSCode中编写脚本,因此将具有语法突出显示和在线文档,然后将结果复制并粘贴到Grafana中。

自动间距


在此示例中,选择30天间隔并在过去30天中以graphan设置查看模式。 如果我们选择最后一天或最后一年的查看模式,WarpScript将始终每30天请求一次数据。 该插件解决了这个问题:在WarpScript中可以使用两个变量- $end$interval

 [ $rt 'beertender.rawtemperature' {} $end $interval ] FETCH 0 

啤酒温度


与参考传感器相比,我对水,冰和热水进行了多次测量……结果如下:

  T(°C)初始值
 18.3 680
 41.5 870
 37.6 841
 10586
 11596
 8559
 1,467
 4,500
 6.5 535 

将这些值插入GTS时间序列中,并根据传感器的初始值对结果进行排序:

 NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT 


预期插值

来自传感器的源数据以整数形式出现。 插值的最简单方法是先构建曲线,然后使用ATTICK函数从中读取以度为单位的值。

WarpScript中的插值很容易。 我们创建一个桶来设置所需的时间段,然后开始插值,并填写缺失值。

 [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE 




太好了 现在,您需要编写自己的映射器,以将传感器中的每个值替换为真实的物理温度值,并将结果转换为石墨烷使用的格式。

警告 :值每10秒到达一次。 在三个月内,将累积27万个值。 Grafana太多了……只需保持每个小时的最大值即可。 在WarpScript中,这是bucketizer.max bucketizer的BUCKETIZE

您可以将此WarpScript复制到Grafana中:

 // raw value interpolation "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT 'linearInterpolation' STORE [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE [ $rt 'beertender.rawtemperature' {} NOW $end $interval ] FETCH // subsampling, keep max of every hour [ SWAP bucketizer.max 0 1 h 0 ] BUCKETIZE UNBUCKETIZE // do not try to interpolate missing buckets. // interpolation [ SWAP <% 'l' STORE [ $l 0 GET //same tick NaN NaN NaN //no latitude/longitude/elevation $truthtableGTS $l 7 GET 0 GET ATTICK 4 GET //take the interpolated value ] %> MACROMAPPER 0 0 0 ] MAP 'temperature (°C)' RENAME 


5°C,啤酒正常


BeerTender仪表板,第一版

桶级


应变仪测量桶中的液位。但这是生锈的金属支架上的便宜的三线传感器。 无法从此类设备获得准确的信息。 因此,输出确实是一个嘈杂的结果,并且绝对值不能被信任也就不足为奇了。 对于我们的BeerTender,我找到了Grafana的实验公式,以百分比形式显示当前水平。

提示:Warp 10插件仅从GTS检索数据。 即使您要显示单个值,也需要在GTS数据中的某一点显示它。

这是WarpScript,它获取最后一个数据点并将其转换为百分比值,并创建一个具有一个点的时间序列:

 "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE //read for beer level [ $rt 'beertender.rawvalue' {} NOW -1 ] FETCH 0 GET VALUES 0 GET 'rawSensorValue' STORE //raw correction: // empty: 30.8e6 // full (and cold): 30.5e6 30.8e6 $rawSensorValue - 0 MAX 2800 / 100 MIN 'beerlevelPercent' STORE $beerlevelPercent NEWGTS 'Barre Level (%25)' RENAME 1 NaN NaN NaN $beerlevelPercent ADDVALUE 

将此WarpScript用作对具有Gauge可视化类型的面板的请求:


好指标

如果您有兴趣,可以查看源数据...现在,我们有了一个令牌,可以访问啤酒消费的唯一统计信息!

结论


  • 如果最近可以控制监视数据,则Grafana可以轻松集成Warp 10数据源。
  • Grafana插件需要GTS时间序列或GTS列表。
  • OVHcloud是当前的插件维护者。 随时贡献!
  • 阅读文档以获取更多信息。
  • 如果您想丰富数据的可视化,可以使用我们现成的Web组件

Source: https://habr.com/ru/post/zh-CN477870/


All Articles