因为我只用 grafana,但是并不给他写查询,所以我对他的原理完全不懂。
大体上来说,我们直接针对数据库(vertica)写查询,然后把查询发给 grafana team,然后他们把 vertica 查询转换成 grafana 的格式,最后给我们展示监控图表。
比方说我需要查看毛利,需要刷新时间设定为每五分钟:
SELECT SUM(GrossRevenue) FROM Fact_Revenue WHERE GrossRevenue > 0;
然后 Grafana 就能每五分钟刷新图表。
但是我一直有一个疑问,就是我们其实用 grafana 做很多展示,可能同时有二三十个查询需要每五分钟运行一次,那是如何保证没有把数据仓库搞跨掉?不好意思我也不知道我问的这个问题是否问得恰当。
我现在想要自己练手用 Python 写个类似的系统,实现如下的简单功能:也就是说用户可以在 UI 中输入他想要聚合的列、需要刷新的频率,然后我就每 X 分钟更新一次图表。问题是我如何解决以下问题:
- 确保在有多个查询的情况下能够按时更新
- 如何尽量少读数据?(这个问题我初步的想法是,比如说 2020-08-20 00:00:00 创建的查询,需要每五分钟运行一次,那我可以记录上一次开始运行的时间,加个
WHERE EventTime BETWEEN {LastRun} AND {LastRun + 300},总之就是做累加查询。但是我觉得我的想法似乎也不成熟。。。
不知道诸位朋友有没有写过类似的简单系统?